Powrót do bloga

Przekierowywanie portów za pomocą Iptables w systemie Linux: Poradnik

Przekierowywanie portów za pomocą Iptables w systemie Linux: Poradnik

Przekierowanie portów, zwane również mapowaniem portów, to metoda umożliwiająca urządzeniom zdalnym łączenie się z określoną usługą w ramach prywatnej sieci lokalnej (LAN). Jak sama nazwa wskazuje, proces ten polega na przekazywaniu żądań dotyczących określonego portu do innego portu lub sieci. Modyfikuje on cel pakietu w locie i jest uważany za rodzaj operacji translacji adresów sieciowych (NAT).

Włączenie przekierowania portów umożliwia urządzeniom lub hostom niepołączonym z siecią wewnętrzną uzyskanie dostępu do siebie nawzajem, co w przeciwnym razie jest ograniczone, gdy funkcja ta jest wyłączona. Możesz wykorzystać zalety przekierowania portów, aby blokować docelowe strony internetowe, zwiększyć bezpieczeństwo i w dogodny sposób ominąć zaporę sieciową NAT.

W tym samouczku przeprowadzimy Cię przez kroki przekierowywania portów za pomocą iptables w systemie Linux.

Wymagania wstępne

Aby móc postępować zgodnie z tym samouczkiem, będziesz potrzebować:

Szczegóły hosta

Najpierw musimy poznać szczegóły interfejsów i adresów działających serwerów. Sprawdźmy interfejsy sieciowe naszego systemu:

Zobaczysz następujący wynik:

W tym miejscu wyróżniony wynik pokazuje dwa interfejsy, z których pierwszy eth0 przypisany do adresu 192.51.100.45, a drugi eth1 przypisany do adresu 192.168.1.5. Z tych dwóch interfejsów jeden jest publiczny, a drugi prywatny. Uruchomimy polecenie, aby je rozróżnić i ustalić, który interfejs jest publiczny (ten połączony z domyślną bramą). Aby je rozróżnić, wpisz:

Zobaczysz następujący wynik:

Przykładowe dane na potrzeby samouczka

W tym samouczku będziemy używać fikcyjnych adresów i przypisań interfejsów. Możesz swobodnie korzystać z tych danych lub zastąpić je własnymi, według uznania.

Szczegóły sieciowe serwera WWW:

  • Publiczny adres IP: 203.0.113.2

  • Prywatny adres IP: 192.0.2.2

  • Interfejs publiczny: eth0

  • Interfejs prywatny: eth1

Szczegóły sieciowe zapory sieciowej:

  • Publiczny adres IP: 203.0.113.15

  • Prywatny adres IP: 192.0.2.15

  • Interfejs publiczny: eth0

  • Interfejs prywatny: eth1

Konfiguracja serwera WWW

Zacznijmy od naszego hosta serwera WWW. Najpierw zaloguj się za pomocą swojego sudo użytkownika.

Instalacja Nginx

Najpierw zainstalujemy Nginx na naszym hoście serwera WWW i zablokujemy go tak, aby nasłuchiwał tylko na swoim prywatnym interfejsie. Dzięki temu nasz serwer WWW będzie dostępny tylko wtedy, gdy poprawnie skonfigurujemy przekierowanie portów.

Następnie zaktualizuj lokalną pamięć podręczną pakietów i użyj apt, aby pobrać i zainstalować Nginx:

Dodawanie ograniczeń

Po zainstalowaniu Nginx na naszym hoście serwera WWW zablokujemy go, aby upewnić się, że akceptuje dane wejściowe tylko z prywatnych interfejsów i znikąd indziej. Zapewni to również, że nasze serwery WWW będą aktywne tylko wtedy, gdy konfiguracja przekierowania portów będzie poprawna.

Aby dodać ograniczenia, otwórz domyślny plik konfiguracyjny bloku serwera /etc/nginx/sites-enabled/default w dowolnym edytorze tekstu (tutaj używamy edytora nano) i wpisz:

W danych wyjściowych zobaczysz, że dyrektywa listen pojawia się dwukrotnie:

Port Forwarding Nginx Default File

W tym samouczku używamy pierwszej dyrektywy do zademonstrowania przekierowania IPv4. Druga, skonfigurowana dla IPv6, może zostać usunięta. Dodaj prywatny adres IP swojego serwera WWW z dwukropkiem tuż przed 80, aby poinformować Nginx, aby przyjmował dane wejściowe tylko z interfejsu prywatnego. Następnie edytuj dyrektywę:

Port Forwarding Nginx Edited Default File

Po zakończeniu zapisz i zamknij plik. Zanim przejdziesz dalej, upewnij się, że nie ma błędów składniowych. Przetestujmy plik:

Nginx T

Jeśli nie wyświetli się żaden błąd, możesz zrestartować Nginx i włączyć nową konfigurację:

Weryfikacja ograniczenia sieciowego

Zweryfikujmy poziom dostępu do naszego serwera WWW. Spróbuj uzyskać dostęp do serwera WWW za pomocą prywatnego interfejsu, używając polecenia curl :

Zobaczysz dane wyjściowe:

Port Forwarding Nginx Output1

Jeśli spróbujemy użyć interfejsu publicznego, nie będziemy mogli się połączyć:

To jest dokładnie to, czego się spodziewaliśmy.

Skonfiguruj zaporę sieciową do przekierowywania portu 80

Przejdźmy do wdrożenia przekierowania portów na naszej maszynie z zaporą sieciową.

Włącz przekierowanie w jądrze

Domyślnie większość systemów ma wyłączone przekierowanie portów. Wprowadzimy zmiany, aby włączyć przekierowanie portów, dokonując kilku edycji. Istnieje również opcja włączenia przekierowania portów na stałe przy użyciu uprawnień sudo , jak pokazano w kolejnych krokach.

Aby włączyć przekierowanie ruchu na poziomie jądra, wpisz:

Aby włączyć przekierowanie portów na stałe, edytuj plik /etc/sysctl.conf . Otwórz plik z uprawnieniami sudo i wpisz:

Wewnątrz znajdź i odkomentuj linię, która wygląda tak:

Po zakończeniu zapisz i zamknij plik. Następnie użyj poleceń sysctl , aby zastosować zmiany w ustawieniach, aby weszły w życie:

Podstawowa konfiguracja zapory sieciowej

Najpierw zapoznaj się z przewodnikiem dotyczącym jak skonfigurować podstawową zaporę sieciową na swojej maszynie. Po zakończeniu będziesz mieć:

  • Zainstalowany pakiet iptables-persistent
  • Zapisany domyślny zestaw reguł w /etc/iptables/rules.v4
  • Wszechstronną wiedzę na temat dodawania i modyfikowania reguł za pomocą polecenia iptables command

Możesz również sprawdzić jak wyświetlić i usunąć reguły zapory iptables.

Dodawanie reguł przekierowania

Skonfigurujemy naszą zaporę sieciową, aby upewnić się, że ruch wpływający do naszego interfejsu publicznego ( eth0 ) na porcie 80 jest przekierowywany do naszego interfejsu prywatnego ( eth1). Domyślnie nasza podstawowa zapora sieciowa ma łańcuch FORWARD ustawiony na DROP ruchu. Dodanie reguł zapory pozwoli na przekierowywanie połączeń do naszego serwera WWW. Aby zwiększyć bezpieczeństwo, zablokujemy reguły zapory, aby zezwalały tylko na określone żądania przekierowania.

W łańcuchu FORWARD będziemy akceptować nowe połączenia przeznaczone dla portu 80 pochodzące z naszego interfejsu publicznego i zmierzające do naszego interfejsu prywatnego. Zidentyfikujemy nowe połączenia za pomocą rozszerzenia conntrack i przedstawimy je jako pakiet TCP SYN :

Musisz zezwolić na wszelki kolejny ruch w obu kierunkach wynikający z połączenia przychodzącego. Wpisz poniższe polecenia, aby zezwolić na ruch ESTABLISHED oraz RELATED między naszymi interfejsami publicznymi i prywatnymi:

Sprawdźmy, czy nasza polityka dla łańcucha FORWARD jest ustawiona na DROP:

Do tej pory dodaliśmy kilka reguł, które pozwalają na ruch między naszym interfejsem publicznym a prywatnym przez naszą zaporę sieciową. Jednakże iptables nie jest jeszcze poinformowany o kierowaniu ruchem, ponieważ konfiguracja reguł zapory sieciowej nie została jeszcze zakończona. W kolejnych krokach dodamy reguły NAT i dostosujemy stały zestaw reguł do kierowania ruchem.

Dodawanie reguł NAT do kierowania pakietami

Wykonamy dwie oddzielne operacje, aby iptables mógł poprawnie modyfikować pakiety i usprawnić komunikację z klientami oraz serwerem WWW.

DNAT to pierwsza operacja, która rozpoczyna łańcuch PREROUTING tabeli nat Ta operacja zmienia adres docelowy pakietu i umożliwia jego poprawne trasowanie podczas przechodzenia między sieciami. Jednak klienci w sieci publicznej będą łączyć się z naszym serwerem zapory i nie będą mieli żadnych informacji o topologii naszej sieci prywatnej. Aby przekazywać informacje w sieci prywatnej, zmień adres docelowy każdego pakietu, aby umożliwić mu poprawne dotarcie do naszego docelowego serwera WWW.

Należy pamiętać, że skupiamy się na konfiguracji przekierowania portów. Wykonywanie NAT na każdym pakiecie trafiającym do zapory nie jest częścią tego poradnika. Będziemy dopasowywać pakiety na porcie 80 do prywatnego adresu IP naszego serwera WWW:

Pakiet zostanie poprawnie przekierowany do naszego serwera WWW, zawierając oryginalny adres klienta jako adres źródłowy. Pomimo prób podjętych przez serwer w celu wysłania odpowiedzi bezpośrednio na ten adres, nie będzie możliwości ustanowienia prawidłowego połączenia TCP.

Aby skonfigurować prawidłowe trasowanie, zmodyfikujemy adres źródłowy pakietu. Zmieńmy adres źródłowy na prywatny adres IP naszego serwera zapory. Po modyfikacji odpowiedź zostanie odesłana do zapory, która przekaże ją z powrotem do klienta.

Aby włączyć tę funkcjonalność, dodaj regułę do łańcucha POSTROUTING tabeli nat ewaluowanego tuż przed wysłaniem pakietów do sieci. Następnie dopasuj pakiety przeznaczone dla naszego serwera WWW według adresu IP i portu:

Po wdrożeniu tej reguły nasz serwer WWW powinien być dostępny poprzez skierowanie przeglądarki internetowej na publiczny adres naszej maszyny zaporowej:

Zobaczysz dane wyjściowe:

Nginx Output2

Nasza konfiguracja przekierowania portów jest kompletna.

Dostosowanie stałego zestawu reguł

Po zakończeniu konfiguracji przekierowania portów zapiszemy to w naszym stałym zestawie reguł. Jeśli chcesz zachować komentarze w bieżącym zestawie reguł, użyj usługi iptables-persistent do zapisania swoich reguł:

Możesz go również otworzyć i edytować ręcznie, aby zachować komentarze w pliku:

Następnie skonfiguruj tabelę filter oraz tabelę nat aby dodać odpowiednio reguły łańcucha FORWARD oraz reguły ROUTING. Dostosowanie tabeli nat pozwoli nam dodać reguły PREROUTING oraz POSTROUTING jak pokazano w poniższym przykładzie:

Po dodaniu powyższych wartości zapisz i zamknij plik. Następnie wpisz poniższe polecenie, aby przetestować składnię swoich reguł:

Jeśli nie widzisz żadnych błędów, załaduj zestaw reguł:

Zweryfikujmy, czy nasz serwer WWW jest nadal dostępny za pośrednictwem publicznego adresu IP zapory sieciowej:

Podsumowanie

Po ukończeniu tego samouczka powinieneś swobodnie radzić sobie z przekierowywaniem portów na serwerze Linux za pomocą iptables. Możesz wykorzystać możliwości przekierowywania portów, aby ukryć topologię swojej sieci prywatnej, jednocześnie usprawniając ruch usług, tak aby swobodnie przepływał przez maszynę bramy sieciowej (zapory).

Ponieważ proces ten zależy bezpośrednio od bezpieczeństwa Twojej sieci i używanych portów, jest on bezpieczny. Istnieje jednak ryzyko, jeśli nie posiadasz zapory sieciowej ani zabezpieczeń VPN w swojej sieci. Dlatego zaleca się skonfigurowanie zapory sieciowej w sposób omówiony w tym samouczku. Mamy nadzieję, że ten przewodnik pomoże Ci zachować bezpieczeństwo w Internecie podczas korzystania z sieci prywatnej.

Aby dowiedzieć się więcej o innych rozwiązaniach zapór sieciowych, które możesz wdrożyć w swoim systemie, zapoznaj się z poniższymi materiałami z naszego bloga:

Miłej pracy z komputerem!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.