我正在使用fail2ban来阻止我服务器上的失败登录尝试。使用具有以下配置的IP表执行该块:
actionstart = iptables -N fail2ban
iptables -A fail2ban -j RETURN
iptables -I <chain> -p tcp -m multiport --dports <port> -j fail2ban
actionstop = iptables -D <chain> -p tcp -m multiport --dports <port> -j fail2ban
iptables -F fail2ban
iptables -X fail2ban
actionban = iptables -I fail2ban 1 -s <ip> -j DROP
actionunban = iptables -D fail2ban -s <ip> -j DROP
我关心的是规则处理性能。以上规则处于有状态模式,我一直想知道无状态模式是否会使处理更快。为了清楚起见,我阻止了TCP端口上的入侵者IP地址(例如,22或25)。
我在某处读到了特定于TCP连接的地方,添加ESTABLISHED,RELATED状态会更好。但由于每个IP都指的是不同的连接,因此应用这些状态是否有意义?
更新:
以下是iptables -L
示例:
Chain INPUT (policy ACCEPT 399 packets, 36043 bytes)
pkts bytes target prot opt in out source destination
39 4230 fail2ban tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22,25,80,99,100,101
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 282 packets, 39686 bytes)
pkts bytes target prot opt in out source destination
Chain fail2ban (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 192.168.0.1 0.0.0.0/0
0 0 DROP all -- * * 192.168.0.2 0.0.0.0/0
0 0 DROP all -- * * 192.168.0.3 0.0.0.0/0
0 0 DROP all -- * * 192.168.0.4 0.0.0.0/0
39 4230 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
答案 0 :(得分:-1)
尽管许多性能辩护者声称,IPtables可能会有很大的开销,但在获得大量流量之前它不会引人注意。现在,您如何执行这些表以及调用哪些扩展将决定每个数据包的CPU开销。
至于无状态与状态,是的,性能差异可能是巨大的,但同样它的吞吐量非常高。此外,您可能已经阅读过,管理无状态防火墙要复杂得多。只有在可以衡量IPtable影响的情况下才应该这样做。
但是应该始终遵循良好的做法,并且IMO包含最少的开销,而不会增加大量的复杂性。
现在,就你的情况而言,fail2ban只考虑你的iptables的一部分,但我建议预防的唯一一件事就是这部分。
-p tcp -m multiport --dports
使用多端口扩展确实会产生更多开销,除非这样做会大大减少规则。因为你只做2,所以我会单独列出它们,以避免多端口扩展......或者更好但只有一个按范围,如果你不关心阻塞23和24。
-p tcp -m tcp --dport 22:25
至于已建立的跟踪,是的,您可以将它与fail2ban一起使用,尽管它确实有一些注意事项。为了获得最大的影响,您需要将fail2ban链置于ESTABLISHED,RELATED之下。但是,这将允许已建立的连接,考虑到您需要一个已经过身份验证的用户,这似乎是合理的。
这是我用于服务器的表格的一个小例子,有一些示例规则,我为你评论过,
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
## Stateless on Loopback
## Remove everything before #filter if iptables chokes on #raw
-A OUTPUT -o lo -j NOTRACK
COMMIT
*filter
## Default Chains
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
## Proto Chains
:FWINPUT-TCP - [0:0]
:FWINPUT-UDP - [0:0]
:FWINPUT-ICMP - [0:0]
## FAIL2BAN Chain
:fail2ban - [0:0]
## Accept Established
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
## Accept Loopback
-A INPUT -i lo -j ACCEPT
## Seperate Proto
-A INPUT -p tcp -g FWINPUT-TCP
-A INPUT -p udp -g FWINPUT-UDP
-A INPUT -p icmp -g FWINPUT-ICMP
## Reject Anything Non-TCP/UDP/ICMP
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
## TCP Rules
-A FWINPUT-TCP -p tcp -m tcp --dport 80 -j ACCEPT
-A FWINPUT-TCP -p tcp -m tcp --dport 443 -j ACCEPT
## fail2ban Check
-A FWINPUT-TCP -p tcp -m tcp --dport 22:25 -g fail2ban
## fail2ban Return
-A FWINPUT-TCP -p tcp -m tcp --dport 22 -j ACCEPT
-A FWINPUT-TCP -p tcp -m tcp --dport 25 -j ACCEPT
## TCP-Reset Ident
-A FWINPUT-TCP -p tcp -m tcp --dport 113 -j REJECT --reject-with tcp-reset
## Reject Any Other TCP Traffic
-A FWINPUT-TCP -j REJECT --reject-with icmp-port-unreachable
## UDP Rules
-A FWINPUT-UDP -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
## Reject Any Other UDP Traffic
-A FWINPUT-UDP -j REJECT --reject-with icmp-port-unreachable
## ICMP Rules
-A FWINPUT-ICMP -p icmp -m icmp --icmp-type 8 -m limit --limit 5/s -j ACCEPT
-A FWINPUT-ICMP -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A FWINPUT-ICMP -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A FWINPUT-ICMP -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A FWINPUT-ICMP -p icmp -m icmp --icmp-type 12 -j ACCEPT
## Reject Any Other ICMP Types
-A FWINPUT-ICMP -j REJECT --reject-with icmp-host-prohibited
## fail2ban Inserted Rules
-A fail2ban -j RETURN
COMMIT
我只是将操作开始和操作停止,并让fail2ban在运行时添加阻止的IP规则。这会更多地考虑手动,例如,如果你想开始使用fail2ban来阻止更多的东西......但是如果它是你尝试工作的一种固定类型的东西,那么它应该不是问题。
...在我的家庭系统上,而不是在服务器上,我通常只设置一个iptables限制并称之为足够好。