Iptables para redirecionar IP e porta de pesquisa de DNS

21

Descobri que meu ISP (verizon) está interceptando todo o tráfego DNS na porta 53.

Usando o iptables, desejo redirecionar todo o tráfego de pesquisa de DNS para um IP e uma porta específicos (5353). Qualquer tentativa de conexão com outro computador na porta 53 deve ser redirecionada para 23.226.230.72:5353.

Para verificar o servidor DNS e a porta que estou tentando usar, executei este comando.

~$ dig +short serverfault.com @23.226.230.72 -p5353
198.252.206.16

Esta é a regra do iptables que estou tentando usar.

iptables -t nat -A OUTPUT -p udp -m udp --dport 53 -j DNAT --to-destination 23.226.230.72:5353

Depois de adicionar essa regra, todas as pesquisas de DNS não são encontradas. Os pings do site retornam unknown host. As páginas da Web dizem 'Servidor não encontrado'.

~$ mtr serverfault.com
Failed to resolve host: Name or service not known

Desejo que minhas pesquisas de DNS sejam extraídas de 23.226.230.72:5353. Como posso fazer a regra iptables funcionar?

EDITAR

Demonstração de interceptação de DNS (porta 53) pelo meu ISP. Rastreie a saída de dig para 23.226.230.72 via porta 5353 e, em seguida, porta 53.

~$ dig +trace stackexchange.com @23.226.230.72 -p5353

; <<>> DiG 9.9.5-3-Ubuntu <<>> +trace stackexchange.com @23.226.230.72 -p5353
;; global options: +cmd
.           86395   IN  NS  ns7.opennic.glue.
.           86395   IN  NS  ns4.opennic.glue.
.           86395   IN  NS  ns3.opennic.glue.
.           86395   IN  NS  ns5.opennic.glue.
.           86395   IN  NS  ns2.opennic.glue.
.           86395   IN  NS  ns10.opennic.glue.
.           86395   IN  NS  ns1.opennic.glue.
.           86395   IN  NS  ns6.opennic.glue.
.           86395   IN  NS  ns8.opennic.glue.
dig: couldn't get address for 'ns8.opennic.glue': no more


~$ dig +trace stackexchange.com @23.226.230.72 -p53

; <<>> DiG 9.9.5-3-Ubuntu <<>> +trace stackexchange.com @23.226.230.72 -p53
;; global options: +cmd
.           7440    IN  NS  f.root-servers.net.
.           7440    IN  NS  d.root-servers.net.
.           7440    IN  NS  j.root-servers.net.
.           7440    IN  NS  i.root-servers.net.
.           7440    IN  NS  g.root-servers.net.
.           7440    IN  NS  k.root-servers.net.
.           7440    IN  NS  a.root-servers.net.
.           7440    IN  NS  h.root-servers.net.
.           7440    IN  NS  e.root-servers.net.
.           7440    IN  NS  m.root-servers.net.
.           7440    IN  NS  c.root-servers.net.
.           7440    IN  NS  b.root-servers.net.
.           7440    IN  NS  l.root-servers.net.
;; Received 239 bytes from 23.226.230.72#53(23.226.230.72) in 2948 ms

stackexchange.com.  215 IN  A   198.252.206.16
;; Received 62 bytes from 192.228.79.201#53(b.root-servers.net) in 116 ms

Minhas tabelas de ip atuais. iptables-save

~# iptables-save
# Generated by iptables-save v1.4.21 on Tue Jul 15 23:06:52 2014
*mangle
:PREROUTING ACCEPT [79950528:41742899703]
:INPUT ACCEPT [78748282:41360159554]
:FORWARD ACCEPT [13:5427]
:OUTPUT ACCEPT [85455483:57472640071]
:POSTROUTING ACCEPT [85480442:57475512901]
-A POSTROUTING -o lxcbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Tue Jul 15 23:06:52 2014
# Generated by iptables-save v1.4.21 on Tue Jul 15 23:06:52 2014
*nat
:PREROUTING ACCEPT [71:18713]
:INPUT ACCEPT [7:474]
:OUTPUT ACCEPT [109:7855]
:POSTROUTING ACCEPT [109:7855]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -d 172.17.0.0/16 -j MASQUERADE
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
COMMIT
# Completed on Tue Jul 15 23:06:52 2014
# Generated by iptables-save v1.4.21 on Tue Jul 15 23:06:52 2014
*filter
:INPUT ACCEPT [78748139:41360144354]
:FORWARD ACCEPT [13:5427]
:OUTPUT ACCEPT [85454926:57472600172]
:fail2ban-ssh - [0:0]
:fail2ban-vsftpd - [0:0]
-A INPUT -p tcp -m multiport --dports 21,20,990,989 -j fail2ban-vsftpd
-A INPUT -p tcp -m multiport --dports 22,6622 -j fail2ban-ssh
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 67 -j ACCEPT
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o lxcbr0 -j ACCEPT
-A FORWARD -i lxcbr0 -j ACCEPT
-A fail2ban-ssh -j RETURN
-A fail2ban-vsftpd -j RETURN
COMMIT
Rucent88
fonte
Então você está tentando redirecionar todo o tráfego da porta 53 para esse IP (23.226.230.72) e a porta (5353)?
Tachomi
por favor poste iptables rulesaqui
Networker
@tachomi Correct
Rucent88
Ou você não pode usar o DNS do seu ISP ... Os servidores DNS públicos do Google são 8.8.8.8e8.8.4.4
Creek
@ Creek Eu acho que você não entendeu. Meu provedor de serviços de Internet está interceptando todo o tráfego pela porta 53. Mesmo que eu quisesse usar servidores google dns, não consigo acessá-los.
Rucent88

Respostas:

12

Execute todas essas instruções como root (sudo).

Edite este arquivo.

/etc/NetworkManager/NetworkManager.conf

Desative o DnsMasq comentando a linha dns=dnsmasq. Colocar um# na frente da linha

#dns=dnsmasq

Reinicie sua rede.

service network-manager restart

Adicione estas regras de tabela de ip.

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 23.226.230.72:5353
iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to 23.226.230.72:5353
Rucent88
fonte
2
Esta solução é atualizada com o sistema operacional e consome zero recursos, sem risco à segurança, configuração super fácil com um script de inicialização e manutenção zero. A desvantagem é que não é muito flexível
Rucent88
3

Parece que o que você realmente quer é controlar o que acontece com suas consultas de DNS.

Não sei se o uso do iptables seria minha solução preferida.

Você já pensou em configurar um servidor DNS local que simplesmente encaminhe suas solicitações ao host e à porta que você deseja? Um exemplo: usando a opção de encaminhadores bind9, você pode adicionar uma porta a um encaminhador.

Essa configuração é muito mais fácil de manter e solucionar problemas e pode ser muito mais flexível. Considere a vantagem do cache ou considere o caso em que o servidor DNS externo está inoperante. Você pode ter vários encaminhadores na configuração do DNS, mas apenas um IP nas regras do iptables ....

Há uma boa visão geral da configuração do bind9 em um tutorial no digital ocean . Basta adicionar a porta aos encaminhadores e tudo estará pronto.

O Bind9 não consome muitos recursos e é facilmente configurado (ou pelo menos: mais fácil que o iptables :-))

Vincent De Baere
fonte
Ooh, e escusado será dizer que nessa configuração, não se esqueça de configurar o (s) seu (s) dispositivo (s) para usar seu servidor DNS de encaminhamento local.
Vincent De Baere
Eu tinha um servidor DNS em execução, mas não era confiável (hardware não solicitado). Manter a segurança atualizada foi uma dor. Consumiu mais tempo, recursos, eletricidade e finalmente chutou o balde. Se eu tivesse centenas de computadores atrás de uma rede corporativa, concordo que o servidor DNS seria uma boa idéia. Mas sou apenas uma pessoa com um laptop. Algumas regras de iptable devem ser o recurso mais fácil e mais baixo.
perfil completo de Rucent88
Basta adicionar um no seu laptop, ele consome quase nenhum recurso e será atualizado com o sistema operacional principal (supondo que você use pacotes de distribuição), e faça com que ele escute no localhost. Risco de segurança quase zero.
Vincent De Baere
Na verdade, IMHO, é a melhor maneira de manter o cenário em 99% dos casos. O único 1% que não se aplica é quando você está configurando um sistema Captive Portal, mas isso é outra história.
ivanleoncz
2

Tente o seguinte:

Primeiro, você deve ativar a opção de encaminhamento em

/etc/sysctl.conf

Defina para um o valor de

net.ipv4.ip_forward = 1

Ativar as alterações

sysctl -p 

Salve e execute o seguinte:

iptables -t nat -A PREROUTING -p tcp --sport 53 -j DNAT --to-destination 23.226.230.72:5353
iptables -t nat -A POSTROUTING -j MASQUERADE

Se você pudesse especificar a interface de entrada (-i eth1) em PREROUTING ou / e a interface de saída (-o eth0) IN POSTROUTING poderia ser útil.

NOTA: A linha MASQUARADE é necessária enquanto esta mascara o IP de destino com o IP principal.

tachomi
fonte
Eu coloquei sysctl net.ipv4.ip_forward=1e as regras do iptables. O DNS está funcionando, mas ainda está sendo interceptado pelo meu provedor. Assim que indica para mim que DNS ainda está sendo enviada através da porta 53.
Rucent88
Mudei sua regra para udp, mas obtive os mesmos resultados.
precisa saber é o seguinte
Você poderia colocar a saída do iptables-save? O que eu poderia é que o mascaramento apenas o especificado MASQUERADE todos - 10.0.3.0/24, então se você pode desativar essa linha e deixar o -A POSTROUTING -j MASQUERADE um, poderia ser útil
tachomi
Eu adicionei as informações que você solicitou
Rucent88
Ok, vamos entender um pouco. Todo o tráfego da porta 53 INCOMING é o que você deseja redirecionar para 23.226.230.72 ou o OUTGOING?
Tachomi
1

Tente o seguinte:

iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to 23.226.230.72:5353;

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 23.226.230.72:5353;

iptables -t nat -A POSTROUTING -j MASQUERADE

Significa:
1) Qualquer usuário local que está entrando em contato com o mundo para a porta TCP 53 envia para 23.226.230.72 na porta 5353.
2) Igual a 1, mas para o PDU
3) Defina as informações de origem no pacote de saída como sendo provenientes de nós.

George Hidalgo
fonte
0
iptables -t nat -A PREROUTING -p tcp --dport 53 -j DNAT --to XX.XX.XX.XX:5353
iptables -t nat -A PREROUTING -p udp  --dport 53 -j DNAT --to XX.XX.XX.XX:5353
iptables -t nat -A POSTROUTING -j MASQUERADE
Zibri
fonte
O fato de esta resposta não mencionar "5353" me faz acreditar que ela está automaticamente errada.
G-Man Diz 'Reinstate Monica' em
corrigido .........
Zibri 9/04
OK, vou dar uma segunda olhada na sua resposta. Parece ser muito semelhante à resposta de tachomi, exceto que (1) você mudou sportpara  dport(este foi, aparentemente, um erro na resposta de tachomi que battman622 apontou há três anos , (2) você adicionou uma linha (comando) para udp(isto é uma melhoria legítima na resposta de tachomi, mas que já foi mencionada em um comentário  ... (continua)
G-Man diz 'Reinstate Monica'
(Continua)… e várias outras respostas) e (3) você substituiu --to-destinationpor  --to.  A página de manual não diz isso --toe  --to-destinationé equivalente; pelo contrário, diz que --toé usado com o NETMAPdestino (ao contrário do  DNATdestino) e que seu argumento não inclui um número de porta. (Embora eu note que algumas outras respostas usam --toda mesma maneira que você.) Tem certeza de que --tofunciona da maneira que você a usa (com um número de porta, com o  DNATdestino)? … (Continua)
G-Man diz 'Reinstate Monica'
(Continua) ... (Se sim, talvez alguém deva enviar uma solicitação de alteração ao (s) mantenedor (es) das páginas de manual.) É  --tomelhor do que   --to-destinationde qualquer outra maneira que não seja a brevidade?
G-Man diz que 'Reinstate Monica'