Articles

Linux iptables Firewall uproszczone przykłady

w poprzednim poście rozmawialiśmy o tym, jak zabezpieczyć serwer Linux za pomocą najlepszych praktyk hartowania . Niektórzy pytali mnie o sekcję firewall, która była krótkim wprowadzeniem do Firewalla iptables. Dzisiaj omówimy szczegółowo zaporę Linux iptables i jak zabezpieczyć ruch na serwerze za pomocą tej niesamowitej zapory.

spis treści

Iptables na CentOS 7

Jeśli używasz CentOS 7, zobaczysz, że firewalld zarządza iptables, więc jeśli chcesz wrócić do iptables, musisz zatrzymać i zamaskować firewalld.

$ systemctl stop firewalld$ systemctl mask firewalld

następnie zainstaluj usługę iptables i włącz ją:

$ yum install iptables-services$ systemctl enable iptables

następnie możesz ją uruchomić:

$ systemctl start iptables

jak działa Zapora Linuksowa

funkcje zapory Iptables są zbudowane na framework netfilter, który jest dostępny w jądrze Linuksa do filtrowania pakietów.

typy zapór

istnieją dwa typy zapór:

bezstanowa zapora samodzielnie przetwarza każdy pakiet, co oznacza, że nie widzi innych pakietów tego samego połączenia.

Stateful firewall ten rodzaj Firewalla dba o wszystkie pakiety przez niego przepuszczane, więc zna stan połączenia. Daje większą kontrolę nad ruchem.

Netfilter zawiera tabele. Tabele te zawierają łańcuchy, a łańcuchy zawierają poszczególne reguły.

Jeśli pakiet pasuje do dowolnej reguły, iptables zastosuje akcję reguły do tego pakietu.

akcje mogą być: Akceptuj, odrzucaj, Ignoruj lub przekazuj pakiet innym regułom w celu dalszego przetwarzania.

Netfilter może przetwarzać ruch przychodzący lub wychodzący przy użyciu adresu IP i numeru portu.

polecenie iptables zarządza i konfiguruje Netfilter.

zanim zaczniemy pisać polecenia Firewalla, musimy trochę zrozumieć strukturę Firewalla, abyśmy mogli łatwo pisać reguły Firewalla.

tabele zapory sieciowej iptables

Netfilter posiada trzy tabele, które mogą przenosić reguły przetwarzania.

tabela filtrów iptables jest główną tabelą do przetwarzania ruchu.

druga to tabela nat, która obsługuje reguły NAT.

trzecia tabela jest tabelą mangle do maglowania pakietów.

Łańcuchy tabel

każda tabela tabel wymienionych powyżej zawiera łańcuchy; łańcuchy te są kontenerem reguł iptables.

tabela filtrów zawiera łańcuchy FORWARD, INPUT i OUTPUT. Możesz utworzyć niestandardowy łańcuch, aby zapisać na nim swoje reguły.

Jeśli pakiet przychodzi do hosta, iptables przetworzy go według reguł łańcucha wejściowego.

Jeśli pakiet trafi do innego hosta, oznacza to, że reguły łańcucha wyjściowego będą go przetwarzać.

iptables używa łańcucha FORWARD do obsługi pakietów, które mają dostęp do hosta, ale są przeznaczone do innego hosta.

Polityka łańcucha

każdy łańcuch w tabeli filtrów ma zasadę. Zasada jest domyślną akcją, którą iptables podejmuje.

polityka może być DROP, REJECT, and ACCEPT.

Polityka Akceptuj pozwala pakietom przejść przez firewall. Polityka upuszczania upuszcza pakiet bez informowania klienta. Zasady odrzucania również upuszczają pakiet i informują nadawcę.

z punktu widzenia bezpieczeństwa, powinieneś porzucić wszystkie pakiety przychodzące do hosta i akceptować tylko te pakiety, które pochodzą z zaufanych źródeł.

dodawanie reguł iptables

możesz dodać nową regułę używając polecenia iptables w następujący sposób:

$ iptables -A INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

Podzielmy to polecenie Na części, abyśmy mogli zrozumieć wszystko na jego temat.

the-A oznacza, że dodajemy nową regułę. Domyślnie iptables dodaje wszystkie nowe reguły do tabeli filtrów, chyba że podasz inną tabelę.

flaga-i określa urządzenie, do którego zostanie zastosowana reguła. Jeśli nie określisz urządzenia, iptables zastosuje regułę do całego ruchu przychodzącego niezależnie od urządzeń.

flaga-p określa protokół pakietu, który chcesz przetworzyć, czyli w naszym przypadku TCP.

flaga –dport określa port docelowy, którym jest 80.

– d określa docelowy adres IP, czyli 1.2.3.4. Jeśli nie podano docelowego adresu IP, reguła będzie miała zastosowanie do całego ruchu przychodzącego na eth1, niezależnie od adresu IP.

– j określa akcję lub skok do wykonania. Tutaj akceptujemy Pakiety za pomocą polityki Akceptuj.

powyższa reguła pozwala na przychodzący ruch HTTP, który znajduje się na porcie 80.

a co z dopuszczeniem ruchu wychodzącego?

$ iptables -A OUTPUT -o eth1 -p tcp --sport 80 -j ACCEPT

możesz użyć flagi-a, aby dodać reguły do łańcucha wyjściowego.

flaga-o jest używana dla urządzenia używanego do ruchu wychodzącego.

flaga-sport określa port źródłowy.

Możesz użyć nazwy usługi, takiej jak http lub https zamiast numerycznego numeru portu w sport lub dport. Wszystkie nazwy usług znajdują się w pliku/etc / services.

powinieneś używać nazwy usługi zamiast numeru portu, co ułatwia odczyt reguł.

iptables rules order

iptables umieszcza nowe reguły na końcu łańcucha. Możesz dodać go do góry za pomocą opcji-I.

kolejność zasad ma znaczenie, jak teraz zobaczysz. Możesz wstawić swoje zasady dokładnie tam, gdzie chcesz, używając flagi I.

zapoznaj się z następującymi zasadami, aby zrozumieć, jak ważne jest zamawianie reguł:

$ iptables -I INPUT 3 -i eth1 -p udp -j ACCEPT$ iptables -I INPUT 4 -i eth1 -p udp --dport 80 -j DROP

pierwsza reguła akceptuje cały ruch UDP do eth1, a liczba 3 jest kolejnością reguł.

druga reguła zmniejsza ruch wchodzący na port 80.

pierwsza reguła zaakceptuje cały ruch, następnie druga reguła, która powinna opuścić ruch, nie zrobi nic, ponieważ iptables przekazuje ruch w pierwszej regule.

twoje zasady powinny mieć sens, ponieważ kolejność zasad w łańcuchu ma znaczenie.

lista reguł iptables

możesz wyświetlić reguły w łańcuchu używając flagi-L:

$ iptables -L INPUT

możesz pokazać numery linii reguł używając numerów –line:

$ iptables -L INPUT --line-numbers

lista pokazuje nazwy usług. Zamiast tego możesz pokazać numery portów używając opcji-n:

$ iptables -L INPUT -n --line-numbers

powyższa reguła przyspieszy Wyświetlanie listy, ponieważ zapobiega rozdzielczości DNS i wyszukiwaniu usług przez iptables.

Możesz wyświetlić listę wszystkich reguł dla wszystkich łańcuchów w ten sposób:

$ iptables -L -n --line-numbers

aby uzyskać liczbę pakietów przetwarzanych przez każdą regułę, możesz użyć flagi-v:

$ iptables -L -v

Możesz również zresetować liczniki do zera używając flagi-Z.

teraz możemy dodać nową regułę do dowolnego łańcucha, który chcemy, możemy wstawić regułę w określonej kolejności i możemy wymienić reguły dla dowolnego łańcucha lub wszystkich łańcuchów, ale co z usunięciem reguły?

usuwanie reguł

możesz usunąć regułę używając flagi-D:

$ iptables -D INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

To polecenie usunie regułę HTTP podaną wcześniej.

zanim usuniesz regułę, po prostu upewnij się, że jest ona określona listą, a następnie ją usuń.

możesz usunąć regułę używając numeru zamówienia zamiast pisać specyfikację reguły.

$ iptables -D INPUT 2

Możesz usunąć wszystkie reguły w określonym łańcuchu używając flagi-F, co oznacza, że wszystkie reguły są opróżniane.

$ iptables -F INPUT

Jeśli zapomnisz podać nazwę łańcucha podczas używania flagi-F, wszystkie reguły łańcucha zostaną usunięte.

zastępowanie reguł

możesz zastąpić istniejące reguły własną regułą używając flagi-R:

$ iptables -R INPUT 1 -i eth1 -p tcp --dport httpht -d 1.2.3.4 -j ACCEPT

To polecenie zastąpi pierwszą regułę w łańcuchu wejściowym wpisaną regułą.

Listing Specific Table

aby wyświetlić listę Specific table, Użyj flagi-t z nazwą tabeli w następujący sposób:

$ iptables -L -t nat

tutaj podajemy reguły w tabeli nat.

iptables Łańcuch zdefiniowany przez użytkownika

aby utworzyć łańcuch zdefiniowany przez użytkownika, Użyj flagi-n.

$ iptables -N MY_CHAIN

Możesz również zmienić jego nazwę za pomocą flagi-E.

$ iptables -E MY_CHAIN NEW_NAME

i możesz usunąć łańcuch zdefiniowany przez Użytkownika za pomocą flagi-X.

$ iptables -X MY_CHAIN

Jeśli nie podasz nazwy łańcucha podczas używania flagi-X, usunie on wszystkie łańcuchy zdefiniowane przez użytkownika. Nie można usunąć wbudowanych łańcuchów, takich jak wejście i wyjście.

przekierowanie do łańcucha zdefiniowanego przez użytkownika

Możesz przekierować pakiety do łańcucha zdefiniowanego przez użytkownika, takiego jak wbudowane łańcuchy, używając flagi-J.

$ iptables -A INPUT -p icmp -j MY_CHAIN

powyższa reguła przekieruje cały ruch ICMP do łańcucha MY_CHAIN.

ustawienie domyślnej Polityki Dla łańcuchów

możesz użyć flagi-P, aby ustawić domyślną politykę dla określonego łańcucha. Domyślną zasadą może być Akceptuj, Odrzuć i upuść.

$ iptables -P INPUT DROP

więc teraz łańcuch wejściowy upuści każdy pakiet, chyba że napiszesz regułę zezwalającą na ruch przychodzący.

syn Flooding

atakujący wysyła pakiety SYN tylko bez dokończenia uścisku dłoni TCP i w rezultacie host odbierający miałby wiele otwartych połączeń, a twój serwer stał się zbyt zajęty, aby odpowiadać na innych klientów.

możemy użyć modułu limit Firewalla iptables, aby chronić nas przed zalaniem SYN.

$ iptables -A INPUT -i eth1 -p tcp --syn -m limit --limit 10/second -j ACCEPT

tutaj określamy tylko 10 pakietów SYN na sekundę. Możesz dostosować tę wartość w zależności od potrzeb sieci.

Jeśli to spowoduje Dławienie sieci, możesz użyć plików cookie SYN.

SYN Cookies

w

/etc/sysctl.conf

plik i dodać tę linię:

net.ipv4.tcp_syncookies = 1

następnie zapisać i przeładować.

$ sysctl -p

upuść Pakiety o nieprawidłowym stanie

Pakiety o nieprawidłowym stanie są pakietami, które nie należą do żadnego połączenia i je upuszczasz.

$ iptables -A INPUT -m state --state INVALID -j DROP

Ta reguła usunie wszystkie przychodzące pakiety o nieprawidłowym stanie.

upuść rozdrobnione Pakiety

rozdrobnione pakiety są łamanymi kawałkami dużych, zniekształconych pakietów i powinieneś napisać reguły, aby je upuścić.

flaga-f mówi zaporze iptables, aby zaznaczała wszystkie fragmenty. Więc jeśli nie używasz iptables jako routera, możesz upuścić rozdrobnione Pakiety.

$ iptables -A INPUT -f -j DROP

Zapisz reguły iptables

Jeśli zrestartujesz serwer, stracisz wszystkie reguły, które napisałeś, więc jak je zachować?

Możesz zapisać wszystkie swoje reguły za pomocą polecenia iptables-save, jeśli używasz CentOS lub Red Hat.

iptables-save > /etc/sysconfig/iptables

na CentOS 7 możesz zapisać reguły w następujący sposób:

$ service iptables save

Możesz zapisać określoną tabelę, jak tylko tabela filtrów:

$ iptables-save -t filter

Możesz również użyć iptables-restore, aby przywrócić reguły.

w dystrybucjach opartych na Debianie możesz użyć pakietu iptables-persistent do zapisywania i przywracania reguł.

najpierw zainstaluj go:

$ apt-get install iptables-persistent

następnie możesz zapisać i przywrócić reguły:

$ netfilter-persistent save
$ netfilter-persistent reload

mam nadzieję, że zapora iptables będzie łatwa. Wracaj.

Dziękuję.

założyciel LikeGeeks. Pracuję jako administrator systemu Linux od 2010 roku. Jestem odpowiedzialny za utrzymanie, zabezpieczanie i rozwiązywanie problemów z serwerami Linux dla wielu klientów na całym świecie. Uwielbiam pisać skrypty shell i Python, aby zautomatyzować moją pracę.