Tenho dois computadores; um executando o gpsd e outro usando gpspipe -w 192.168.90.1
para consultar os dados.
GPSD escuta na porta 2947 e quero bloqueá-la com iptables. Eu tentei muitas regras, mas ainda consigo ver a saída do gpspipe e não espero isso.
As principais regras com as quais comecei foram
iptables -A OUTPUT -o usb0 -p tcp --dport 2947 -j DROP
iptables -A OUTPUT -o usb0 -p udp --dport 2947 -j DROP
iptables -A INPUT -i usb0 -p tcp --dport 2947 -j DROP
iptables -A INPUT -i usb0 -p udp --dport 2947 -j DROP
Eu também tentei a FORWARD
corrente sem sorte. A página de manual do iptables também é confusa.
Eu preciso fazer com que nada saia na porta 2947, e o iptables parece completamente inepto nisso. Estou fazendo algo errado?
Para começar, no que diz respeito às regras de firewall, o GPSD não está “se comunicando” porque não está iniciando a conexão – o gpspipe está. Isto é importante porque 1) pacotes e conexões possuem um par de números de porta, ou seja, as portas possuem uma direção; 2) o primeiro pacote é o mais importante e é a partir dele que você começa a escrever as regras, que neste caso é um pacote 'INPUT' da perspectiva do GPSD.
Ao bloquear o tráfego, se você descartar o pacote inicial na entrada, geralmente não faz sentido bloquear pacotes adicionais na saída – eles nem serão gerados. (Considerando que, se você não bloquear o pacote de entrada inicial, com o TCP isso poderá levar acidentalmente a uma "inundação SYN", pois o servidor terminará com muitas conexões meio estabelecidas.)
Mais importante ainda, os pacotes de resposta que o GPSD envia não terão
--dport 2497
– essa será a porta de origem , portanto, se você estivesse fazendo filtragem sem estado, suas regras de 'SAÍDA' diriam--sport
.As regras do iptables são processadas de cima para baixo e o
-A
comando anexa regras na parte inferior . No seu exemplo, você está apenas adicionando regras cegamente no final, sem realmente verificar o que mais já está lá - não importa se você adicionou 10 do mesmo "negar" se o conjunto de regras tiver uma regra de "permitir" superior na lista, pois a primeira regra correspondente vence.(Este é o meu forte palpite porque todo conjunto de regras típico funciona assim: permitir
lo
comunicações de loopback, permitir estabelecimento, permitir ICMP, permitir outras portas necessárias, descartar todo o resto.)Execute
iptables -S
para verificar quais regras você possui atualmente ouiptables -vnL
para ver os números das linhas para poder inserir uma nova regra na posição específica necessária (ou talvez excluir uma regra existente que permite o tráfego; não faz sentido adicionar "deny X" se você tem "permitir X, negar tudo").-A
bem como-I
(que é inserido na parte superior) ambos usam um número de linha opcional para adicionar a nova regra antes/depois.Outra maneira, provavelmente melhor, seria
iptables-save > somefile
editar o arquivo – você pode ver seu conjunto de regras de uma só vez – e carregá-lo novamente usandoiptables-restore
.