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ę.
Leave a Reply