Iptables do przekierowania adresu IP i portu wyszukiwania DNS


22

Odkryłem, że mój dostawca usług internetowych (verizon) przechwytuje cały ruch DNS na porcie 53.

Za pomocą iptables chcę przekierować cały ruch związany z wyszukiwaniem DNS do określonego adresu IP i portu (5353). Każda próba połączenia mojego komputera z innym komputerem na porcie 53 powinna zostać przekierowana na 23.226.230.72:5353.

Aby zweryfikować serwer DNS i port, którego próbuję użyć, uruchomiłem to polecenie.

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

To jest reguła iptables, której próbuję użyć.

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

Po dodaniu tej reguły nie znaleziono wszystkich wyszukiwań DNS. Pingi WWW powracają unknown host. Strony internetowe mówią „Nie znaleziono serwera”.

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

Chcę, aby moje DNS były wyszukiwane z 23.226.230.72:5353. Jak mogę uruchomić regułę iptables?

EDYTOWAĆ

Demonstracja przechwytywania DNS (port 53) przez mojego dostawcę usług internetowych. Śledź dane wyjściowe z dig do 23.226.230.72 przez port 5353, a następnie 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

Moje obecne 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

Więc próbujesz przekierować cały ruch z portu 53 na ten adres IP (23.226.230.72) i Port (5353)?
tachomi

proszę zamieścić iptables rulestutaj
Networker

@tachomi Correct
Rucent88

Albo nie możesz użyć DNS swojego usługodawcy internetowego ... Publicznymi serwerami DNS Google są 8.8.8.8i8.8.4.4
Creek

@ Creek Myślę, że źle zrozumiałeś. Mój isp przechwytuje cały ruch przez port 53. Nawet gdybym chciał korzystać z serwerów Google dns, nie mogę uzyskać do nich dostępu.
Rucent88

Odpowiedzi:


13

Wykonaj wszystkie te instrukcje jako root (sudo).

Edytuj ten plik.

/etc/NetworkManager/NetworkManager.conf

Wyłącz DnsMasq, komentując linię dns=dnsmasq. Umieść #przed linią

#dns=dnsmasq

Uruchom ponownie sieć.

service network-manager restart

Dodaj te iptable reguły.

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
To rozwiązanie aktualizuje się wraz z systemem operacyjnym i zużywa zero zasobów i jest zerowym zagrożeniem bezpieczeństwa, super łatwą konfiguracją ze skryptem rozruchowym i zerową konserwacją. Minusem jest to, że nie jest bardzo elastyczny
Rucent88

3

Wygląda na to, że to, czego naprawdę chcesz, to kontrolowanie tego, co dzieje się z Twoimi zapytaniami DNS.

Nie jestem pewien, czy preferowanym rozwiązaniem byłoby użycie iptables.

Czy zastanawiałeś się nad utworzeniem lokalnego serwera DNS, który po prostu przesyła żądania do hosta i żądanego portu? Jeden przykład: używając opcji forward9 bind9 możesz dodać port do forwardera.

Taka konfiguracja jest znacznie łatwiejsza w utrzymaniu i rozwiązywaniu problemów i może być znacznie bardziej elastyczna. Rozważ zalety buforowania lub po prostu rozważ przypadek, w którym zewnętrzny serwer DNS jest wyłączony. Możesz mieć wielu forwarderów w konfiguracji DNS, ale tylko jeden adres IP w regułach iptables ...

Dobry przegląd konfiguracji bind9 znajduje się w samouczku na temat oceanu cyfrowego . Po prostu dodaj port do forwarderów i wszystko powinno być gotowe.

Bind9 w ogóle nie zużywa dużo zasobów i jest łatwy do skonfigurowania (a przynajmniej: łatwiejszy niż iptables :-))


Ooh, i nie trzeba dodawać, że w tej konfiguracji nie zapomnij ustawić urządzenia tak, aby korzystało z lokalnego, przekierowującego serwera DNS.
Vincent De Baere,

Miałem uruchomiony serwer DNS, ale nie był niezawodny (śmieciowy sprzęt). Utrzymywanie aktualizacji bezpieczeństwa było uciążliwe. Zużył więcej czasu, zasobów, energii elektrycznej i ostatecznie wyrzucił wiadro. Gdybym miał setki komputerów za siecią korporacyjną, zgadzam się, że serwer DNS byłby dobrym pomysłem. Ale jestem tylko jedną osobą z laptopem. Kilka iptable reguł powinno być najłatwiejszym i najniższym zasobem.
Rucent88

Wystarczy dodać jeden na swoim laptopie, nie zużywa on prawie żadnych zasobów, a zostanie zaktualizowany o główny system operacyjny (zakładając, że używasz pakietów dystrybucyjnych) i sprawi, że będzie nasłuchiwał na localhost. Niemal zerowe ryzyko bezpieczeństwa.
Vincent De Baere

Rzeczywiście, IMHO, to lepszy sposób na utrzymanie scenariusza w 99% przypadków. Jedyny 1%, który nie ma zastosowania, dotyczy konfiguracji systemu Captive Portal, ale to już inna historia.
ivanleoncz

2

Spróbuj tego:

Najpierw musisz włączyć opcję przekazywania w

/etc/sysctl.conf

Ustaw na wartość 1

net.ipv4.ip_forward = 1

Włącz zmiany

sysctl -p 

Zapisz i uruchom następujące:

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

Jeśli możesz podać interfejs (-i eth1) w PREROUTING lub / i out-interfect (-o eth0), IN POSTROUTING może być przydatne.

UWAGA: Konieczna jest linia MASQUARADE, która maskuje docelowy adres IP głównym adresem IP.


Kładę się sysctl net.ipv4.ip_forward=1i reguły iptables. DNS działa, ale nadal jest przechwytywany przez mój ISP. To mi wskazuje, że DNS jest nadal wysyłany przez port 53.
Rucent88

Zmieniłem twoją regułę na udp, ale mam te same wyniki.
Rucent88

Czy możesz podać wynik działania iptables-save? Mogę tylko maskować tylko określoną MASQUERADE all - 10.0.3.0/24, więc jeśli możesz wyłączyć tę linię i pozostawić -A POSTROUTING -j MASQUERADE jeden, może być pomocna
tachomi

Dodałem informacje, o które prosiłeś
Rucent88

Ok, zrozummy mały rytm .... Cały ruch 53 DOCHODZONY jest tym, który chcesz przekierować na 23.226.230.72 lub WYCIECZKOWY?
tachomi

1

Spróbuj tego:

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

Oznacza to:
1) Każdy użytkownik lokalny łączący się ze światem w celu przesłania portu tcp 53 na numer 23.226.230.72 na porcie 5353.
2) Taki sam jak 1, ale dla udp
3) Ustaw informacje o źródle na wychodzącym pakiecie jako pochodzące od nas.


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

Fakt, że w tej odpowiedzi nie ma wzmianki o „5353”, sprawia, że ​​uważam, że jest ona automatycznie błędna.
G-Man mówi „Reinstate Monica”

poprawione .........
Zibri,

OK, patrzę jeszcze raz na twoją odpowiedź. To wydaje się być bardzo podobna do odpowiedzi tachomi za wyjątkiem (1) został zmieniony sport, aby  dport(było najwyraźniej błąd w odpowiedzi tachomi że battman622 wskazał trzy lata temu , (2) dodano linię (komend) do udp(jest to uzasadniona poprawa odpowiedzi tachomi, ale taka, o której wspomniano już w komentarzu  … ( ciąg dalszy )
G-Man mówi „Przywróć Monikę”

(Cd) ... i kilka innych odpowiedzi) i (3), który otrzymuje --to-destinationsię  --to.  Strona podręcznika tego nie mówi --toi  --to-destinationsą równoważne; wręcz przeciwnie, mówi, że --tojest używany z NETMAPcelem (w przeciwieństwie do  DNATcelu) i że jego argument nie zawiera numeru portu. (Chociaż zauważam, że kilka innych odpowiedzi używa --totego, co zrobiłeś.) Czy jesteś pewien, że --todziała tak, jak go używasz (z numerem portu, z  DNATcelem)? … (Ciąg dalszy)
G-Man mówi „Reinstate Monica”

(Ciąg dalszy)… (Jeśli tak, być może ktoś powinien złożyć wniosek o zmianę do opiekuna (-ów) stron podręcznika). Czy jest  --tolepszy niż   --to-destinationjakikolwiek inny sposób niż zwięzłość?
G-Man mówi „Przywróć Monikę”
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.