내 컴퓨터(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 컨테이너 내부의 인터넷을 구성하고 두 번째 규칙 세트는 URL을 사용하는 경우 lxc 컨테이너 내부의 웹 서버에 연결할 수 있습니다.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 정책이 있는 경우 대상 NAT 라우팅을 달성할 수 있도록 수신 HTTP 요청이 전달되도록 허용하는 규칙을 추가해야 합니다. 이렇게 하려면 다음 명령을 실행하십시오.
iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 172.31.0.23 -j ACCEPT