我有一个虚拟机与自定义防火墙脚本和Fail2ban。
我已经确定了一些永久入侵企图的IP范围,所以我直接在我的防火墙脚本中封锁了它们。 这是一个简单的概述:
#!/bin/sh ### BEGIN INIT INFO # Provides: Custom firewall # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short Description: Firewall init script # Description: Custom firewall ### END INIT INFO ## Lock everything # Clear current tables iptables -t filter -F iptables -t filter -X # Deny all connexions (input and output) iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP iptables -t filter -P OUTPUT DROP ## Common configurations # Preserve established connexions iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Allow loopback iptables -t filter -A INPUT -i lo -j ACCEPT iptables -t filter -A OUTPUT -o lo -j ACCEPT # Allow ICMP (ping) iptables -t filter -A INPUT -p icmp -j ACCEPT iptables -t filter -A OUTPUT -p icmp -j ACCEPT ## Custom rules # SSH iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT # HTTP iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT ## JAIL iptables -A INPUT -s 61.147.80.0/24 -j DROP iptables -A INPUT -s 61.167.49.0/24 -j DROP iptables -A INPUT -s 61.174.50.0/24 -j DROP iptables -A INPUT -s 61.174.51.0/24 -j DROP iptables -A INPUT -s 103.41.124.0/24 -j DROP iptables -A INPUT -s 122.225.97.0/24 -j DROP iptables -A INPUT -s 122.225.103.0/24 -j DROP iptables -A INPUT -s 122.225.109.0/24 -j DROP
Fail2ban的作用像一个魅力,但我很惊讶,它仍然检测来自禁止的IP,如122.225.109.107尝试,因为他们应该被我的防火墙脚本禁止。 这怎么可能 ?
数据包按照规则出现的顺序通过iptables规则。
你在规则集的最后禁止提到的ips,在这个禁止之前,你接受所有的端口80和ssh 22.所以你的禁止规则不会被捕获。
你应该让fail2banpipe理禁止,因为他把禁止规则放在iptables规则集的开头,或者把你的禁止规则放在你的脚本的开始,使用iptables -I INPUT 1 rule来在第一个规则之前放置规则在集合中。
而且,由于您有DROP的默认策略,因此在规则集的末尾放置DROP目标的规则是没有用的。