as regras do iptables bloqueiam a conexão ou deixam aberta

as regras do iptables bloqueiam a conexão ou deixam aberta

Tenho trabalhado para melhorar minhas regras de iptable. Aqui estão algumas informações básicas sobre o que fiz até agora, o que estou planejando realizar e meus problemas:

Eu tenho um RPi e um módulo WiFi e conectei um modem 3G a ele. Quero que todo o tráfego do meu WiFi seja encaminhado para a minha interface 3G. Eu criei essas regras e elas funcionam bem e tenho acesso total à Internet no tablet quando emparelho:

    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

Agora quero bloquear tudo isso e permitir apenas a passagem do tráfego que vai para dois endereços IP. Criei uma cadeia, mas as coisas não funcionam tão bem quanto esperava:

    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

Quando executo isso, todo o acesso à Internet, incluindo esses dois endereços IP, é bloqueado. Tentei ! com o mesmo resultado.

Alguém pode me ajudar a descobrir o que estou perdendo nisso?

Obrigado

Responder1

iptables -A TEST -d 34.215.23.64 -j RETURN
iptables -A TEST -d 52.37.29.39 -j RETURN

Seu principal problema é que essas regras não terão estado e você só as tratou em uma direção. Se fingirmos por um momento que não houve outros problemas, estas regras apenas controlariam o tráfego num sentido. Mas como você provavelmente precisa de comunicação bidirecional, como obterá respostas para qualquer coisa que enviar com destino '34.215.23.64'? A resposta será um pacote que tem como endereço de origem '34.215.23.64', e o destino seria o seu IP.

Portanto, você deve considerar pelo menos adicionar novamente a iptables ... --state RELATED,ESTABLISHED ...regra ().

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

Mas esse não é o único problema. A lógica da sua cadeia está quebrada.

Portanto, um pacote destinado 34.215.23.64será primeiro processado no encaminhamento. Ele primeiro corresponderá à -j TESTregra. Na cadeia TEST, esse pacote apenas é enviado de volta para a cadeia (-j RETURN) e então a próxima regra correspondente é DROP.

De qualquer forma, tente algo assim.

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

informação relacionada