내가 받고있는 특정 유형의 악성 트래픽을 모니터링하고 관련 IP 주소를 금지하도록 fail2ban을 구성했습니다.
정규식이 패턴을 적절하게 일치시키고 문제의 IP 주소가 iptables에 추가되고 있습니다.
그러나 Apache 로그를 확인하면 여전히 금지 된 IP 주소에서 히트가 발생합니다. iptables가 전혀 실행되지 않는 것처럼 보입니다.
모든 것이 올바르게 구성되었는지 확인하기 위해 몇 가지 세부 사항을 공유하겠습니다.
먼저 iptables 규칙을 지우고 다시로드하겠습니다.
$ sudo iptables -F
$ cat /etc/iptables.firewall.rules
*filter
# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT
# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allow SSH connections
#
# The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -j ACCEPT
# Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
$ sudo iptables-restore < /etc/iptables.firewall.rules
$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- * * 0.0.0.0/0 127.0.0.0/8 reject-with icmp-port-unreachable
14 1432 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/min burst 5 LOG flags 0 level 7 prefix "iptables denied: "
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
11 1638 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
이제 fail2ban 구성은 다음과 같습니다.
$ cat /etc/fail2ban/filter.d/apache-xmlrpc.conf
[Definition]
failregex = .*:80 <HOST> .*POST .*xmlrpc\.php.*
ignoreregex =
$ cat /etc/fail2ban/jail.local
[apache-xmlrpc]
enabled = true
port = http,https
filter = apache-xmlrpc
logpath = /var/log/apache2/other_vhosts_access.log
maxretry = 6
$ fail2ban-regex /var/log/apache2/other_vhosts_access.log /etc/fail2ban/filter.d/apache-xmlrpc.conf
Running tests
=============
Use regex file : /etc/fail2ban/filter.d/apache-xmlrpc.conf
Use log file : /var/log/apache2/other_vhosts_access.log
Results
=======
Failregex
|- Regular expressions:
| [1] .*:80 <HOST> .*POST .*xmlrpc\.php.*
|
`- Number of matches:
[1] 29 match(es)
Ignoreregex
|- Regular expressions:
|
`- Number of matches:
Summary
=======
Addresses found:
[1]
80.82.70.239 (Sat Jul 13 02:41:52 2013)
80.82.70.239 (Sat Jul 13 02:41:53 2013)
80.82.70.239 (Sat Jul 13 02:41:55 2013)
80.82.70.239 (Sat Jul 13 02:41:56 2013)
80.82.70.239 (Sat Jul 13 02:41:57 2013)
80.82.70.239 (Sat Jul 13 02:41:58 2013)
80.82.70.239 (Sat Jul 13 02:41:59 2013)
80.82.70.239 (Sat Jul 13 02:42:00 2013)
80.82.70.239 (Sat Jul 13 02:42:02 2013)
80.82.70.239 (Sat Jul 13 02:42:03 2013)
80.82.70.239 (Sat Jul 13 02:42:04 2013)
80.82.70.239 (Sat Jul 13 02:42:05 2013)
80.82.70.239 (Sat Jul 13 02:42:06 2013)
80.82.70.239 (Sat Jul 13 02:42:07 2013)
80.82.70.239 (Sat Jul 13 02:42:09 2013)
80.82.70.239 (Sat Jul 13 02:42:10 2013)
80.82.70.239 (Sat Jul 13 02:42:11 2013)
80.82.70.239 (Sat Jul 13 02:42:12 2013)
80.82.70.239 (Sat Jul 13 02:42:13 2013)
80.82.70.239 (Sat Jul 13 02:42:15 2013)
80.82.70.239 (Sat Jul 13 02:42:16 2013)
80.82.70.239 (Sat Jul 13 02:42:17 2013)
80.82.70.239 (Sat Jul 13 02:42:18 2013)
80.82.70.239 (Sat Jul 13 02:42:19 2013)
80.82.70.239 (Sat Jul 13 02:42:20 2013)
80.82.70.239 (Sat Jul 13 02:42:22 2013)
80.82.70.239 (Sat Jul 13 02:42:23 2013)
80.82.70.239 (Sat Jul 13 02:42:24 2013)
80.82.70.239 (Sat Jul 13 02:42:25 2013)
Date template hits:
0 hit(s): MONTH Day Hour:Minute:Second
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
70 hit(s): Day/MONTH/Year:Hour:Minute:Second
0 hit(s): Month/Day/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Year.Month.Day Hour:Minute:Second
0 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond]
0 hit(s): Day-Month-Year Hour:Minute:Second
0 hit(s): TAI64N
0 hit(s): Epoch
0 hit(s): ISO 8601
0 hit(s): Hour:Minute:Second
0 hit(s): <Month/Day/Year@Hour:Minute:Second>
Success, the total number of match is 29
However, look at the above section 'Running tests' which could contain important
information.
보시다시피, 필터에 failregex가 설정되어 있고 필터가 활성화되어 있습니다. fail2ban-regex를 사용하면 필터가 모니터링중인 로그 파일에서 일치하는 항목을 찾습니다. (현재 문제가있는 IP 주소에 적극적으로 타격을 받고있어 테스트가 매우 쉬워졌습니다.)
이제 fail2ban을 다시 시작하고 규칙이 적용되는지 확인하십시오.
$ sudo service fail2ban restart
* Restarting authentication failure monitor fail2ban [ OK ]
$ tail /var/log/fail2ban.log -n 50
2013-07-13 02:42:58,014 fail2ban.server : INFO Stopping all jails
2013-07-13 02:42:58,745 fail2ban.jail : INFO Jail 'apache-xmlrpc' stopped
2013-07-13 02:42:59,439 fail2ban.jail : INFO Jail 'ssh' stopped
2013-07-13 02:42:59,440 fail2ban.server : INFO Exiting Fail2ban
2013-07-13 02:43:08,055 fail2ban.server : INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.6
2013-07-13 02:43:08,057 fail2ban.jail : INFO Creating new jail 'ssh'
2013-07-13 02:43:08,111 fail2ban.jail : INFO Jail 'ssh' uses Gamin
2013-07-13 02:43:08,397 fail2ban.filter : INFO Added logfile = /var/log/auth.log
2013-07-13 02:43:08,404 fail2ban.filter : INFO Set maxRetry = 6
2013-07-13 02:43:08,414 fail2ban.filter : INFO Set findtime = 600
2013-07-13 02:43:08,435 fail2ban.actions: INFO Set banTime = 600
2013-07-13 02:43:09,277 fail2ban.jail : INFO Creating new jail 'apache-xmlrpc'
2013-07-13 02:43:09,277 fail2ban.jail : INFO Jail 'apache-xmlrpc' uses Gamin
2013-07-13 02:43:09,283 fail2ban.filter : INFO Added logfile = /var/log/apache2/other_vhosts_access.log
2013-07-13 02:43:09,286 fail2ban.filter : INFO Set maxRetry = 6
2013-07-13 02:43:09,289 fail2ban.filter : INFO Set findtime = 600
2013-07-13 02:43:09,292 fail2ban.actions: INFO Set banTime = 600
2013-07-13 02:43:09,458 fail2ban.jail : INFO Jail 'ssh' started
2013-07-13 02:43:09,792 fail2ban.jail : INFO Jail 'apache-xmlrpc' started
2013-07-13 02:43:11,361 fail2ban.actions: WARNING [apache-xmlrpc] Ban 80.82.70.239
$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
244 39277 fail2ban-apache-xmlrpc tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443
101 7716 fail2ban-ssh tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- * * 0.0.0.0/0 127.0.0.0/8 reject-with icmp-port-unreachable
3404 582K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
349 20900 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
12 720 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
2 80 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/min burst 5 LOG flags 0 level 7 prefix "iptables denied: "
2 80 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
3331 4393K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
Chain fail2ban-apache-xmlrpc (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 80.82.70.239 0.0.0.0/0
244 39277 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain fail2ban-ssh (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 223.4.147.8 0.0.0.0/0
101 7716 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
fail2ban 로그에 표시된대로 규칙 세트가 올바르게 구성된 것으로 나타납니다. 문제가있는 IP 주소가 바로 잡히고 금지되고 있음을 이미 알 수 있습니다. iptables의 출력은 실제로 삭제되고 있음을 보여줍니다.
그러나 이미 fail2ban-apache-xmlrpc 체인에서 일치하는 해당 IP 주소에 대해 손실 된 패킷이 없음을 관찰하고 있습니다. 물론 아파치 로그를 확인합니다.
$ tail /var/log/apache2/other_vhosts_access.log
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:43:53 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:43:54 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:43:56 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:43:57 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:43:58 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:43:59 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:44:00 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
www.--SNIP--.com:80 80.82.70.239 - - [13/Jul/2013:02:44:02 +0000] "POST /xmlrpc.php HTTP/1.1" 403 474 "-" "-"
아니요, 차단되지 않습니다! 또한 fail2ban 로그에서이를 확인할 수 있습니다.
$ tail /var/log/fail2ban.log
2013-07-13 02:52:30,757 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:52:37,767 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:52:44,783 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:52:51,814 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:52:58,830 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:53:05,842 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:53:11,858 fail2ban.actions: WARNING [apache-xmlrpc] Unban 80.82.70.239
2013-07-13 02:53:12,910 fail2ban.actions: WARNING [apache-xmlrpc] Ban 80.82.70.239
2013-07-13 02:53:20,118 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
2013-07-13 02:53:27,129 fail2ban.actions: WARNING [apache-xmlrpc] 80.82.70.239 already banned
아파치 로그에 계속 다시 나타나므로 fail2ban이 계속 금지하려고합니다!
iptables가 왜이 IP 주소에서 트래픽을 삭제하지 않는지 저의 삶을 솔직히 알 수 없습니다. 규칙 순서는 나에게 맞는 것 같습니다. DROP이 다른 것보다 우선합니다.
나는 사람들이 비슷한 문제를 겪고있는 많은 결과를 Google에 보냈지 만 항상 비표준 포트에있는 SSH 트래픽을 금지하는 문제로 되돌아 오는 것 같습니다. 제 경우에는 표준 http 포트 80에서 IP 주소를 차단하려고합니다.
나는 정말 단순한 것을 간과하고 있기를 바랍니다. Linode에서 Ubuntu 12.04를 실행하는 VPS입니다. 누구든지 아이디어가 있으면 알려주십시오. 많은 감사합니다 …
편집 : 여기에 출력이 있습니다iptables -S
$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-apache-xmlrpc
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-xmlrpc
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j ACCEPT
-A fail2ban-apache-xmlrpc -s 80.82.70.239/32 -j DROP
-A fail2ban-apache-xmlrpc -j RETURN
-A fail2ban-ssh -s 223.4.147.8/32 -j DROP
-A fail2ban-ssh -j RETURN
답변
iptables -s
출력 외모는 해결 방법 모르겠어요 80.82.70.239/32
에 점점 any:80
방화벽을 통해 서버에. 내 첫 번째 추측은 서버 앞에 프록시 /로드 밸런서가 있고 Apache가 HTTP_X_FORWARDED_FOR
헤더 또는 호출 된 것을 로깅 한다는 것입니다. 이 경우 방화벽 논리를 프록시 /로드 밸런서로 또는 응용 프로그램 수준으로 낮추어야합니다 (아파치 FORWARDED_FOR
헤더를 계산하고 액세스 거부).
어느 쪽이든 :
다음으로 취할 조치 iptables -s
는 위에 게시 한 결과를 캡처하는 것 입니다. fail2ban을 비활성화하고 fail2ban 체인 및 IP 주소를 iptables에 차단하여 구성을로드하십시오.
그러나 첫 번째 -A
규칙으로 다음을 수행하십시오 .
-A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP: "
80과 443을 더 잘 잡는 것이 좋을 것입니다. FIREWALL의 로그에는 의심스러운 소스의 패킷에주의를 기울이면 누락 된 내용이 표시 될 수 있습니다.
답변
iptables의 결과는 실제로 fail2ban 느낌이 필터링되고 삭제되어야하는 IP 주소에 대한 규칙이 있지만 fail2ban xmlrpc 체인을 통과 한 패킷이없고 실제로 해당 규칙에 의해 삭제 된 패킷이 없음을 보여줍니다. 대신, 해당 체인을 통과 한 224 개의 패킷이 모두 수락되었습니다.
즉, 규칙은 실제로 정확합니다. 그러나 fail2ban 필터 체인을 통하는 것보다 TCP 포트 80 규칙을 수락 한 트래픽이 더 많은 것으로 보입니다. 가장 가능성이 높은 이유는 fail2ban 체인이 아직 입력에 삽입되지 않은 상태에서 차단하려는 트래픽이 들어 왔기 때문입니다 (기본 규칙에는 해당 규칙이없는 것 같습니다).하지만 iptables를 다시로드하면 fail2ban 체인은 즉시 적용되지 않습니다).
실행 해보십시오 iptables -z
패킷 수를 제로의 출력을 관찰하기 위해 iptables -nvL
다시. 출력이 동일하지 않아야합니다. 또한 iptables ( /etc/iptables.firewall.rules
) 의 초기 규칙에서 fail2ban 체인에 대한 규칙을 저장하는 것을 고려하십시오 . 다음과 같이 위임 규칙을 저장하십시오.
fail2ban-apache-xmlrpc tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443
또한 체인의 존재 (예 fail2ban-apache-xmlrpc
:)는 저장하지만 실제로 금지 된 IP는 저장하지 마십시오.
답변
내 웹 사이트에서 당신과 정확히 같은 문제가있었습니다. 매우 유사한 설정, LAMP 스택, 몇 가지 기능적인 fail2ban 교도소이지만 여전히 금지 된 IP 주소가 액세스 로그 파일에 표시되는 것을 보았습니다. Apache 앞에 프록시 /로드 밸런서가 없습니다.
내 문제에 대한 해결책은 놀랍게도 간단했습니다 : 금지 문구를 iptables 구성 파일의 바로 위로 옮기십시오!