Linux

IPTABLES 不會丟棄傳入的 DNS 數據包

  • October 20, 2019

我有一個 Ubuntu 19.10 VPS 伺服器,它為某些使用者提供特定的監控流量。使用者連接、讀取文件和斷開連接。最近我注意到上述伺服器通過簡單地回復來自殭屍網路或害蟲的 DNS 請求被用於 DNS DDoS 放大攻擊,因此我嘗試定義一些 IPTABLES 規則,例如:

root@brohams ~# iptables-save -c
# Generated by iptables-save v1.6.1 on Mon Oct 14 09:26:44 2019
*filter
:INPUT ACCEPT [5748921:3396057055]
:FORWARD ACCEPT [2209544:2701483932]
:OUTPUT ACCEPT [6194165:6573791719]
[0:0] -A INPUT -i eth0 -p udp -m udp --dport 53 -j DROP
[182468:7298720] -A INPUT -i eth0 -p tcp -m tcp --dport 53 -j DROP
[40:1692] -A INPUT -i eth0 -p tcp -m tcp --dport 25 -j DROP
[2398:136716] -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j DROP
[0:0] -A INPUT -i eth0 -p udp -m udp --dport 53 -j DROP
[0:0] -A INPUT -p udp -m udp --dport 53 -j DROP
COMMIT
# Completed on Mon Oct 14 09:26:44 2019
# Generated by iptables-save v1.6.1 on Mon Oct 14 09:26:44 2019
*nat
:PREROUTING ACCEPT [892666:157568071]
:INPUT ACCEPT [144360:14788753]
:OUTPUT ACCEPT [6862:425179]
:POSTROUTING ACCEPT [1:78]
[59:3020] -A PREROUTING -p tcp -m tcp --dport 53 -j DNAT --to-destination 8.8.8.8
[339793:21781969] -A PREROUTING -p udp -m udp --dport 53 -j DNAT --to-destination 8.8.8.8
[0:0] -A PREROUTING -p tcp -m tcp --dport 53 -j DNAT --to-destination 8.8.8.8
[0:0] -A PREROUTING -p udp -m udp --dport 53 -j DNAT --to-destination 8.8.8.8
[27192:4136927] -A POSTROUTING -s X.X.X.0/24 -o eth0 -j MASQUERADE
[336369:21533218] -A POSTROUTING -o eth0 -j MASQUERADE
[0:0] -A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Mon Oct 14 09:26:45 2019

這是輸出iptables -Lnv

root@brohams ~# iptables -L -n -v
Chain INPUT (policy ACCEPT 9417K packets, 5055M bytes)
pkts bytes target     prot opt in     out     source               destination
   0     0 DROP       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
287K   11M DROP       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
  62  2668 DROP       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:25
 686 31144 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8
   0     0 DROP       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
   0     0 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53

Chain FORWARD (policy ACCEPT 5106K packets, 5409M bytes)
pkts bytes target     prot opt in     out     source               destination
857K   61M ACCEPT     all  --  xx0    *       0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 10M packets, 11G bytes)
pkts bytes target     prot opt in     out     source               destination

有趣的是,傳入的 UDP DNS 請求數據包沒有被丟棄,我的伺服器仍在回答它們。如您所見,正在丟棄 TCP DNS 請求。我的作業系統版本是:

root@brohams ~# lsb_release -a
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 19.04
Release:    19.04
Codename:    disco

root@brohams ~# uname -romi
5.0.0-31-generic x86_64 x86_64 GNU/Linux

我的 IPTABLES 版本是:

root@brohams ~# iptables -V
iptables v1.6.1

更新

我注意到很多 DNS 查詢到達我的機器,它們的目標 IP 地址與我的 VPS 不同。

root@brohams ~# tcpdump -s0 -vvvvni eth0 port 53 | grep -i ddosvictim
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
   172.217.40.8.36059 > x.x.179.4.53: [udp sum ok] 10363% [1au] A? victim.com. ar: . OPT UDPsize=4096 DO (57)
   74.125.190.150.65259 > x.x.179.4.53: [udp sum ok] 4809% [1au] SOA? victim.com. ar: . OPT UDPsize=4096 DO (57)
   141.101.70.60.59972 > x.x.179.4.53: [udp sum ok] 4272 [1au] A? victim.com. ar: . OPT UDPsize=1452 (46)
   76.96.47.215.6328 > x.x.179.4.53: [udp sum ok] 38615 [1au] ANY? www.victim.com. ar: . OPT UDPsize=4096 DO (50)
   64.135.1.20.28270 > x.x.179.4.53: [udp sum ok] 38218% [1au] AAAA? ns1.victim.com. ar: . OPT UDPsize=4096 DO (50)

如您所見,有大量的各種請求,數千個(為簡潔起見,省略了輸出)。這些數據包甚至最終出現在我的 VPS 上的事實真是令人費解。為什麼會發生這種情況?

這是當我查詢我自己的伺服器時,我們可以看到我的PREROUTINGNAT 正在執行它被告知的操作:

root@brohams ~# tcpdump -s0 -vvvvni eth0 port 53 | grep -i distro
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
   My.PC.83.162.36180 > My.VPS.183.141.53: [udp sum ok] 6595+ [1au] A? distrowatch.com. ar: . OPT UDPsize=4096 (56)
   My.VPS.183.141.36180 > 8.8.8.8.53: [udp sum ok] 6595+ [1au] A? distrowatch.com. ar: . OPT UDPsize=4096 (56)
   8.8.8.8.53 > My.VPS.183.141.36180: [udp sum ok] 6595 q: A? distrowatch.com. 1/0/1 distrowatch.com. [2h28m26s] A 82.103.136.226 ar: . OPT UDPsize=512 (60)
   My.VPS.183.141.53 > My.PC.83.162.36180: [udp sum ok] 6595 q: A? distrowatch.com. 1/0/1 distrowatch.com. [2h28m26s] A 82.103.136.226 ar: . OPT UDPsize=512 (60)

此機器尚未配置為任何類型的 DNS 伺服器。它只是為很少連接到它的 VPN 使用者充當遞歸 DNS 伺服器,但擁有此功能對他們來說至關重要。它也只有一個介面(Eth0)。

我找不到此版本的 IPTABLES 報告的任何錯誤。知道為什麼這種類型的流量仍在通過以及如何阻止它嗎?

PS我已經嘗試重新添加規則或移動它,但它仍然是一樣的。

提前致謝

所以,輸出iptables -t nat -L顯示:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             anywhere             tcp dpt:domain to:8.8.8.8
DNAT       udp  --  anywhere             anywhere             udp dpt:domain to:8.8.8.8
DNAT       tcp  --  anywhere             anywhere             tcp dpt:domain to:8.8.8.8
DNAT       udp  --  anywhere             anywhere             udp dpt:domain to:8.8.8.8

這真的很奇怪。我通過發布刪除了這些規則iptables -t nat -D #,現在 DNS 查詢被阻止了。感謝所有試圖提供幫助的人。真的很感激。

引用自:https://unix.stackexchange.com/questions/546613