IPTables Recent Module ssh 무작위 공격방어
서버의 /var/log/messages 파일을 열어보면 하루에도 끊임없이 접속을 시도한 것을 확인 할 수 있습니다.
방화벽을 설치하지 않은 때, 제가 기겁한 적이 있었는데
오전 7시부터 시작해서 23시까지 초당 2-4번정도 root 계정의 접속을 시도했더군요.
만일에 암호가 단순한 형태였다면 뚫리고도 남음이 있었을 것입니다.
다행이도 제 경우 root 암호는 특수문자 숫자 조합형태로 최소 16자리 이상을 만들어 사용합니다.
이일을 계기로 방화벽에 신경을 많이 쓰게 되었던 것 같습니다.
지금 설명하고 하는 룰은 iptables 이 설치된 서버라면 특별한 설정이 필요없이 설정이 가능할 것입니다.
지금 쓰고 있는 SULinux/Centos 경우는 아무 무리없이 사용이 가능합니다.
http://la-samhna.de/library/brutessh.html 원본을 확인 할 수 있으니 한번 살펴보심이 도움이 될 것입니다.
문서의 중간에 다음과 같은 iptables 룰이 있습니다.
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –set \\
–name SSH -j ACCEPT
iptables -A INPUT -p tcp –dport 22 -m recent –update –seconds 60 –hitcount 4 –rttl \\
–name SSH -j LOG –log-prefix “SSH_brute_force ”
iptables -A INPUT -p tcp –dport 22 -m recent –update –seconds 60 \\
–hitcount 4 –rttl –name SSH -j DROP
위의 룰은 커널 2.6 이상에서 보름이상 지나게 되면 풀리는 문제점이 있다는 이야기가 있으므로
다음의 룰을 적용합니다.
iptables -N SSH_WHITELIST
iptables -A SSH_WHITELIST -s TRUSTED_HOST_IP -m \\
recent –remove –name SSH -j ACCEPT
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –set \\
–name SSH
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -j SSH_WHITELIST
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –update \\
–seconds 60 –hitcount 5 –rttl –name SSH -j ULOG –ulog-prefix SSH_brute_force
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –update \\
–seconds 60 –hitcount 5 –rttl –name SSH -j DROP
위의 룰을 기존에 쓰고 계신 iptables 룰에 추가만 하시면 바로 사용이 가능합니다.
# iptables -L 명령을 통해 제대로 작동중인지 확인을 합니다.
–seconds 60 –hitcount 5의 뜻은 60초동안 5번을 접속하게 되면 다음 60초동안 접속을 차단하고,
다시 60초 동안 5번을 접속을 시도하게되면 접속을 완전히 차단한다는 뜻이므로 적절히 조절해 주시면 됩니다.
룰을 적용하고 하루정도 지난후 messages 파일을 살펴보면 접속을 시도한 ip가 차단된 것을 확인 할 수 있습니다.