
나는 iptable 규칙을 강화하기 위해 노력해 왔습니다. 다음은 제가 지금까지 수행한 작업과 달성할 계획 및 문제에 대한 배경 정보입니다.
저는 RPi가 있고 WiFi 모듈이 있고 여기에 3G 모뎀을 연결했습니다. WiFi의 모든 트래픽을 3G 인터페이스로 전달하고 싶습니다. 이러한 규칙을 만들었고 제대로 작동하며 페어링할 때 태블릿에서 완전한 인터넷 액세스를 얻을 수 있습니다.
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -F
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -A FORWARD -i ppp0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan1 -o ppp0 -j ACCEPT
이제 이 모든 것을 차단하고 두 개의 IP 주소로 가는 트래픽만 통과하도록 허용하고 싶습니다. 체인을 만들었지만 원하는 대로 작동하지 않습니다.
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -F
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -N TEST
iptables -A TEST -d 34.215.23.64 -j RETURN
iptables -A TEST -d 52.37.29.39 -j RETURN
iptables -A TEST -j ACCEPT
iptables -A FORWARD -i wlan1 -o ppp0 -j TEST
iptables -A FORWARD -i wlan1 -o ppp0 -j DROP
이를 실행하면 해당 두 IP 주소를 포함한 모든 인터넷 접속이 차단됩니다. 나는 노력했다! 같은 결과로.
누군가 내가 여기서 무엇을 놓치고 있는지 알아내도록 도와줄 수 있습니까?
감사해요
답변1
iptables -A TEST -d 34.215.23.64 -j RETURN
iptables -A TEST -d 52.37.29.39 -j RETURN
주요 문제는 이러한 규칙이 상태 저장되지 않고 한 방향으로만 규칙을 처리했다는 것입니다. 다른 문제가 없다고 잠시 가정한다면 이러한 규칙은 한 방향의 트래픽만 처리하게 됩니다. 그러나 아마도 양방향 통신이 필요할 것이므로 대상이 '34.215.23.64'인 보낸 항목에 대해 어떻게 응답을 받을 수 있습니까? 응답은 소스 주소가 '34.215.23.64'이고 목적지가 귀하의 IP인 패킷입니다.
따라서 최소한 ( iptables ... --state RELATED,ESTABLISHED ...
) 규칙을 다시 추가하는 것을 고려해야 합니다.
iptables -N TEST
iptables -A TEST -d -j RETURN
iptables -A TEST -d 34.215.23.64 -j RETURN
iptables -A TEST -d 52.37.29.39 -j RETURN
iptables -A TEST -j ACCEPT
iptables -A FORWARD -i wlan1 -o ppp0 -j TEST
iptables -A FORWARD -i wlan1 -o ppp0 -j DROP
그러나 그것이 유일한 문제는 아닙니다. 체인의 논리가 깨졌습니다.
따라서 목적지로 향하는 패킷이 34.215.23.64
먼저 전달에서 처리됩니다. 먼저 -j TEST
규칙과 일치합니다. TEST 체인에서 해당 패킷은 체인으로 다시 전송되고(-j RETURN) 다음 일치 규칙은 DROP입니다.
어쨌든, 대신에 이런 것을 시도해 보세요.
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -F
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# permit all established connections
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# chain for wlan -> ppp0 traffic
iptables -N WLAN2PPP
iptables -A WLAN2PPP -d 34.215.23.64 --state NEW -j ACCEPT
iptables -A WLAN2PPP -d 52.37.29.39 --state NEW -j ACCEPT
# everything else from wlan to ppp0 is dropped
iptables -A WLAN2PPP -j DROP
# send wlan1 -> ppp0 traffic to the chain.
iptables -A FORWARD -i wlan1 -o ppp0 -j WLAN2PPP