我如何允许 HTTP 访问 $EXTIF?
*nat
-A POSTROUTING -o "$EXTIF" -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0] #If this is changed to DROP than clients cannot connect out.
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -j LOG
-A FORWARD -i "$EXTIF" -o "$INTIF" -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i "$INTIF" -o "$EXTIF" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -j LOG
-A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j LOG
COMMIT
答案1
仅允许 HTTP 到 $EXTIF:
iptables -A INPUT -m state --state ESSTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i $EXTIF -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A INPUT -j LOG
iptables -P INPUT DROP
这样就只允许外部人员发起到您服务器的 80 端口 (HTTP) 的连接。已建立/相关的规则将允许服务器仅回复这些连接,所以我认为这满足了您的要求。
这也应该相当有效地用发送到不同于 80 的端口的数据包淹没你的日志。我会考虑在 -j LOG 部分限制规则。
NAT 可防止任何外部实体与 NAT 后面的任何设备建立直接连接。您无需采取任何额外措施来保护 NAT 网络免受端口扫描。建议对各个主机设置防火墙,并使用最新的防病毒软件(如果是 MS 操作系统)。
花点时间阅读 Rusty 的《非常不可靠的指南》(http://people.netfilter.org/~rusty/unreliable-guides/) 和 iptables 手册页。它们写得非常好。