Jak mogę przekierować ruch wychodzący na port 80, używając lokalnie iptables?


19

Próbuję lokalnie przekierować porty na moim komputerze Ubuntu przy użyciu iptables. Podobne do przezroczystego proxy. Chcę złapać wszystko, co próbuje zostawić mój system na porcie 80 i przekierować go do zdalnego hosta i portu.

Czy mogę to osiągnąć za pomocą funkcji NAT i funkcji routingu wstępnego iptables?

Odpowiedzi:


30

Wypróbuj tę iptableszasadę:

$ sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination IP:80

Powyższe mówi:

  • Dodaj następującą regułę do tabeli NAT ( -t nat).
  • Ta reguła zostanie dołączona ( -A) do ruchu wychodzącego ( OUTPUT).
  • Interesuje nas tylko ruch TCP ( -p tcp).
  • Interesuje nas tylko ruch, którego port docelowy to 80 ( --dport 80).
  • Kiedy mamy dopasowanie, przejdź do DNAT ( -j DNAT).
  • Przekieruj ten ruch do adresu IP innego portu 80 serwera ( --to-destination IP:80).

Co to jest DNAT?

DNAT
    This target is only valid in the nat table, in the PREROUTING and OUTPUT 
    chains, and user-defined chains which are only called from those chains.
    It specifies that the destination address of the packet should be modified 
    (and all future packets in  this  connection will also be mangled), and
     rules should cease being examined.

Bibliografia


dzięki za to, ale to nie działa. Jednak odkąd odkryłem, że to działa.
pjf

sudo iptables -t nat -A WYJŚCIE -p tcp --port 80 -j DNAT - do miejsca docelowego xx.xx.xx.xx: 3128
pjf

Czy to dlatego, że odbywa się to lokalnie, a nie przez bramę? Twój SNAT będzie działał przez bramę?
pjf

@pjf - tak mi się wydaje. Zaktualizowałem swoją odpowiedź.
slm

@pjf - znalazłem obie reguły i byłem w trakcie aktualizacji mojej odpowiedzi na oba. Nie byłem jednak pewien, w jakiej jesteś sytuacji.
slm

6

Można to bardziej sprecyzować, aby działało tylko w ruchu do określonego hosta docelowego. Na przykład, gdy postfix popełnił błąd i wiadomości w kolejce chcą zostać wysłane na stary adres IP.

iptables -t nat -A OUTPUT -p tcp -d {ONLY_TO_THIS_DESTINATION} --dport 25 -j DNAT --to-destination {NEW_IP}:25

4

Dzięki temu możesz tłumaczyć porty na wszystkie adresy IP. Główną różnicą jest tutaj brak adresu IP w --to-destinationterenie.

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination :80

Bardzo przydatna wskazówka; dokładnie to, czego potrzebowałem. Czy istnieje sposób na zwiększenie numeru portu? Powiedzmy, że mam zasięg 100 portów i chcę je wszystkie zwiększyć o określoną kwotę.
Zdenek

Nie wiem co masz na myśli. Czy możesz napisać for-loop w Bash?
Felipe Alvarez

Pętla dodająca 100 reguł iptables działałaby, ale spowolniłaby. Wolałbym móc powiedzieć mu, aby zwiększał wiele kolejnych portów w ramach jednej reguły.
Zdenek

@Zdenek Nie wiem, czy jest to możliwe w przypadku iptables. Czy spojrzał firewalld?
Felipe Alvarez
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.