Jun's Blog

기본 서버 보안 설정

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

접속 log 확인

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

  • SSH 로그 확인
    • /var/log/auth.log 에서 서버에 접속한 기록들을 볼 수 있다.
  • 접속시도한 내용 확인
    • 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 로 바꾼다. 비밀번호로 접근하는 걸 아예 막아버린다.
key는 보통 .ssh directory 안에 두고 directory 권한은 700 key 권한은 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 파일을 생성하여 원하는대로 설정하면 된다.

[DEFAULT]

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

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

# 최대 허용 횟수
maxretry=3

# 이 시간동안 maxretry횟수만큼 실패시 차단
findtime=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로 터널링을 해서 접속한다. 그러면 다른 서비스에도 접속하기 어렵지 않을까?
이 부분은 더 공부해서 정리해 봐야 겠다.