如何使用 Fail2Ban 禁止 Syn Flood 攻击?

如何使用 Fail2Ban 禁止 Syn Flood 攻击?

在我的日志中,我经常看到像这样被丢弃的 IP:

> Oct 30 17:32:24 IPTables Dropped: IN=eth0 OUT=
> MAC=04:01:2b:bd:b0:01:4c:96:14:ff:df:f0:08:00 SRC=62.210.94.116
> DST=128.199.xxx.xxx LEN=40 TOS=0x00 PREC=0x00 TTL=244 ID=45212
> PROTO=TCP SPT=51266 DPT=5900 WINDOW=1024 RES=0x00 SYN URGP=0
> 
> Oct 30 17:29:57 Debian kernel: [231590.140175] IPTables Dropped:
> IN=eth0 OUT= MAC=04:01:2b:bd:b0:01:4c:96:14:ff:ff:f0:08:00
> SRC=69.30.240.90 DST=128.199.xxx.xxx LEN=40 TOS=0x00 PREC=0x00 TTL=245
> ID=12842 DF PROTO=TCP SPT=18534 DPT=8061 WINDOW=512 RES=0x00 SYN
> URGP=0

从上面可以看出,这些是我的 IpTables 规则丢弃的 Syn 泛洪。这是我在 iptables 中为 Syn 准备的(虽然不确定这些规则中的哪一条丢弃了上面的规则):

# Drop bogus TCP packets
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP

# --- Common Attacks: Null packets, XMAS Packets and Syn-Flood Attack ---
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

在 Fail2ban 中,我没有看到文件夹中有任何针对 Syn 攻击的特定过滤器filter.d。我的问题是:

1) 我是否应该忽略上述日志,而不必担心为这些日志设置 Fail2Ban 过滤器,因为它是互联网,而且无论如何都会有脚本小子做这些事情?

2) 由于 Fail2ban 基于 iptables 日志工作,有没有办法在我的服务器上禁止上述 Syn 尝试?

这是我尝试的过滤器,但不起作用。不确定它是否有效:

[Definition]
failregex = ^<HOST> -.*IPTables Dropped:.*SYN URGP=0
ignoreregex =

我正在使用 Debian + Nginx

答案1

我想到了另一个解决方案,到目前为止似乎很有效。基本上,我编写了一个过滤器,它扫描日志并阻止所有因给定原因而被丢弃的恶意 IP 地址findtime。因此,此过滤器将阻止由于 Syn、Xmas 攻击、端口扫描等原因而被丢弃的 IP - 无论 iptables 规则中列出了什么。换句话说,它会阻止那些由于各种原因而不断出现在 iptables 阻止列表中的 IP。

监狱.本地

[iptables-dropped]

enabled = true
filter = iptables-dropped
banaction = iptables-allports
port = all
logpath = /var/log/messages
bantime = 1800
maxretry = 3

过滤器:iptables-dropped.conf

[Definition]
failregex = IPTables Dropped: .* SRC=<HOST>
ignoreregex =

确保在 iptables 规则中记录被丢弃的 IP,以便上述过滤器能够正常工作:

# log iptables denied calls (access via 'dmesg' command) to /var/log/messages file
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 5/min -j LOG --log-prefix "IPTables Dropped: " --log-level 4
iptables -A LOGGING -j DROP

以上内容对我而言似乎有用。

答案2

超级fail2ban过滤器!!它非常有效。非常感谢!

无论如何,我建议以这种方式编辑 fail2ban 过滤器并修改正则表达式:

failregex = ^%(__prefix_line)slost connection after .*\[<HOST>\]$
            ^%(__prefix_line)stoo many errors after .*\[<HOST>\]$

答案3

你能帮我一下吗?我安装了 nftables 而不是 iptables,如何使用 SYN 过滤器?

相关内容