Iptables 允许 DNS 解析

Iptables 允许 DNS 解析

我为没有状态的 IPTABLES 编写了这个脚本。我需要阻止除 SSH、DNS、ICMP 和 Ubuntu 存储库之外的任何输出连接

#! /bin/bash
#Objetivo del script:
#Descartar paquetes  excepto ssh y DNS
#FIREWALL DE HOST SIN ESTADO Servidor
#Cleanup Rules
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
#allow loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#DNS resolution input and output
iptables -A INPUT -p udp --dport 53 -d 8.8.8.8,8.8.4.4 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -s 8.8.8.8,8.8.4.4 -j ACCEPT
#updates since ubuntu repositories
iptables -A INPUT -p tcp -d archive.ubuntu.com,security.ubuntu.com -m multiport --dports 80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -s archive.ubuntu.com,security.ubuntu.com -m multiport --sports 80,443 -j ACCEPT
#allow ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

#allow ICMP
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

结果是这样的:

iptables v1.8.7 (nf_tables): host/network `archive.ubuntu.com' not found
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.8.7 (nf_tables): host/network `archive.ubuntu.com' not found
Try `iptables -h' or 'iptables --help' for more information.

答案1

乍一看,您只允许接收 DNS 响应,并且没有在 OUTPUT 链中创建任何 DNS 相关规则来实际允许发送 DNS 查询。

您当前的规则:

#DNS resolution input and output
iptables -A INPUT -p udp --dport 53 -d 8.8.8.8,8.8.4.4 -j ACCEPT
            ^^^^^
iptables -A INPUT -p udp --sport 53 -s 8.8.8.8,8.8.4.4 -j ACCEPT
            ^^^^^

另外,DNS也可以使用TCP进行传输。

答案2

问题似乎出在 DNS 解析上。

iptables -A INPUT -p udp --dport 53 -d 8.8.8.8,8.8.4.4 -j ACCEPT

它允许 8.8.8.8 和 8.8.4.4 主机通过目标端口 53 到达您的服务器。如果您的站点/服务器上运行任何 DNS 服务。

iptables -A INPUT -p udp --sport 53 -s 8.8.8.8,8.8.4.4 -j ACCEPT

上述规则规定,如果 8.8.8.8 或 8.8.4.4 主机的源端口是 53,则允许它们访问您的站点/服务器。

我会采用如下的一般规则,允许从您的站点到任何 DNS 服务器的所有 DNS 查询。还建议打开 TCP,因为必须使用 TCP 来交换大于 512 字节的信息。

iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT

相关内容