VPN을 통해 ssh를 접속하지 않는 이상 서버를 공개망에서 사용하게 될 경우 ssh 접속은 외부에 노출될 수 밖에 없습니다.
대부분 해외에서 지속적으로 ssh 로그인을 시도하면서 무작위 비밀번호를 대입합니다.
특히, 지난 Brute-force 해킹으로 인한 서버 탈취 사건을 경험한 이후로 SSH 보안의 중요성을 실감했습니다.
0. 보안? 내가 필요할까?
우분투 서버에서 아래 명령어를 실행시키면, 실시간 ssh 로그인 실패기록을 볼 수 있습니다.
journalctl -f

깜짝 놀랄 수도 있습니다.
실시간으로 계속해서 로그인시도 (공격) 이 발생하고 있습니다.
먼지와 같은 우리 보안
1. 당장 설치하기.

Fail2ban은 ssh log파일을 스캔해 수상한 ip를 ban해주는 소프트웨어입니다.
1-1. 설치하기
우분투에서 다음을 실행시킵니다.
apt-get install fail2ban
방화벽을 확인해봅니다.
iptables -L
...
Chain f2b-sshd (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
...
성공적으로 fail2ban이 추가된 것을 볼 수 있습니다.
1-2. 사용자 설정하기
sudo vim /etc/fail2ban/jail.local
아래 내용을 입력해 입맛에 맞도록 설정해줍니다.
[DEFAULT]
## 차단하지 않을 IP
ignoreip = 127.0.0.1/8 192.168.10.0/24
# 접속을 차단할 시간. 600 = 10분
bantime = 10800
# 최대 허용 횟수
maxretry = 10
#아래 시간동안 maxretry횟수만큼 실패시 차단
findtime = 86400
# (선택) 메일 알림기능
destemail = sysadmin@example.com
sender = fail2ban@my-server.com
mta = sendmail
action = %(action_mwl)s
[sshd]
enabled = true
#여러 포트를 사용할 경우 port = ssh,10022
port = 22
filter = sshd
logpath = /var/log/auth.log
위와 같이 저장하면, 아래 규칙으로 동작합니다.
- 최근 86400분 (60일) 동안
- 10회의 로그인을 실패하면
- 10800분 (180시간) 차단
1-3. 서비스 시작하기
service fail2ban restart
주의할 점은, restart할 때마다 벤 목록이 초기화 된다는 점입니다.
2. 기본 사용법
이제 서버에 접속하는 ip를 차단하고 관리할 수 있는 권한이 생겼습니다.
하지만 사용하다가 caps lock이 켜져있을 수도 있고, 비밀번호를 잘못 알려주어 공동작업자가 차단당할 수도 있습니다.
만약, 실수로 차단당했을 때, 푸는 방법을 알아보겠습니다.
2-1. 현재 차단 현황 보기
sudo fail2ban-client status sshd
2-2. 차단 풀어주기
sudo fail2ban-client set sshd unbanip 000.000.000.000
Status for the jail: sshd
|- Filter
| |- Currently failed: 5
| |- Total failed: 58
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 25
|- Total banned: 25
`- Banned IP list: 106.12.159.235 106.75.141.202 112.30.185.8 112.85.42.195 119.203.240.76 119.207.126.21 124.74.154.66 138.197.183.21 157.7.52.245 165.22.160.32 178.116.159.202 191.191.35.159 191.243.143.170 192.243.215.42 200.70.56.204 223.171.32.56 51.68.143.224 51.77.140.111 68.183.50.149 81.12.159.146 187.32.178.33 150.95.199.179 197.248.16.118 41.78.201.48 101.91.242.119
잠깐사이에 무려 25개의 ip가 밴되어있네요.
fail2ban이 잘 작동하고 있습니다.
결론
간단한 설정만으로 brute-force 공격시도를 방어해보았습니다.
이 외에도 다양한 설정이 가능하니, 공식 메뉴얼을 참고해주세요.
감사합니다!