-1

我正在使用 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 端口(例如,22 或 25)上阻止了入侵者 IP 地址。

我在某处读到,专门针对 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             
4

1 回答 1

-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 限制并称之为足够好。

于 2015-01-07T15:14:09.303 回答