我目前正在我的web服务器上设置iptables规则(Ubuntu18.04)。除了适用于DN查找查询的规则之外,几乎所有东西都能像我预期的那样工作。以下是我的理解:
因此,我制定了以下规则:
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT换句话说,接受来自端口53的任何传入连接(假设它们是我的服务器将发送到端口53的DN查询的响应)。然而,这是行不通的。nslookup ubuntuforums.org命令超时。下面是我没有得到的部分:如果我在下面添加iptable规则,那么它就能工作了
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT如果我正确地读取了上面的内容,就意味着我正在接受发送到服务器端口53的传入连接。我不明白为什么要这么做。我使用tcpdump来查看当我运行nslookup ubuntuforums.org时发生了什么,并且看不到发送到机器端口53的任何连接。很明显我错过了什么但我不知道.有谁有主意吗?提前谢谢。
在ubuntuforums.org上的原始文章:https://ubuntuforums.org/showthread.php?t=2409812
发布于 2019-01-10 06:16:21
我假设您的服务器至少有两个接口:本地回送和以太网接口。
在应用规则的方式上,它们适用于两个接口。
当您进行DNS查询时,很长一段时间内,它直接通过以太网接口(或用于到达DNS服务器的路由所使用的任何东西)。
但这只是通过OUTPUT链,而不是INPUT (和其他几个与此无关的)。
最近,发行版开始发布本地DNS缓存系统(dnsmasq、systemd-resolved、.)。
使用Ubuntu18.04,您可以获得最新的systemd功能。因此,我怀疑systemd-resolved使用环回接口来提供DNS缓存。当您使用nslookup时,它不是直接访问/etc/resolv.conf中指定的服务器,而是先通过systemd-resolved。
为了允许这样做,您需要添加防火墙规则,允许端口53上的输入通信量用于回送接口。
我的建议是使用iptables -I INPUT 1 -i lo -j ACCEPT将环回接口的所有通信量白名单。
发布于 2019-01-08 10:04:50
--dport --sport标志分别为Source Port和Destination Port;
源端口是连接开始的端口,对端口53的请求可以从端口55231启动,例如,如果您的服务器执行DNS查询,它的目标端口将是端口53,但源端口不是。根据您的示例,您说它不是工作--正是因为这个原因,请求源端口不是53,所以iptables完成了它的工作。
相反,目的地端口将过滤目的地端口的数据包,因此发送到端口53的请求将被接受,并且不会从哪个端口或主机(根据您的示例)进行测量。
总之,您现在允许对服务器的端口53进行查询,您在运行nslookup时看不到与端口53的任何连接,这可能是因为查询被发送到/etc/resolv.conf文件中配置的远程服务器。
https://serverfault.com/questions/948050
复制相似问题