본문 바로가기
WEB

Fail2ban

by 노랑파랑 2022. 6. 27.
반응형

Fail2ban 이란?

Fail2Ban은 로그 파일을(예: /var/log/apache/error_log) 검사해서 다건의 로그인 실패, 취약점을 찾는 요청 등 악의적 행동을 보여 주는 IP를 차단합니다. 일반적으로 Fail2Ban은 지정한 시간동안 IP 주소를 차단하도록 방화벽 규칙을 업데이트하는 데 사용되지만 다른 많은 동작을 설정할 수도 있지습니다 (예: 이메일 전송). Fail2Ban은 다양한 서비스를(아파치, courier, ssh 등)  위한 필터를 포함하고 있습니다.

Fail2Ban은 잘못된 인증 시도의 비율을 줄일 수 있지만 취약한 인증 방법을 사용하는 데 따르는 위험을 완전히 제거하지는 못합니다. 서비스를 보호하려면 반드시 2단계 인증이나 공개/개인키 인증 매커니즘 둘 중 하나를 사용하도록 설정하십시오.

 

Fail2ban 조건

python 2.3 이상이 설치되어 있어야한다. CentOS 7에서는 기본적으로 python 2.7이 설치되어있기때문에 바로 설치 가능

 

Fail2ban 설치

yum install fail2ban fail2ban-systemd
  • 최초 설치 시 서버는 자동으로 실행된다.

 

Fail2ban 설정

  • 기본 위치 : /etc/fail2ban
  • 기본적인 설정은 jail.conf 에 존재한다.
    • 대부분의 경우 이 파일을 수정할 필요가 없다. jail.local 파일이나, jail.d/ 폴더 밑에 각각의 .conf로 사용자 설정을 추가한다.
  • filter명은 24글자를 넘어가면 안된다.
  • 악의적 접근으로 파악되는 경우 메일 보내는 것을 예로 들음.

 

jail.conf 설정

  1. jail.conf 파일을 복사하여 jail.local 파일을 생성한다.
  2. 파일의 마지막 부분에 모니터링할 필터를 설정과 함께 추가한다.
...

[sshd]
# fail2ban을 적용하려면 true로 설정
enabled = true

...

[new-filter-name]
#필터 활성화
enabled = true
port    = http,https

# 차단하지 않을 IP
# 여러 IP를 적용하려면 ' ' 또는 ','를 구분자로 사용하여 적용할 수 있다.
ignoreip = 127.0.0.1/8

# 모니터링 할 log 파일, 지정가능
logpath = %(apache_access_log)s

# findtime 동안 maxretry 만큼 필터에 걸리면 IP차단
# m이 안되면 초로 숫자만으로 설정 ( findtime = 600 )  
findtime = 10m
maxretry = 1000

# IP 차단할 시간, 기본값 10m
bandtime = 10m

# 메일 전송 프로그램
mta = sendmail

# 수신자 메일
# 여러 수신자를 적용하려면 ','를 구분자로 사용하여 적용할 수 있다.
destemail = test@naver.com

# 발신자 메일
sendmail = root@localhost

# 차단했을 때 실행할 액션
# action = %(action_mw)s
action  = %(mta)s-whois[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]

 

※action 참고

  • 기본 설정은 아무 일도 안 하는 설정인 "action = %(action_)s".
  • action_mw  action_mwl 로도 메일을 전송가능.
    • action_mw : 메일을 전송하고 whois 로 IP 정보를 조회한 결과를 첨부
    • action_mwl : 메일을 전송하고 whois 로 IP 정보를 조회한 결과와 관련된 로그를 첨부
# The simplest action to take: ban only
action_ = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]

# ban & send an e-mail with whois report to the destemail.
action_mw = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
            %(mta)s-whois[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]

# ban & send an e-mail with whois report and relevant log lines
# to the destemail.
action_mwl = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
             %(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]

# See the IMPORTANT note in action.d/xarf-login-attack for when to use this action
#
# ban & send a xarf e-mail to abuse contact of IP address and include relevant log lines
# to the destemail.
action_xarf = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
             xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath=%(logpath)s, port="%(port)s"]

# ban IP on CloudFlare & send an e-mail with whois report and relevant log lines
# to the destemail.
action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
                %(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]

 

filter 설정

  1. filter.d directory에 new-filter-name.conf 파일 생성
  2. test.com이 들어간 요청의 경우 동작 (아파치 로그 규칙에 맞춰서 정규식을 사용한다.)
[Definition]
failregex = ^<HOST> -.-.\[.*\] \"(GET|POST) .+test.com.* HTTP/1.1\"
ignoreregex =

       3. 변수를 사용하고 싶다면

[Definition]
requests = test.com|test.co.kr
failregex = ^<HOST> -.-.\[.*\] \"(GET|POST) .+%(request)s).* HTTP/1.1\"
ignoreregex =

 

※필터 테스트

sudo fail2ban-regex [옵션]  <로그>  <정규식>
sudo fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/new-filter-name.conf

 

Fail2ban 설정 적용

  • Fail2ban 서버를 리로드 또는 재시작 해야 추가한 필터가 적용된다.
sudo systemctl restart fail2ban
#또는
sudo fail2ban-client reload

 

반응형

'WEB' 카테고리의 다른 글

키 이벤트 (key Event)  (0) 2023.03.03