리눅스서버

[보안] 패스워드 무작위 대입 공격 방어를 위한 "fail2ban 설치 및 설정"

서버운영을 하다보면 SSH,FTP등을 통해 외부에서 알 수 없는 IP가 계정접근 시도하는 경우가 있습니다.

그치만 패스워드를 모르니, 접근실패가 될 것입니다..

그런데 이들은 해킹프로그램을 이용하여 접속이 될때까지 패스워드를 계속 바꾸며, 계속 접근을 시도할 겁니다..

결국 패스워드가 뚫리며 root 계정에 접속될 것입니다.

 

이 문제를 해결하기위해서는 간단하게 관리자 IP만 서버접근을 허용하면 됩니다.

하지만, 관리자IP가 유동이거나 다른 외부에서 접근할 경우도 있을 수 있습니다.

그럼 차선책으로 몇회 이상 접근에 실패할 경우 해당 접근IP를 완전히또는 일정시간 동안은 차단 해야 이런 공격에 대비할 수 있겠지요..

 

여기서는 fail2ban 이란 프로그램을 이용해 무작위 공격방어를 해볼까합니다.

fail2ban프로그램은 접근로그파일에서 실패횟수를 계산하고 iptables을 이용해 서버접근을 차단하는 툴입니다.

아참, 아래의 설치과정과 설정은 centos6에서 진행 했으니, 다른 리눅스에서는 다를 수 있습니다.

 

fail2ban 설치


1. 먼저 http://www.fail2ban.org 에서 fail2ban 다운로드 합니다.


1.jpg



2. 파일질라를 이용해 다운한 파일을 서버에 업로드합니다. wget안됨(서버에 새로폴더를 만드시고 그 곳에 임시로 업로드하시면 돼요..)
3. ssh에서 업로드한 폴더로 이동해 압축푼후 폴더에서 설치명령(#python setup.py install)을 실행합니다.
# tar zxvf fail2ban-0.8.11.tar.gz
# cd fail2ban-0.8.11
# python setup.py install


fail2ban 설정

*서비스등록 (소스폴더(fail2ban-0.8.11)에서 서비스파일을 복사합니다.)
# 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, dest=you@example.com, sender=fail2ban@example.com, 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

Atachment
첨부 1
  • ?
    디스타임 2014.03.15 21:10:05
    신박하네요ㅋㅋ
  • ?
    다비 2014.04.17 22:01:41
    좋네요.. csf도 있던데 어느게 더 좋은건가요?
  • ?
    Soraesan 2015.06.20 09:00:10
    안녕하세요. 리눅스 우분투를 사용중인데요.
    따라서 해보는 중에 부팅시 자동실행 하게 해주는 chkconfig는 우분투에서 더 이상 사용이 안되다고 한는데 어떻게 해야 하는지 궁금합니다.?

    그리고 우분투에는 /var/log 안에 ssh관련 로그 파일이 없는데 다른 글을 보니 auth.log파일이 ssh 관련 로그파일이라는 글도 있는데 글들이 쉽지가 않아서 잘 모르겠네요.

    요 두가지 관련 좀 더 자세한 설명좀 부탁드립니다. 우분투 최신 버전입니다. 감사합니다.
  • profile
    CONORY 2015.06.20 10:20:17
    최신버전에 맞춰 새로 작성했습니다.
    https://conory.com/blog/42606
  • ?
    Soraesan 2015.06.20 13:10:08
    오~ 감사합니다.
?

서버에 요청 중입니다. 잠시만 기다려 주십시오...