IPTABLES는 들어오는 DNS 패킷을 삭제하지 않습니다.

IPTABLES는 들어오는 DNS 패킷을 삭제하지 않습니다.

일부 사용자에게 일부 모니터링 트래픽을 제공하는 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 요청이 삭제되고 있습니다. 내 OS 버전은 다음과 같습니다.

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

고쳐 쓰다

내 VPS와 다른 대상 IP 주소를 사용하여 내 컴퓨터에 많은 DNS 쿼리가 도착하는 것으로 나타났습니다.

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에 도달했다는 사실은 정말 당황스럽습니다. 왜 이런 일이 발생합니까?

PREROUTING내 서버에 쿼리하면 내 NAT가 지시한 대로 수행되고 있음 을 알 수 있습니다 .

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 서버 역할만 하지만 이 기능을 갖는 것은 VPN 사용자에게 매우 중요합니다. 그리고 하나의 인터페이스(Eth0)만 있습니다.

이 버전의 IPTABLES에서 보고된 버그를 찾을 수 없습니다. 이러한 유형의 트래픽이 여전히 발생하는 이유와 이를 중지하는 방법을 알고 계시나요?

PS 규칙을 다시 추가하거나 이동해 보았지만 여전히 동일합니다.

미리 감사드립니다

답변1

따라서 출력에는 다음이 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 쿼리가 차단됩니다. 도움을 주신 모든 분들께 감사드립니다. 정말 감사합니다.

관련 정보