You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置iptables阻止服务器入站请求同时保留网络连通性?

如何配置iptables阻止服务器入站请求同时保留网络连通性?

兄弟,我仔细看了你的问题和iptables规则,马上找到核心问题了——你漏掉了允许回环接口(lo)流量的规则!这是新手配置iptables时超容易踩的坑,刚好就是导致你DNS解析失败、服务器连不上网的原因。

问题原因拆解

现在Ubuntu这类现代Linux发行版,默认用systemd-resolved处理DNS解析,它会监听本地回环地址127.0.0.53。当你执行apt update或者ping www.google.com时,系统其实是向这个本地地址发DNS请求,而这些请求属于回环接口的入站流量。但你的INPUT链里完全没允许lo接口的流量,最后被那条REJECT规则直接拦了,自然就出现解析失败的错误。

虽然你已经加了允许RELATED,ESTABLISHED状态的规则,但本地回环的流量如果没被匹配到(或者没被明确允许),就会被后续的拒绝规则阻断——本地DNS请求恰好就属于这种情况。

修复步骤

1. 临时添加回环接口允许规则(立即生效)

把这条规则插到INPUT链的最前面,确保它在拒绝规则之前生效:

sudo iptables -I INPUT 1 -i lo -j ACCEPT

这条规则的意思很直白:所有来自回环接口的入站流量,直接允许通过。

2. 验证修复效果

现在再试试之前失败的命令,应该能正常跑起来了:

ping www.google.com
sudo apt update

3. 永久保存规则(重启后不丢失)

Ubuntu可以用iptables-persistent工具保存当前规则,避免重启后失效:

# 先安装工具
sudo apt install -y iptables-persistent
# 保存当前iptables规则
sudo netfilter-persistent save

最终INPUT链规则参考

修复后的INPUT链应该是这个样子的(你可以用sudo iptables -L INPUT --line-numbers查看):

1. ACCEPT     all  --  anywhere             anywhere
2. ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
3. ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh ctstate NEW,ESTABLISHED
4. REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

额外提醒

  • 回环接口是服务器内部进程通信的基础,除了DNS,很多本地服务(比如数据库、监控工具)都依赖它,这条规则几乎是所有iptables配置的必备项;
  • 你现有的RELATED,ESTABLISHED规则已经能覆盖所有服务器主动发起的连接的响应(比如apt的HTTP请求、外部DNS的响应等),不需要额外修改;
  • 调整iptables规则时,一定要把允许类规则放在拒绝规则前面,因为iptables是按顺序匹配规则的,先匹配到的规则会先执行。

备注:内容来源于stack exchange,提问作者Bad_Panda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 08:43:05