Powrót do bloga

Konfigurowanie zapory sieciowej Iptables: Podstawowe reguły i polecenia

Konfigurowanie zapory sieciowej Iptables: Podstawowe reguły i polecenia

Wprowadzenie

Iptables​ to uruchamiane z wiersza poleceń ​narzędzie zapory sieciowej ​. Oznacza to, że jest to oprogramowanie, które pozwala skonfigurować zaporę sieciową w systemie. Zazwyczaj jest ono domyślnie dostępne w systemach ​Linux​. W tym poradniku ​omówimy niektóre z typowych reguł i poleceń powiązanych z zaporą iptables​. Za każdym razem, gdy jakieś połączenie próbuje nawiązać się z Twoim systemem, zapora sieciowa odwoła się do tych reguł, aby określić, jaki powinien być kolejny krok.

Polecenia Iptables

Ten poradnik przedstawi niektóre z najważniejszych poleceń iptables. Aby z niego skorzystać, musisz mieć podstawowe pojęcie o tym, czym jest iptables i jak działa. Pomoże Ci to lepiej zrozumieć reguły, które wdrażasz za pomocą poniższych poleceń. Pamiętaj, że każde z podanych niżej poleceń może być używane samodzielnie. Z drugiej strony, możesz je również dowolnie łączyć i dopasowywać do swoich specyficznych potrzeb.

O czym należy pamiętać

Zanim przejdziesz dalej, oto kilka rzeczy, o których powinieneś pamiętać:

  • Kolejność reguł w iptables ma znaczenie.
  • Aby dodać nową regułę na końcu łańcucha, Twoje polecenie ​iptables będzie musiało użyć opcji ​-A.​​
  • Jeśli chcesz dodać regułę w innej pozycji, musisz użyć opcji ​-I . Opcja ta umożliwia określenie dokładnego położenia reguły. Jeśli chcesz umieścić regułę na początku łańcucha, po prostu nie podawaj jej numeru.
  • Aby zapewnić sobie stały dostęp do serwera, domyślnie zablokuj ruch SSH na porcie 22.
  • W przypadku, gdy tego nie zrobisz i stracisz dostęp do serwera, możesz połączyć się ponownie za pomocą konsoli. Zezwól na ruch SSH, aby zmienić ustawienia zapory.
  • Jeśli kiedykolwiek zechcesz przejrzeć aktualnie obowiązujący zestaw reguł, użyj poleceń sudo iptables -S​ oraz ​ ​sudo iptables -L.

Ponadto posiadamy ​szczegółowy poradnik na temat wyświetlania i usuwania reguł zapory iptables​, który pomoże Ci optymalnie wykorzystać zaporę iptables.

Skoro kwestie wstępne mamy już za sobą, przyjrzyjmy się niektórym z ​typowych poleceń iptables​:

Jak zapisać reguły

Zaczniemy od ustalenia, jak można zapisać reguły. Należy pamiętać, że reguły iptables są ulotne. Oznacza to, że zostaną utracone po ponownym uruchomieniu systemu – chyba że je zapiszesz. Oto jak możesz ręcznie zapisać swoje nowe reguły na serwerach ​Ubuntu​ oraz ​CentOS​ odpowiednio:

  • Ubuntu

Najprostszym sposobem na zapisanie nowych reguł na serwerze Ubuntu jest użycie pakietu iptables-persistent​. Możesz łatwo ​utworzyć serwer Ubuntu, postępując zgodnie z tym poradnikiem​.

Pierwszym krokiem do zapisania nowych reguł iptables jest instalacja pakietu iptables-persistent ​za pomocą apt-get. Oto jak możesz go zainstalować:

Iptables Firewall 1

Podczas procesu instalacji musisz zdecydować, czy chcesz zapisać aktualnie obowiązujące reguły zapory. Aby zamiast tego zaktualizować reguły i zapisać zmiany, użyj tego polecenia:

Iptables Firewall 2

Powyższe polecenie zazwyczaj działa w wersjach Ubuntu nowszych niż 16.04. Jeśli używasz starszej wersji, użyj zamiast tego tego polecenia:

  • CentOS

Możesz skonfigurować zaporę sieciową za pomocą iptables w systemie CentOS 6 lub starszych wersjach. CentOS 7 używa zamiast tego FirewallD. Postępuj zgodnie z tym poradnikiem, aby dowiedzieć się, jak skonfigurować FirewallD w systemie CentOS 7.

Możesz zapisać swoje nowe reguły w systemie CentOS za pomocą skryptu inicjującego ​iptables. Zobacz następujące polecenie:

To polecenie zapisze nowe reguły dla zapory iptables. Aktualnie aktywne reguły iptables można znaleźć w /etc/sysconfig/iptables​ pliku.

Przydatne polecenia Iptables

Przejdźmy teraz do kilku bardzo przydatnych poleceń zapory iptables, których możesz potrzebować na swoim serwerze.

  • Połączenia Loopback

Najpierw przyjrzymy się, jak można zezwolić na połączenia loopback. Twój system używa interfejsu loopback do wysyłania połączeń do samego siebie. Na przykład wyobraź sobie, że uruchomiłeś to polecenie: ​ping localhost​ lub ​ping 127.0.0.1​. Twój serwer użyje interfejsu loopback, czyli lo​, aby w zasadzie pingować samego siebie. W innych przypadkach serwer może go użyć, jeśli serwer aplikacji jest skonfigurowany do łączenia się z adresem „localhost”.

Niezależnie od sytuacji, musisz upewnić się, że zapora sieciowa iptables nie blokuje tych połączeń. Dlatego musisz zezwolić na połączenia loopback, aby te funkcje mogły działać.

Oto polecenia, które należy uruchomić, aby zezwolić na cały ruch przychodzący na interfejs loopback:

Iptables Firewall 3

  • Nawiązane i powiązane połączenia przychodzące

Innym rodzajem połączenia, na które może być konieczne zezwolenie, jest połączenie wychodzące. Aby upewnić się, że serwer odpowiednio odbiera i wysyła zarówno ruch przychodzący, jak i wychodzący, należy zezwolić na nawiązane i powiązane połączenia przychodzące. Pozwala to serwerowi na wysyłanie ruchu zwrotnego do połączeń wychodzących. Użyj tego polecenia, aby zezwolić na nawiązane, jak również powiązane połączenia przychodzące:

Established and Related Incoming Connections

  • Nawiązane połączenia wychodzące

Serwer zazwyczaj wysyła odpowiedzi na połączenia przychodzące w postaci ruchu wychodzącego nawiązanych połączeń. Aby na nie zezwolić, użyj następującego polecenia:

Established Outgoing Connections

  • Z wewnętrznego na zewnętrzny

Czasami może zajść potrzeba skonfigurowania zapory sieciowej w celu zapewnienia dostępu z sieci wewnętrznej do zewnętrznej. Domyślnie siecią zewnętrzną powinna być ​eth0​ i ​eth1 powinna być Twoją siecią wewnętrzną. W takim przypadku użyj tego polecenia, aby włączyć dostęp:

Internal to External

  • Odrzucanie nieprawidłowych pakietów

Czasami niektóre pakiety ruchu sieciowego mogą zostać oznaczone jako nieprawidłowe. W większości przypadków można po prostu odrzucić te nieprawidłowe pakiety. Aby to zrobić, użyj następującego polecenia:

Dropping Invalid Packets

Reguły blokowania adresów IP

Następnie przyjrzymy się kilku poleceniom, których można użyć do blokowania połączeń pochodzących z określonych adresów IP. Aby ułatwić sprawę, w naszych poleceniach użyjemy adresu IP ​15.15.15.51 jako przykładu. Możesz zastąpić tę wartość swoim konkretnym adresem IP.

W ​-s 15.15.15.51, ​​-s​ oznacza źródło. W związku z tym polecenie określa źródłowy adres IP „15.15.15.51”. Podobnie można określić źródłowy adres IP w dowolnej regule zapory sieciowej. Dotyczy to zarówno reguły zezwalania, jak i odrzucania.

Jeśli chcesz odrzucić połączenie, użyjesz REJECT zamiast DROP w poleceniu, w ten sposób:

W rezultacie Twój serwer zwróci błąd „connection refused” (połączenie odrzucone) za każdym razem, gdy ten konkretny adres IP wyśle żądanie połączenia.

  • Blokowanie połączeń z określonym interfejsem

Możliwe jest zablokowanie wszystkich żądań połączeń przychodzących z określonego adresu IP do określonego interfejsu sieciowego. W naszym przykładzie adres IP to 15.15.15.51​ a interfejsem sieciowym jest ​eth0​. Użyj tego polecenia, aby zablokować połączenia:

Świetną rzeczą jest to, że interfejs sieciowy można określić w dowolnej regule. Oznacza to, że każda reguła może być zastosowana i ograniczona tylko do określonej sieci.

Reguły dla usługi: SSH

SSH ​staje się istotne, jeśli korzystasz z serwera w chmurze. W takim przypadku musisz zezwolić na przychodzące połączenia SSH na porcie 22. Włączenie tych połączeń umożliwia łączenie się z serwerem i zarządzanie nim. Tutaj omówimy szereg typowych reguł dotyczących SSH.

  • Zezwalanie na wszystkie przychodzące połączenia SSH

Następujące polecenia włączają wszystkie przychodzące połączenia SSH:

W powyższym zestawie musisz użyć drugiego polecenia tylko wtedy, gdy polityka ​OUTPUT​ nie jest ustawiona na ​ACCEPT​. Zezwala ona na ruch wychodzący nawiązanych połączeń SSH.

  • Zezwalanie na przychodzące połączenia SSH z podsieci

Poprzednie polecenie zezwala na wszystkie połączenia przychodzące. Możesz użyć następujących poleceń, aby zezwolić na połączenia przychodzące tylko z określonego adresu IP lub podsieci. Załóżmy, że chcesz zezwolić na połączenia przychodzące tylko z ​15.15.15.0/24​ podsieci:

Podobnie jak poprzednio, musisz użyć drugiego polecenia tylko wtedy, gdy polityka ​OUTPUT​ nie jest ustawiona na ​ACCEPT​. Zezwala ona na ruch wychodzący nawiązanych połączeń SSH.

  • Zezwalanie na wychodzące połączenia SSH

Użyj tych poleceń, jeśli polityka zapory sieciowej ​OUTPUT​ nie jest ustawiona na ​ACCEPT​ i chcesz włączyć połączenia SSH. Pozwoli to Twojemu serwerowi na inicjowanie połączeń SSH do innych serwerów:

Aby dowiedzieć się więcej o korzystaniu z SSH na serwerach chmurowych, zapoznaj się z naszymi poradnikami dotyczącymi ​ tego, jak używać SSH do łączenia się z serwerem zdalnym w systemie Ubuntu ​oraz konfiguracji serwera Linux do korzystania z uwierzytelniania opartego na kluczach SSH​.

  • Zezwalanie na przychodzące połączenia Rsync z podsieci

Rsync​ to funkcja, której można używać do przesyłania plików z jednego systemu do drugiego. Działa na porcie 873. Jeśli więc chcesz zezwolić na przychodzące połączenia Rsync na porcie 873 z określonego adresu IP lub podsieci, użyj następujących poleceń:

Jak widać, określiliśmy źródłowy adres IP wraz z portem docelowym. Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej ​OUTPUT​ nie jest ustawiona na ​ACCEPT​. Zezwala ona na ruch wychodzący nawiązanych połączeń Rsync. Ponadto możesz zapoznać się z naszym ​poradnikiem dotyczącym korzystania z Rsync do synchronizacji katalogów lokalnych i zdalnych na serwerze VPS​.

Reguły dla usługi: Serwer WWW

Połączenia HTTP są zazwyczaj odbierane na porcie 80. Podobnie HTTPS zwykle trafia na port 443. Serwery WWW, takie jak ​Apache​ i ​Nginx​ nasłuchują na tych portach, aby przechwytywać żądania połączeń. Czasami domyślne ustawienia mogą powodować, że serwer odrzuca lub porzuca te żądania przychodzące. Dlatego konieczne będzie ustawienie nowych reguł zezwalających na ten ruch.

  • Zezwalanie na wszystkie przychodzące połączenia HTTP

Możesz zezwolić na wszystkie przychodzące połączenia HTTP na porcie 80 za pomocą następujących poleceń:

Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej ​OUTPUT​ nie jest ustawiona na ACCEPT​. Zezwala ona na ruch wychodzący nawiązanych połączeń HTTP.

  • Zezwalanie na wszystkie przychodzące połączenia HTTPS

Użyj tych poleceń, aby zezwolić na wszystkie przychodzące żądania połączeń HTTPS na porcie 443:

Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej iptables ​OUTPUT​ nie jest ustawiona na ACCEPT​. Zezwala ono na ruch wychodzący nawiązanych połączeń HTTP.

  • Zezwalanie na wszystkie przychodzące połączenia HTTP i HTTPS

Możesz użyć modułu multiport, jeśli chcesz zezwolić na ruch zarówno z portów HTTP, jak i HTTPS. W takim przypadku użyj następujących poleceń:

Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej ​OUTPUT​ nie jest ustawiona na ACCEPT​. Zezwala ono na ruch wychodzący nawiązanych połączeń HTTP i HTTPS.

Reguły dla usługi: MySQL

Czasami klient może używać zdalnego serwera, aby uzyskać dostęp do Twojego serwera baz danych ​MySQL​. W takim przypadku musisz ręcznie zezwolić na ruch przychodzący z odpowiedniego portu. MySQL nasłuchuje żądań połączeń na porcie 3306.

  • Zezwalanie na przychodzące połączenia MySQL z podsieci

Musisz określić źródło, jeśli chcesz zezwolić na połączenia MySQL z określonej podsieci. W naszym przykładzie zezwolimy na ruch przychodzący z podsieci 15.15.15.0/24​ za pomocą tych poleceń:

Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej ​OUTPUT​ nie jest ustawiona na ACCEPT​. Zezwala ono na ruch wychodzący nawiązanych połączeń MySQL.

  • Włączanie połączeń MySQL do interfejsu

Jeśli chcesz również określić, który interfejs sieciowy powinien odbierać połączenia MySQL, możesz użyć tych poleceń:

W tym przypadku zezwalamy na połączenia do prywatnego interfejsu sieciowego o nazwie eth1​.

Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej ​OUTPUT​ nie jest ustawiona na ACCEPT​. Zezwala ono na ruch wychodzący nawiązanych połączeń MySQL.

Możesz skorzystać z naszego ​poradnika ułatwiającego konfigurację MySQL na serwerze​.

Reguły dla usługi: PostgreSQL

Twój klient może używać zdalnego serwera, aby uzyskać dostęp do Twojego serwera baz danych ​PostgreSQL​. W takim przypadku musisz zezwolić na te połączenia przychodzące. Połączenia te będą odbywać się przez port 5432.

  • Zezwalanie na przychodzące połączenia PostgreSQL z podsieci

Możesz użyć następujących poleceń, aby zezwolić na przychodzące połączenia PostgreSQL z określonej podsieci lub adresu IP. Jak widać, określiliśmy źródło, którym jest ​15.15.15.0/24​ podsieć.

Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej ​OUTPUT​ nie jest ustawiona na ACCEPT​. Zezwala na ruch wychodzący nawiązanych połączeń PostgreSQL.

  • Włączanie połączeń PostgreSQL dla określonego interfejsu

Jeśli chcesz zezwolić na połączenia PostgreSQL tylko do określonego interfejsu sieciowego, użyj następujących poleceń:

W tym przypadku zezwalamy na połączenia do prywatnego interfejsu sieciowego o nazwie eth1​. Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej ​OUTPUT​ nie jest ustawiona na ​ACCEPT​. Zezwala na ruch wychodzący nawiązanych połączeń PostgreSQL.

Postępuj zgodnie z tym ​poradnikiem, aby zainstalować PostgreSQL na swoim serwerze Ubuntu​.

Reguły dla usługi: Poczta

Może być również konieczne skonfigurowanie zapory sieciowej zgodnie z używanym serwerem pocztowym. Na przykład ​Sendmail​ i ​Postfix​ mogą odbierać połączenia na wielu różnych portach. Zależy to od protokołu używanego do dostarczania poczty. Aby blokować i zezwalać na określone połączenia pocztowe, musisz wiedzieć, jakiego protokołu używasz.

  • Zezwalanie na przychodzące połączenia SMTP

Połączenia SMTP zazwyczaj przychodzą na port 25. Chociaż SMTP powszechnie używa również portu 587 dla poczty wychodzącej. Aby zezwolić serwerowi na odpowiadanie na te połączenia, użyj następujących poleceń:

Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej ​OUTPUT​ nie jest ustawiona na ACCEPT​. Zezwala na ruch wychodzący nawiązanych połączeń SMTP.

  • Zezwalanie na wszystkie przychodzące połączenia IMAP

Aby zezwolić serwerowi na odpowiadanie na wszystkie przychodzące połączenia IMAP na porcie 143, po prostu wpisz i uruchom to:​

Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej ​OUTPUT​ nie jest ustawiona na ACCEPT​. Zezwala na ruch wychodzący nawiązanych połączeń IMAP.

  • Zezwalanie na wszystkie przychodzące połączenia IMAPS

Użyj tych poleceń, aby zezwolić serwerowi na odpowiadanie na połączenia IMAPS na porcie 993:

Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej ​OUTPUT​ nie jest ustawiona na ACCEPT​. Zezwala na ruch wychodzący nawiązanych połączeń IMAPS.

  • Zezwalanie na wszystkie przychodzące połączenia POP3

Połączenia te będą przychodzić na port 993. Jeśli chcesz, aby Twój serwer odpowiadał na żądania połączeń IMAPS, użyj następujących poleceń:

Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej ​OUTPUT​ nie jest ustawiona na ACCEPT​. Zezwala na ruch wychodzący nawiązanych połączeń POP3.

  • Zezwalanie na wszystkie przychodzące połączenia POP3S

Użyj tych poleceń, aby zezwolić serwerowi na nawiązywanie połączeń z żądaniami POP3S przychodzącymi na porcie 995:

Drugiego polecenia użyjesz tylko wtedy, gdy polityka zapory sieciowej ​OUTPUT nie jest ustawiona na ACCEPT​. Zezwala ono na ruch wychodzący nawiązanych połączeń POP3S.

  • Jak zablokować wychodzącą pocztę SMTP

Zamiast zezwalać na połączenia przychodzące i włączać odpowiedź serwera, możesz chcieć całkowicie zablokować pocztę wychodzącą. Możesz zablokować całą wychodzącą pocztę SMTP na porcie 25 za pomocą tego polecenia:

W rezultacie cały ruch wychodzący na porcie 25 zostanie odrzucony przez zaporę iptables. Możesz użyć tej samej struktury poleceń, jeśli chcesz odrzucić jakąkolwiek inną usługę. Wszystko, co musisz zrobić, to zastąpić port 25 odpowiednim numerem portu.

Podsumowanie

Ten przewodnik obejmuje najważniejsze polecenia zapory iptables. Dostarcza on niezbędnych narzędzi potrzebnych do skutecznej konfiguracji zapory iptables. Pamiętaj, że nie ma jednego uniwersalnego rozwiązania. Polecenia te są niezwykle elastyczne. Oznacza to, że możesz ich używać w dowolny sposób, który najlepiej odpowiada Tobie i Twoim wymaganiom.

Miłego korzystania z komputera!

author

Manpreet Singh

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.