1. 소개

이전에 작성한 ModSecurity와 iptables를 이용한 ip 차단는 다른 modsecurity 와 fain2ban을 이용한 방법입니다.

(물론 fail2ban 역시 iptable을 이용하지만 modsec2ipt를 이용한 방법보다는 적용이 쉽다고 볼 수 있습니다; )

modsecurity가 정상 작동하고 있고 fail2ban역시 잘 작동하는 전제가 만족해야겠죠?

원문 링크: http://www.fail2ban.org/wiki/index.php/HOWTO_fail2ban_with_ModSecurity2.5


이글의 내용은 좀더 많은 테스트가 필요합니다. 예외처리가 가능하신분만 테스트 해보시기 바랍니다.


2. 설정

 /etc/fail2ban/jail.conf  파일을 열어서 아래부분을 추가합니다.

[modsec]
enabled = true
filter = modsec
action = iptables-multiport[name=ModSec, port="http,https"]
logpath = /var/log/apache/modsec_audit.log
bantime = 172800
maxretry = 1

logpath의 경로는 사용중인 modsecurity의 auditlog경로로 수정해 사용해야 합니다.



/etc/filter.d 디렉토리에 modsec.conf 파일을 만들고 내용을 아래처럼 추가합니다.

# Fail2Ban configuration file
#
# Author: Florian Roth
[Definition]
failregex = [.*?]s[w-]*s<HOST>s
ignoreregex =



modsecurity log중 "01-06-2009 20:37:29 User.Notice 87.230.26.178 Jan 6 20:37:39 lvps87-230-26-178 modsec: [06/Jan/2009:20:37:39 +0100] ij99L1fmGrIAAC5Q8n0AAAAJ 78.42.79.31 12531 87.230.26.17 8" 와 같은 부분이 정규표현식에서

걸러지게 됩니다.


modsecurity 설정중 SecAuditLogRelevantStatus부분을 코멘트 처리해 404 error(file not found)를 남길 수 있는

무고한(?) 사용자들에 대한 예외처리를 해야합니다. 그렇지 않다면 단순 404 error만 내도 fail2ban에 의해 ip가 차단 되겠죠.


SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"

3. 중요 사항

관련링크 2에 있는 포스트중 Brian Rectanus의 글 내용입니다.


modsecurity 설정중  SecAuditLogType를 serial이 아닌 concurrent로 해야 매우 클 수도 있는 auditlog파일을 한줄씩

처리가 가능하다고 합니다. 또한  error log 아래의 로그와 같은 부분중 해당 ip를 걸러내는 방법도 있다고 합니다.

[Mon Aug 10 11:16:40 2009] [error] [client 1.2.3.4] ModSecurity: Access denied with code 403 (phase 2). 
Pattern match "bar" at ARGS:foo. [file "/path/to/httpd.conf"] [line "948"] [id "123456"] [hostname "red-dwarf"]
[uri "/cgi-bin/dump"] [unique_id "SoBkCH8AAQEAAFCuJY4AAAFA"]
"[client 1.2.3.4]" 부분이 해당 ip니 적절히(?) 이용하면 되겠습니다.



관련 링크:

1. http://www.fail2ban.org/wiki/index.php/HOWTO_fail2ban_with_ModSecurity2.5

2. http://sourceforge.net/mailarchive/forum.php?thread_name=4A819479.9010501%40breach.com&forum_name=mod-security-users

+ Recent posts