我的机器(enp0s10)上有连接到真实网络的以太网,并且我有 lxcbr0 以太网桥来收集 lxc 容器。我想提供一个 lxc 容器。
所以我写道:
IFACE=enp0s10
echo "allow inet for lxc"
iptables -t nat -A POSTROUTING -o $IFACE -j MASQUERADE
iptables -A FORWARD -i $IFACE -o lxcbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i lxcbr0 -o $IFACE -j ACCEPT
echo "allow web for lxc"
iptables -A PREROUTING -t nat -i $IFACE -p tcp --dport 19980 -j DNAT --to 172.20.0.5:80
iptables -A INPUT -p tcp -m state --state NEW --dport 19980 -i $IFACE -j ACCEPT
第一组规则在 lxc 容器内配置互联网,第二组规则可以在 lxc 容器内连接 Web 服务器,如果我使用 url "http://机器IP:19980“。一切正常。但我想让它更安全并结束规则:
iptables -N logdrop
iptables -A logdrop -m limit --limit 5/m --limit-burst 10 -j LOG
iptables -A logdrop -j DROP
iptables -A INPUT -p tcp -m state --state NEW -j logdrop
iptables -A INPUT -j logdrop
iptables -A FORWARD -j logdrop
所以我以明确的方式记录并删除所有我不允许的内容。之后我进入日志:
IN=enp0s10 OUT=lxcbr0 MAC=xxx SRC=192.168.1.1 DST=172.20.0.5 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=57331 DF PROTO=TCP SPT=58432 DPT=80 WINDOW=29200 RES=0x00 SYN URGP=0
所以我不允许某些东西和数据包在从 enp0s10 到 lxcbr0 的途中停止,但我到底错过了什么以及需要修复什么?
答案1
如果您的 FORWARD 链中有默认的 DROP 策略,则必须附加一条规则以允许转发传入的 HTTP 请求,以便可以实现目标 NAT 路由。为此,请运行以下命令:
iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 172.31.0.23 -j ACCEPT