인터넷에 열린 SSH 포트를 가지고 계신다면 하루에도 수백 번씩 SSH 연결 시도가 발생한다는 사실을 알고 계실 겁니다. 그리고 그 IPv4 주소를 조회해 보면 중국, 러시아 또는 다국적 서버 호스팅(클라우드) 회사가 출발지입니다.
그래서 개인이 할 수 있는 가장 효과적인 방법을 생각해 보았는데, 일정 기간 /var/log/auth.log를 모아두었다가 https://www.whatismyip.com/ 등의 IP 주소 정보를 조회할 수 있는 사이트에서 ASN IP Range를 찾아 서브넷 째로 차단하는 것이 낫겠다 싶었습니다.
어차피 국내에서만 접속이 되면 되니까요.
물론 SSH를 인터넷에 오픈할 때는 sshd_config를 수정해서 Password 인증을 비활성화하고 Public Key 인증만 가능하도록 설정하는 것이 좋다고 생각합니다.
/etc/ssh/sshd_config:
PasswordAuthentication no
UsePAM no
ChallengeResponseAuthentication no
서버의 /var/log/auth.log를 보면 아래처럼 패스워드 인증을 시도했다가 탈락한 로그들이 많이 보입니다.
$ tail -n 10 /var/log/auth.log | grep 'Bye Bye' | awk '{print $7,$10,$11,$12}'
210.79.191.151 Bye Bye [preauth]
121.204.210.92 Bye Bye [preauth]
121.204.210.92 Bye Bye [preauth]
121.204.210.92 Bye Bye [preauth]
첫 번째 주소를 조회해보면 인도네시아 호스팅 업체가 나옵니다. ASN 136052를 할당받았고, 그 대역은 210.79.190.0/23이니까 통째로 차단하면 됩니다.
ufw deny from 210.79.190.0/23 comment Indonesia
국내에서만 쓸거니까 포트나 기타 정보 없이 대역을 차단합니다. 어쩌다가 국내 IP가 나오면 SSH 포트만 차단하면 됩니다. (ufw deny from <SUBNET> to any port 22 comment "Korean SSH Bot")
이 일을 몇 번 반복하니까 하루 수천 건 쌓이던 SSH probing bot 로그들이 많이 줄었습니다.
끝.