FreeBSD 에서 SSH Brute Force 공격을 대비하여 sshguard 를 이용해 지정된 횟수만큼 접속 시도가 들어오면 방화벽에서 바로 차단하는 방법입니다.

1. IPFW 방화벽 활성화
FreeBSD 에서 많이 쓰이는 방화벽인 ipfw 를 사용할수 있는지 확인을 합니다.

[root@yongbok ~]# ipfw list
ipfw: getsockopt(IP_FW_GET): Protocol not available

위 처럼 프로토콜을 사용할수 없다는 에러문이 나오면 커널에 해당 옵션을 활성화 해주고 컴파일을 통해 ipfw 를 활성화 시켜 줘야 합니다.

options IPFIREWALL                                 # IPFW 필수 옵션
options IPFIREWALL_VERBOSE                 # 로깅 옵션
options IPFIREWALL_VERBOSE_LIMIT=10   # 로그 내용이 많을때 제한 옵션
options IPDIVERT                                    # NAT 을 사용하기 위한 옵션

커널 컴파일을 합니다.

[root@yongbok ~]# cd /usr/src/sys/i386/conf
[root@yongbok ~]# cp GENERIC Yongbok-Kernel
[root@yongbok ~]# ee Yongbok-Kernel
[root@yongbok ~]# cd /usr/src
[root@yongbok ~]# make buildkernel KERNCONF=Yongbok-Kernel
[root@yongbok ~]# make installkernel KERNCONF=Yongbok-Kernel

적용을 위해 재부팅을 해줍니다.

[root@yongbok ~]# reboot

ipfw 방화벽을 활성화 해줍니다.

[root@yongbok ~]# echo ‘firewall_enable=”YES”‘ >> /etc/rc.conf
[root@yongbok ~]# echo ‘firewall_type=”open”‘ >> /etc/rc.conf

2. sshguard 설치

[root@yongbok ~]# cd /usr/ports/security/sshguard-ipfw && make install clean

/etc/syslog.conf 파일 내용 중 기존에 있는 auth 부분을 주석 처리 하고 아래 내용을 추가 합니다.
(-p 옵션은 차단된 유효 기간을 지정해줍니다. 즉, 지정 된 시간이 넘어가 버리면 자동으로 해제가 되는것이죠.. 기본값은 7분 입니다.)

[root@yongbok ~]# ee /etc/syslog.conf

#auth.info;authpriv.info            /var/log/auth.log
auth.info;authpriv.info                |/usr/local/sbin/sshguard

syslogd 를 재시작 합니다.

[root@yongbok ~]# /etc/rc.d/syslogd restart
Stopping syslogd.
Starting syslogd.

테스트를 위해 4번 이상 패스워드를 틀리게 접속 해보면 자동으로 차단 해버리며 아래처럼 /var/log/debug.log 에 기록이 남게 됩니다. (방화벽(ipfw)에서는 55000 ~ 55050 목록 사이에 차단 된 아이피들이 추가 됩니다.)

[root@yongbok ~]# ipfw show | grep 5500*
55007       16        3008 deny ip from 115.137.195.153 to me

[root@yongbok ~]# ipfw list | awk ‘{ if($1 >= 55000 && $1 <= 55050) print $5 }’
115.137.195.153

로그 확인 모습

[root@yongbok ~]# cat /var/log/debug.log

Nov 22 18:31:08 yongbok sshguard[33434]: Matched IP address 115.137.195.153
Nov 22 18:31:18 yongbok last message repeated 3 times
Nov 22 18:31:18 yongbok sshguard[33434]: Running command: ‘/sbin/ipfw add 55007 drop ip from 115.137.195.153 to me’.
Nov 22 18:31:18 yongbok sshguard[33434]: Command exited 0.

[root@yongbok ~]# cat /var/log/messages | grep Blocking

Nov 22 17:13:49 yongbok sshguard[32581]: Blocking 115.137.195.153: 4 failures over 5 seconds.
Nov 22 17:41:07 yongbok sshguard[32920]: Blocking 115.238.59.216: 4 failures over 3 seconds.
Nov 22 18:06:35 yongbok bruteblock[33339]: Blocking failed for 115.137.195.153
Nov 22 18:31:18 yongbok sshguard[33434]: Blocking 115.137.195.153: 4 failures over 10 seconds.
Nov 22 18:45:13 yongbok sshguard[33434]: Blocking 118.35.34.179: 4 failures over 16 seconds.
Nov 22 21:24:18 yongbok sshguard[34464]: Blocking 222.68.199.238: 4 failures over 3 seconds.

참고
http://www.sshguard.net/docs/setup/firewall/ipfw/