Правила iptables блокируют соединение или оставляют его открытым

Правила iptables блокируют соединение или оставляют его открытым

Я работаю над улучшением правил 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

Связанный контент