应配置iptables默认drop并放行established,related及内网发起的new连接:先设-p input/forward drop;再-a forward -m state --state established,related -j accept,-a forward -i eth1 -o eth0 -m state --state new -j accept,确保仅内网可建新连、外网仅能回程。

要让 Linux 防火墙只允许由内网发起的 TCP 回程报文通过(即:只放行已建立连接的响应包,拒绝所有新连接请求),核心在于正确使用 iptables -m state --state ESTABLISHED,RELATED,并配合合理的链策略和接口/地址限制。
关键不是“仅允许回程”,而是默认拒绝新建连接,只放行已有会话的返回流量。下面分步说明:
明确目标场景
假设你有一台 Linux 主机作为网关或服务端,内网网段是 192.168.1.0/24,外网走 eth0,内网走 eth1。你想:
- 允许内网主机主动访问外网(如 HTTP、SSH 等);
- 允许这些访问产生的返回流量(ESTABLISHED/RELATED) 进入本机或转发出去;
- 禁止外网主动发起任何新连接(NEW)到内网或本机。
1. 设置默认策略为 DROP
先确保 INPUT 和 FORWARD 链默认拒绝,避免规则遗漏导致放行:
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 通常允许本机发出
⚠️ 注意:执行前务必确认已添加 SSH(22端口)白名单,否则会断连。
2. 允许内网接口(eth1)的入站流量(含 NEW)
因为内网主动发起连接,其第一个包是 NEW,必须显式放行:
iptables -A INPUT -i eth1 -j ACCEPT # 或更精细(仅限内网网段): iptables -A INPUT -i eth1 -s 192.168.1.0/24 -j ACCEPT
如果只是做转发网关(非本机服务),这条可省略,重点放在 FORWARD 链。
3. 在 FORWARD 链中放行内网发起的回程流量
这是你问题的核心:只允许“由内网发起”的连接所产生的返回包通过 FORWARD 链:
# 放行已建立或关联的连接(即回程包) iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # 同时,只允许从内网(eth1)发起的新连接(NEW)向外网(eth0)转发 iptables -A FORWARD -i eth1 -o eth0 -m state --state NEW -j ACCEPT # 可选:限制源地址更精确(比如只允内网网段) iptables -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -m state --state NEW -j ACCEPT
这样组合后:
✅ 内网 → 外网的新建连接(NEW)被允许;
✅ 外网 → 内网的对应响应(ESTABLISHED/RELATED)被允许;
❌ 外网 → 内网的 NEW 连接被默认 DROP(因无匹配规则,走-P FORWARD DROP)。
4. (可选)禁用外网主动进来的 NEW 连接
显式加一条“拒绝外网发起 NEW”的规则,增强可读性(虽默认策略已覆盖):
iptables -A FORWARD -i eth0 -m state --state NEW -j DROP
补充说明:为什么不用 -m state --state ESTABLISHED 单独?
-
ESTABLISHED匹配的是双向通信中后续的数据包(如 TCP 的 ACK、数据段); -
RELATED匹配的是关联连接(如 FTP 的数据连接、ICMP 错误报文等),对可靠性很重要; - 单独用
ESTABLISHED会漏掉RELATED流量,可能导致 FTP、SIP、被动模式传输异常。
验证是否生效
查看 FORWARD 链规则:
iptables -vnL FORWARD
应看到类似:
pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- eth1 eth0 192.168.1.0/24 0.0.0.0/0 state NEW 42 2520 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
再从内网 ping 外网主机,或 curl 外网网页,检查连接是否通且响应能回来;同时从外网 telnet 内网网关ip 22 应失败(无 NEW 规则匹配)。
不复杂但容易忽略











