검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : How to protect Apache with Fail2ban

  Fail2ban은 파이썬으로 만든 침입 방지 프레임워크입니다. 패킷 컨트롤 시스템(예: TCP Wrapper)이나 자체적으로 방화벽(예: iptables)이 설치된 POSIX 시스템이라면 사용할 수 있습니다. Fail2ban의 주요 기능은 로그 파일을 감시하여 너무 많이 로그인을 시도하거나 비정상적인 행동을 하는 호스트의 IP를 차단하는 겁니다. 이 글에서는 아파치에 fail2ban을 적용하여 보안성을 높이는 방법을 소개합니다. Fail2ban의 설치와 기본 사용법은 이 글을 참조하시기 바랍니다.

  이 글에서는 악성 IP를 찾아 감옥(Jail)에 넣기 위해 jail 파일(fail2ban 설정을 담고 있는 파일)에 규칙을 생성하여 대상 IP의 요청을 일정 시간 동안 무시하도록 만들 겁니다.

  내용은 데비안 계열 배포판을 기준으로 /etc/fail2ban/jail.local 파일에서 진행합니다.

1. 표준 설정 활성화
  기본적으로 fail2ban에는 apache에 대한 공격을 어느 정도 막아주는 규칙이 포함되어 있습니다. 이를 사용하기 위해 /etc/fail2ban/jail.local 파일에서 아래의 내용을 작성하여 3개의 "감옥"을 활성화합니다.
[apache]
enabled = true

[apache-noscript]
enabled = true

[apache-overflows]
enabled = true
(1) Jail Apache
  이 감옥은 /var/log/apache*/*error.log 파일에서 정규 표현식으로 패스워드 인증 실패 메시지를 찾습니다. 이 규칙의 목표는 아래의 규칙 중 하나에 해당하는 IP를 모두 차단하는 것입니다.
failregex = [[]client []] user .* authentication failure
            [[]client []] user .* not found
            [[]client []] user .* password mismatch
(2) Jail Apache-noscript
  이 감옥은 /var/log/apache*/*error.log 파일에서 정규 표현식으로 스크립트를 찾을 수 없다는 에러 메시지를 찾습니다. 이 규칙의 목표는 존재하지 않는 스크립트(php, perl, asp)를 찾으려는 IP를 모두 차단하는 것이며 아래는 이 감옥에서 사용하는 필터입니다.
failregex = [[]client []] (File does not exist|script not found or unable to stat): /S*(.php|.asp|.exe|.pl)
            [[]client []] script '/S*(.php|.asp|.exe|.pl)S*' not found or unable to stat *$
(3) Jail Apache-overflows
  이 감옥은 Apache 오버플로우를 시도하는 클라이언트를 정규 표현식으로 잡아냅니다.
failregex = [[]client []] (Invalid method in request|request failed: URI too long|erroneous characters after protocol string)

2. 추가 설정
  추가적인 감옥과 필터 예제 2가지를 소개합니다.

(1) Jail Apache-phpmyadmin
  이 설정의 목표는 phpmyadmin 설치본을 찾으려고 하는 클라이언트를 막는 것입니다. 주의할 점은 phpmyadmin이 설치된 디렉토리 이름이 badadmin에 나열된 것에 포함되어 있지 않아야 한다는 겁니다. 아래 내용을 /etc/fail2ban/jail.local 파일에 추가합니다.
[apache-phpmyadmin]
enabled  = true
port     = http,https
filter   = apache-phpmyadmin
logpath  = /var/log/apache*/*error.log
maxretry = 3
  그리고 /etc/fail2ban/filter.d/apache-phpmyadmin.conf 파일을 만들어 아래 내용을 넣습니다.
# Fail2Ban configuration file
#
# Bans bots scanning for non-existing phpMyAdmin installations on your webhost.
#
# Author: Gina Haeussge
#
 
[Definition]
 
docroot = /var/www
badadmin = PMA|phpmyadmin|myadmin|mysql|mysqladmin|sqladmin|mypma|admin|xampp|mysqldb|mydb|db|pmadb|phpmyadmin1|phpmyadmin2
 
# Option:  failregex
# Notes.:  Regexp to match often probed and not available phpmyadmin paths.
# Values:  TEXT
#
failregex = [[]client []] File does not exist: %(docroot)s/(?:%(badadmin)s)
 
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =
(2) Jail Apache-postflood
  이 감옥 규칙의 목표는 apache POST flood 공격을 막는 겁니다. /etc/fail2ban/jail.local에 아래 내용을 추가하면 10초 안에 POST 요청을 10번 이상 하는 클라이언트를 막습니다.
[apache-postflood]
enabled = true
filter = apache-postflood
logpath = /var/log/httpd/access_log
findtime = 10
maxretry = 10
  그리고 /etc/fail2ban/filter.d/apache-postflood.conf 파일을 만들어 아래 내용을 넣습니다.
# Fail2Ban configuration file
#
#
# $Revision: 1 $
#

[Definition]
# Option: failregex
# Notes.: Regexp to catch known spambots and software alike. Please verify
# that it is your intent to block IPs which were driven by
# abovementioned bots.
# Values: TEXT
#
failregex = ^ -.*”POST.*

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
2013/07/13 21:13 2013/07/13 21:13