Iptables
lxc 容器 <-> 外部網際網路,我錯過了什麼?
我的機器(enp0s10)上有連接到真實網路的乙太網,並且我有收集 lxc 容器的 lxcbr0 乙太網橋。我想提供一個 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://machine-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 的途中發生某些事情和數據包停止,但我到底錯過了什麼以及需要修復什麼?
如果您的 FORWARD 鏈中有 DROP 的預設策略,則必須附加一條規則以允許轉發傳入的 HTTP 請求,以便可以進行目標 NAT 路由。為此,請執行以下命令:
iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 172.31.0.23 -j ACCEPT