Debian

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

  • April 10, 2022

在我的日誌中,我經常看到像這樣丟棄的 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 Flood。這就是我在 iptables for 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 中,我沒有在filter.d文件夾中看到任何針對 Syn 攻擊的特定過濾器。我的問題是:

1)我是否只是忽略上述日誌而不擔心為這些日誌設置 Fail2Ban 過濾器,因為它的網際網路並且總是會有腳本小子在做這些嗎?

2) 由於 Fail2ban 工作基於 iptables 日誌,有沒有辦法在我的伺服器上禁止上述 Syn 嘗試?

這是我對過濾器的蹩腳嘗試,但它不起作用。不確定它是否有效:

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

我正在使用 Debian + Nginx

我為此提出了另一種解決方案,到目前為止它似乎正在工作。基本上,我編寫了一個過濾器,它掃描日誌並阻止在給定的findtime. 因此,此過濾器將阻止由於 Syn、Xmas 攻擊、埠掃描等原因而被丟棄的 IP - 無論您的 iptables 規則中列出什麼。換句話說,它會阻止由於各種原因一直出現在 iptables 阻止列表中的那些。

本地監獄

[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

以上似乎對我有用。

引用自:https://serverfault.com/questions/640873