Czy możesz polecić dobre wprowadzenie do iptables? [Zamknięte]

15

Muszę skonfigurować zaporę ogniową na serwerze Linux (całe moje wcześniejsze doświadczenie dotyczy systemu Windows). Moje reguły mają być dość proste - zabraniaj wszystkich, zezwalaj na niektóre porty ze wszystkimi, zezwalaj na niektóre porty dla określonych podsieci IP, podczas gdy sieć jest mała, ale złożona (każdy host ma adresy IP w co najmniej 2 192 1968 ... sieci, każdy może połącz wiele różnych sposobów). Myślę, że używanie owijaczy iptables może nadmiernie komplikować system, wprowadzając logicznie wiele niepotrzebnych elementów i lepiej byłoby zachować prostotę i używać iptables bezpośrednio.

Czy możesz polecić dobre szybkie wprowadzenie na temat pisania reguł iptables?

Ivan
źródło

Odpowiedzi:

26

Odnośniki do oficjalnej i zalecanej dokumentacji znajdują się na stronie internetowej Netfilter.

To nie jest nowy przedmiot, zasoby są nieograniczone .

Większość podstawowych poleceń jest dość intuicyjna i może łatwo odnosić się do strony podręcznika .

netfilter, który jest technologią poziomu jądra, która umożliwia filtrowanie pakietów, jest dość zaawansowany. Istnieją dodatkowe tabele, które mogą zniekształcać pakiety, tłumaczyć pakiety i w inny sposób wpływać na routing. iptablesNarzędzie jest Userland narzędzie do interakcji z netfiltra. Jeśli chcesz dowiedzieć się o zaawansowanej funkcjonalności, sugeruję zapoznać się z wyżej wymienioną dokumentacją. Aby zapoznać się z podstawowymi funkcjami, przeczytaj dalej.

Aby wyświetlić listę wszystkich istniejących reguł:

iptables -L -n

-n zapobiega rozwiązaniu ips przez iptables, co zapewnia szybsze wyjście.

Domyślna tabela to filtertabela, która służy do zastosowania podstawowych reguł zapory do trzech łańcuchów. Trzy domyślne łańcuchy w filtertabeli są INPUT, OUTPUTi FORWARD.

Łańcuchy są w dużej mierze oczywiste. Łańcuch INPUT wpływa na przychodzące pakiety, łańcuch OUTPUT wpływa na lokalnie generowane pakiety, a na koniec DO PRZODU dla wszystkich pakietów, które są kierowane przez system.

Wśród celów, które możesz określić, możesz tworzyć DROPpakiety, co oznacza po prostu ignorować i nie odpowiadać. Możesz REJECTpakiety, w których odpowiedź icmp byłaby wysyłana do źródła odmowy. Wreszcie możesz ACCEPTje zrobić , co pozwala pakietom kontynuować routing.

Często z zewnętrzną zaporą ogniową domyślny wybór będzie DROPprzeciwny REJECT, ponieważ zmniejsza widoczny zasięg sieci w Internecie. Na przykład adres IP, który w przeciwnym razie ogranicza usługi do określonego hosta, byłby mniej widoczny DROP.

Uwaga: -Aoznacza dopisać na końcu łańcucha. Jeśli chcesz wstawić na górę, możesz użyć -I. Wszystkie reguły są przetwarzane od góry do dołu. -Ddo usunięcia.

Do DROPprzychodzącego pakietu przychodzącego z 192.168.235.235:

iptables -A INPUT -s 192.168.235.235 -j DROP

Skacze do DROPcelu dla wszystkich protokołów pochodzących z tego adresu IP.

Akceptować:

iptables -A INPUT -s 192.168.235.235 -j ACCEPT

Aby uniemożliwić dostęp do tego adresu IP z lokalnego serwera lub sieci:

iptables -A OUTPUT -d 192.168.235.235 -j DROP

Możesz określić -pprotokół, -sźródło pakietu, miejsce -ddocelowe pakietu, port docelowy, port --dportźródłowy --sporti wiele innych flag, które będą miały wpływ na sposób traktowania pakietów przez regułę.

Jeśli twoją domyślną INPUTzasadą było DROPi chcesz zezwolić wszystkim w 192.168.123.0/24podsieci na dostęp do SSH na twoim serwerze, oto przykład:

iptables -A INPUT -s 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT

Zgadza się, możesz również użyć notacji CIDR !

Ogólnie rzecz biorąc, najlepsza domyślna polityka dotyczy DROPwszystkich łańcuchów. Każdy łańcuch ma domyślne zasady określone przez -Pflagę. Nawet jeśli masz ustawione domyślne zasady DROP, nadal zaleca się, aby ostatni wpis w łańcuchu DROPrównież był.

Na przykład, aby zmienić DROPzasadę dla łańcuchów INPUT, FORWARD i OUTPUT:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

Bądź ostrożny , jeśli określisz domyślną politykę DROP dla INPUT na zdalnym systemie bez uprzedniego umożliwienia sobie dostępu SSH, możesz uniemożliwić sobie dostęp do systemu. W systemie zdalnym można określić tymczasową tabelę crontab, aby opróżniać wszystkie reguły co 5 minut jako zabezpieczenie przed awarią.

Aby usunąć wszystkie reguły i zezwolić na cały ruch:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -X
iptables -F

Uwaga: -Xusuwa wszystkie utworzone łańcuchy. -Fopróżnia wszystkie zasady.

Istnieją natywne narzędzia do zapisywania i przywracania reguł. W szczególności iptables-savei iptables-restore. Większość współczesnych dystrybucji Linuksa ma savei restoredziała w pliku inicjującym iptables dostarczonym z systemem.

Istnieją inne sprawdzone metody zapory, takie jak upuszczanie zniekształconych pakietów i inny rodzaj niepożądanego ruchu. Jest to jedna zaleta korzystania z narzędzia frontonu, takiego jak Shorewall , ponieważ domyślnie implementuje wiele z tych zasad. Niemniej jednak zgadzam się z twoim podejściem i wolę również bezpośrednio przestrzegać własnych zasad, a te same najlepsze praktyki można wdrożyć bez interfejsu użytkownika.

Warner
źródło
2
Właśnie natknąłem się na tę odpowiedź, szukając tutaj losowych rzeczy na iptable (przeszukuję SF / SO przed Google!), A ta bardzo szczegółowa odpowiedź wydaje się zasługiwać na więcej głosów, więc dałem jej trochę!
Andrew Barber
+1 fajna odpowiedź. Wspomniałbym również o Debianie WIKI .
michal.kreuzman,
1

Ostatnio znalazłem https://help.ubuntu.com/community/IptablesHowTo pomocne. Nie wydaje mi się, żeby cokolwiek tam było, szczególnie dla Ubuntu.

gbroiles
źródło
Korzystam z Arch na moim laptopie, ale Ubuntu Lucid Server jest dokładnie tym, co należy skonfigurować. Może się to przydać, jeśli nie jest przestarzałe (o ile widzę, dotyczy Ubuntu 8.04).
Ivan