Server 보안 설정

기본적인 보안 설정 해보기

서비스를 하다 보니 내 서버를 누가 털어가지 않을까 항상 걱정이 된다.
그래서 기초적인 보안 설정으로 서버에 들어오는걸 막아보고자 한다.

접속 Log 확인

우선 누가 실제로 접속을 시도했는지 확인해 봤다.

  • SSH 로그를 확인

    • /var/log/auth.log에서 서버에 접속한 기록들을 볼 수 있다.
  • Brute force로 접속 시도

    • grep sshd.*Did /var/log/auth.log | less
  • 접속 시도 했으나 실패한 내용만

    • grep sshd.Failed /var/log/auth.log | less

그런데 이미 누가 접속을 성공해서 내 서버를 마음대로 쓰고 있을 수 있기 때문에 실패한 걸로만 보고 안심하면 안 된다.
실제로 내 AWS EC2서버에 내 IP외의 수 많은 IP들이 찍혀 있어서 위치를 알아봤더니 미국, 유럽, 이란 등 다양하게 찍혀 있었다.

외부에서 조치

SSH Key 이용

비밀번호 보단 SSH Key를 이용하는게 좋다.
/etc/ssh/sshd_config 에서 password_authenticationno로 바꾼다. 비밀번호로 접근하는 걸 아예 막아버린다.
그리고 키를 사용할 땐 키 관리를 잘해야 한다. 실수로 github에 같이 올려버리면 안 된다.
key는 보통 .ssh directory 안에 두고 권한은 700으로 키 권한은 400으로 설정하여 아무나 쓰지 못하도록 해 놓는다.

보안 그룹 설정

AWS, Azure, GCP 와 같은 클라우드 서비스를 사용한다면 인바운드를 내 IP만 허용한다. 집에서 서버를 돌린다면 공유기의 네트워크 규칙을 바꾸거나 포트포워딩 설정시 IP를 제한한다.
하지만 허용된 IP에서만 접속할 수 있기 때문에 접속할 수 있는 장소가 한정적이게 된다. 작업은 집에서도 카페에서도 할 수 있기 때문에 IP가 매번 바뀐다. 그래서 VPN을 사용해서 해당 IP를 등록해 놓고 서버에 접속할 때는 VPN을 통해서만 접속한다. Lightsail에 WireGaurd를 돌리고 있는데 저렴하고 사용하기 편하다.

내부에서 조치

포트 변경

SSH 포트를 바꿔준다. SSH포트는 기본적으로 22번이고 모두가 알기 때문에 공격 받기 쉽다. 체감상 포트만 바꿔줘도 반 정도 시도가 줄어드는 것 같다. /etc/ssh/sshd_config에서 바꿀 수 있다.

fail2ban

다음으로 fail2ban을 사용하여 몇 번 이상 접속을 시도했다가 실패한 경우 Ban 시킨다. (서버를 재부팅하거나 fail2ban서비스를 재시작하면 Ban이 풀린다.)
/etc/fail2ban/jail.local 파일을 생성해서 원하는대로 설정하면 된다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[DEFAULT]

# 차단하지 않을 IP
ignoreip=127.0.0.1/8

# 차단 시간 (단위 분)
bantime=14400

# 최대 허용 횟수
maxretry=3

# 이 시간동안 maxretry횟수만큼 실패시 차단
findtie=43200

[sshd]
enabled=true
port=22
filter=sshd
logpath=/var/log/auth.log
  • 현재 차단 상황 보기
    • sudo fail2ban-client status sshd
  • 차단 IP 풀어주기
    • sudo fail2ban-client set sshd unbanip 123.123.123.123
  • 서비스 실행
    • sudo systemctl enable fail2ban
    • sudo systemctl start fail2ban

방화벽 설정

iptables로 할 수 있지만 요즘엔 ufw가 기본으로 사용되어서(최신 ubuntu의 경우) ufw를 사용해서 방화벽을 설정했다.
설정을 해 놓고 포트를 변경하면 다시 방화벽 설정을 바꿔줘야 하므로 미리 바꿀 포트는 바꾸고 설정하는게 편하다.

  • ufw를 활성화 시키기 전에 허용 포트를 설정해 준다.
    • sudo ufw allow 22/tcp
    • sudo ufw enable 이렇게 하면 허용한 포트를 제외한 나머지는 모두 방화벽에 막힌다.

비슷하게 iptables로 더 구체적인 규칙을 만들고 설정할 수 있어서 외국 IP로 추정되는 것들을(특히 중국) 미리 등록해 놓고 차단 시키는 방법을 해봤지만 효과가 있는지는 잘 모르겠다.

그리고 RDS나 다른 서비스를 이용하려면 EC2에서만 접속할 수 있도록 설정한 다음 SSH로 터널링을 해서 접속한다. 그러면 다른 서비스에도 접속하기 어렵지 않을까? 아니면 EC2가 털리면 다 털리는 거일 수도 있으려나.. 이 부분은 더 공부해서 정리해 봐야 겠다.

By Jun
Built with Hugo
Theme Stack designed by Jimmy