Iptables per reindirizzare IP e porta di ricerca DNS


21

Ho scoperto che il mio ISP (verizon) sta intercettando tutto il traffico DNS sulla porta 53.

Utilizzando iptables, voglio reindirizzare tutto il traffico di ricerca DNS su un IP e una porta specifici (5353). Qualsiasi tentativo di connessione del mio computer a un altro computer sulla porta 53 deve essere reindirizzato a 23.226.230.72:5353.

Per verificare il server DNS e la porta che sto tentando di utilizzare, ho eseguito questo comando.

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

Questa è la regola di iptables che sto cercando di usare.

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

Dopo aver aggiunto quella regola, non vengono trovate tutte le ricerche DNS. Restituzione dei ping del sito Web unknown host. Le pagine Web indicano "Server non trovato".

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

Voglio che il mio DNS per le ricerche venga estratto da 23.226.230.72:5353. Come posso far funzionare la regola iptables?

MODIFICARE

Dimostrazione di intercettazione DNS (porta 53) da parte del mio ISP. Traccia l'output da scavare a 23.226.230.72 tramite la porta 5353 e quindi la 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

I miei attuali iptables. 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

Quindi stai cercando di reindirizzare tutto il traffico della porta 53 a quell'IP (23.226.230.72) e alla porta (5353)?
Tachomi,

per favore pubblica iptables rulesqui
Networker,

@tachomi Correct
Rucent88

Oppure non potresti usare il DNS del tuo ISP ... I server DNS pubblici di Google sono 8.8.8.8e8.8.4.4
Creek

@Creek Penso che tu abbia frainteso. Il mio isp sta intercettando tutto il traffico attraverso la porta 53. Anche se volessi usare i server DNS di Google, non posso accedervi.
Rucent88,

Risposte:


12

Esegui tutte queste istruzioni come root (sudo).

Modifica questo file.

/etc/NetworkManager/NetworkManager.conf

Disabilita DnsMasq commentando la riga dns=dnsmasq. Metti un #davanti alla linea

#dns=dnsmasq

Riavvia la tua rete.

service network-manager restart

Aggiungi queste regole iptable.

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

2
Questa soluzione si aggiorna con il sistema operativo e non consuma risorse ed è a rischio zero per la sicurezza, installazione semplicissima con uno script di avvio e manutenzione zero. Il rovescio della medaglia è che non è molto flessibile
Rucent88

3

Sembra che ciò che stai veramente cercando sia avere il controllo di ciò che accade con le tue query DNS.

Non sono sicuro che usare iptables sarebbe la mia soluzione preferita.

Hai pensato di configurare un server DNS locale che inoltra semplicemente le tue richieste all'host e alla porta che desideri? Un esempio: usando l'opzione bind9 forwarder è possibile aggiungere una porta a un forwarder.

Tale impostazione è molto più semplice da mantenere e risolvere e può essere molto più flessibile. Considera il vantaggio della memorizzazione nella cache o semplicemente considera il caso in cui il tuo server DNS esterno non è attivo. Puoi avere più server d'inoltro nella tua configurazione DNS, ma solo un IP nelle regole di iptables ....

C'è una buona panoramica della configurazione di bind9 in un tutorial su digital ocean . Basta aggiungere la porta agli spedizionieri e dovresti essere pronto.

Bind9 non consuma molte risorse ed è facilmente configurabile (o almeno: più facile di iptables :-))


Ooh, e inutile dirlo, in quella configurazione, non dimenticare di impostare i tuoi dispositivi per utilizzare il tuo server DNS di inoltro locale.
Vincent De Baere,

Avevo un server DNS in esecuzione, ma non era affidabile (hardware indesiderato). Mantenerlo aggiornato è stato un problema. Ha consumato più tempo, risorse, elettricità e alla fine ha preso a calci il secchio. Se avessi centinaia di computer dietro una rete aziendale, sono d'accordo che il server DNS sarebbe una buona idea. Ma sono solo una persona con un laptop. Un paio di regole iptable dovrebbero essere la risorsa più semplice e più bassa.
Rucent88,

Aggiungine uno sul tuo laptop, non consuma quasi risorse e verrà aggiornato con il tuo sistema operativo principale (supponendo che tu utilizzi i pacchetti di distribuzione) e lo ascolti su localhost. Quasi zero rischio per la sicurezza.
Vincent De Baere,

Infatti, IMHO, è il modo migliore per mantenere lo scenario nel 99% dei casi. L'unico 1% che non si applica, è quando si configura un sistema Captive Portal, ma questa è un'altra storia.
Ivanleoncz,

2

Prova questo:

Innanzitutto è necessario abilitare l'opzione di inoltro in

/etc/sysctl.conf

Impostare su uno il valore di

net.ipv4.ip_forward = 1

Abilita le modifiche

sysctl -p 

Salvare ed eseguire quanto segue:

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 si potesse specificare in-interface (-i eth1) in PREROUTING o / e out-interfect (-o eth0) IN POSTROUTING potrebbe essere utile.

NOTA: la linea MASQUARADE è necessaria mentre questa maschera l'IP di destinazione con l'IP principale.


Ho inserito sysctl net.ipv4.ip_forward=1e le regole di iptables. Il DNS funziona, ma viene ancora intercettato dal mio isp. Questo mi indica che il DNS viene ancora inviato attraverso la porta 53.
Rucent88

Ho cambiato la tua regola in udp, ma ho ottenuto gli stessi risultati.
Rucent88,

Potresti inserire l'output di iptables-save? Quello che potrei è che il tuo mascherare solo il MASQUERADE specificato tutto - 10.0.3.0/24, quindi se potessi disabilitare quella linea e lasciare il -A POSTROUTING -j MASQUERADE, potrebbe essere utile
tachomi

Ho aggiunto le informazioni che hai richiesto
Rucent88

Ok, capiamo un po 'di battito .... Tutta la porta 53 INCOMING traffic è quella che vuoi reindirizzare a 23.226.230.72 o quella OUTGOING?
Tachomi,

1

Prova questo:

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) Qualsiasi utente locale che contatta il mondo per la porta tcp 53 invia a 23.226.230.72 alla porta 5353.
2) Come 1 ma per udp
3) Imposta le informazioni di origine sul pacchetto in uscita come provenienti da noi.


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

Il fatto che questa risposta non menzioni "5353" mi fa credere che sia automaticamente sbagliato.
G-Man dice "Reinstate Monica" l'

corretto .........
Zibri

OK, sto dando una seconda occhiata alla tua risposta. Sembra essere molto simile alla risposta di Tachomi, tranne per il fatto che (1) sei passato sporta  dport(questo è stato, apparentemente, un errore nella risposta di Tachomi che battman622 ha sottolineato tre anni fa , (2) hai aggiunto una riga (comando) per udp(questo è un legittimo miglioramento della risposta di Tachomi, ma che è già stato menzionato in un commento  ... (proseguendo)
G-Man dice "Reinstate Monica" l'

(Proseguendo) ... e molte altre risposte) e (3) hai sostituito --to-destinationcon  --to.  La pagina man non lo dice --toe  --to-destinationsono equivalenti; al contrario, afferma che --toviene utilizzato con il NETMAPtarget (al contrario del  DNATtarget) e che il suo argomento non include un numero di porta. (Anche se noto che un paio di altre risposte usano --toil modo in cui l'hai fatto.) Sei sicuro che --tofunzioni nel modo in cui lo usi (con un numero di porta, con la  DNATdestinazione)? ... (proseguendo)
G-Man dice "Reinstate Monica" l'

(Proseguendo) ... (Se è così, forse qualcuno dovrebbe presentare una richiesta di modifica al mantenitore / i delle pagine man.) È  --tomeglio che   --to-destinationin qualche modo diverso dalla brevità?
G-Man dice "Reinstate Monica" l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.