반응형
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 설정
- jail.conf 파일을 복사하여 jail.local 파일을 생성한다.
- 파일의 마지막 부분에 모니터링할 필터를 설정과 함께 추가한다.
...
[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 설정
- filter.d directory에 new-filter-name.conf 파일 생성
- 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 |
---|