web-dev-qa-db-fra.com

Iptables pour rediriger l'IP et le port de recherche DNS

J'ai découvert que mon FAI (verizon) intercepte tout le trafic DNS sur le port 53.

En utilisant iptables, je veux rediriger tout le trafic de recherche DNS vers une IP et un port spécifiques (5353). Toute tentative de connexion de mon ordinateur à un autre ordinateur sur le port 53 doit être redirigée vers 23.226.230.72:5353.

Pour vérifier le serveur DNS et le port que j'essaie d'utiliser, j'ai exécuté cette commande.

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

Ceci est la règle iptables que j'essaie d'utiliser.

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

Après avoir ajouté cette règle, toutes les recherches DNS sont introuvables. Les pings du site Web renvoient unknown Host. Les pages Web indiquent "Serveur introuvable".

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

Je veux que mes recherches DNS soient extraites de 23.226.230.72:5353. Comment puis-je faire fonctionner la règle iptables?

MODIFIER

Démonstration d'interception DNS (port 53) par mon FAI. Tracez la sortie de Dig vers 23.226.230.72 via le port 5353, puis le port 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

Mes iptables actuels. 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
22
Rucent88

Exécutez toutes ces instructions en tant que root (Sudo).

Modifiez ce fichier.

/etc/NetworkManager/NetworkManager.conf

Désactivez DnsMasq en mettant en commentaire la ligne dns=dnsmasq. Mettez un # devant la ligne

#dns=dnsmasq

Redémarrez votre réseau.

service network-manager restart

Ajoutez ces règles iptables.

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
13
Rucent88

Il semble que ce que vous recherchez vraiment, c'est de contrôler ce qui se passe avec vos requêtes DNS.

Je ne suis pas sûr que l'utilisation d'iptables serait ma solution préférée.

Avez-vous pensé à mettre en place un serveur DNS local qui transmet simplement vos demandes à l'hôte et au port que vous souhaitez? Un exemple: en utilisant l'option de redirecteurs bind9, vous pouvez ajouter un port à un redirecteur.

Une telle configuration est beaucoup plus facile à entretenir et à dépanner, et peut être beaucoup plus flexible. Considérez l'avantage du cache, ou considérez simplement le cas où votre serveur DNS externe est en panne. Vous pouvez avoir plusieurs redirecteurs dans votre configuration DNS, mais une seule IP dans les règles iptables ....

Il y a un bon aperçu de la configuration de bind9 dans un tutoriel sur Digital Ocean . Ajoutez simplement le port aux redirecteurs et vous devriez être prêt.

Bind9 ne consomme pas beaucoup de ressources et est facilement configuré (ou au moins: plus facile que iptables :-))

3
Vincent De Baere

Essaye ça:

Vous devez d'abord activer l'option de transfert dans

/etc/sysctl.conf

Réglez à un la valeur de

net.ipv4.ip_forward = 1

Activer les modifications

sysctl -p 

Enregistrez et exécutez les éléments suivants:

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

Si vous pouviez spécifier l'interface (-i eth1) dans PREROUTING ou/et out-interfect (-o eth0) IN POSTROUTING pourrait être utile.

REMARQUE: la ligne MASQUARADE est nécessaire pendant que ce masque l'IP de destination avec l'IP principale.

2
tachomi

Essaye ça:

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

Ça veut dire:
1) Tout utilisateur local contactant le monde vers le port TCP 53 envoie au 23.226.230.72 au port 5353.
2) Identique à 1 mais pour udp
3) Définissez les informations de source sur le paquet sortant comme provenant de nous.

1
George Hidalgo
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
0
Zibri