서버운영을 하다보면 SSH,FTP등을 통해 외부에서 알 수 없는 IP가 계정접근 시도하는 경우가 있습니다.
그치만 패스워드를 모르니, 접근실패가 될 것입니다..
그런데 이들은 해킹프로그램을 이용하여 접속이 될때까지 패스워드를 계속 바꾸며, 계속 접근을 시도할 겁니다..
결국 패스워드가 뚫리며 root 계정에 접속될 것입니다.
이 문제를 해결하기위해서는 간단하게 관리자 IP만 서버접근을 허용하면 됩니다.
하지만, 관리자IP가 유동이거나 다른 외부에서 접근할 경우도 있을 수 있습니다.
그럼 차선책으로 몇회 이상 접근에 실패할 경우 해당 접근IP를 완전히또는 일정시간 동안은 차단 해야 이런 공격에 대비할 수 있겠지요..
여기서는 fail2ban 이란 프로그램을 이용해 무작위 공격방어를 해볼까합니다.
fail2ban프로그램은 접근로그파일에서 실패횟수를 계산하고 iptables을 이용해 서버접근을 차단하는 툴입니다.
아참, 아래의 설치과정과 설정은 centos6에서 진행 했으니, 다른 리눅스에서는 다를 수 있습니다.
fail2ban 설치
1. 먼저 http://www.fail2ban.org 에서 fail2ban 다운로드 합니다.
# tar zxvf fail2ban-0.8.11.tar.gz# cd fail2ban-0.8.11# python setup.py install
# cp files/redhat-initd /etc/init.d/fail2ban
# chkconfig --add fail2ban# chkconfig fail2ban on
*설정파일에서 설정 (여기에선 vi 편집기를 이용해 변경하겠습니다.)
# vi /etc/fail2ban/jail.conf
-> 29줄쯤에서부터 ~ (이부분은 원하시는 값으로 설정하세요.)
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1/8 #입력하신 IP로 접근시 아무리 실패해도 차단되지않습니다. (관리자IP를 적어두시면 되겠네요)
# "bantime" is the number of seconds that a host is banned.
bantime = 600 #일정횟수 초과시도시 접근거부 시간입니다. (단위 : 초)
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600 #입력하신 시간간격 사이에 지정횟수를 초과시 차단합니다. (단위 : 초)
# "maxretry" is the number of failures before a host get banned.
maxretry = 3 #입력하신 횟수초과시 접근거부합니다.
-> 72줄쯤 부터 ~
[ssh-iptables]
enabled = true #이부분을 true로 해줘야 ssh접근시 fail2ban가 동작될 수 있습니다.
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, [email protected], [email protected], sendername="Fail2Ban"]
logpath = /var/log/secure #ssh 접근로그파일을 입력해주세요. 로그파일은 리눅스마다 다릅니다. centos6.4경우 "/var/log/secure" 입니다. 로그파일이 존재하지않으면 서비스실행 실패됩니다.
maxretry = 5 #입력하신 횟수초과시 접근거부합니다. (윗설정과 상관없이 ssh접근에만 적용됩니다. 삭제하시면 윗설정이 적용됩니다.)
- 추후 설정파일을 변경하면 반드시 서비스재시작(# service fail2ban restart)을 해줘야 적용됩니다.
*서비스 시작
# service fail2ban start
- 서비스 실행시 [OK]가 나와야 정상동작입니다.
※실패차단시 iptables에서 IP를 차단하고 있어서 iptables에서 차단된 IP확인및 차단해제를 할 수 있습니다.
* fail2ban에서 차단된 ip 해제
- iptables -D fail2ban-ProFTPD -s xxx.xxx.xxx.xxx -j REJECT
- iptables -D fail2ban-SSH -s xxx.xxx.xxx.xxx -j REJECT