Reguła iptables zezwala na cały wychodzący lokalnie ruch pochodzący?

11

Zastanawiałem się, czy ktoś może mi pomóc z następującą zasadą iptables:

Chcielibyśmy zezwolić na DOWOLNY i WSZYSTKO lokalnie inicjujący (jak na serwerze działającym iptables) ruch.

DNS, HTTP itp. ... wszystko to. Każde połączenie zainicjowane przez serwer z uruchomionym programem iptables powinno być dozwolone.

Obecnie używamy w zasadzie domyślnej polityki WYJŚCIA, AKCEPTUJĘ. Czy to jest poprawne? Wejścia są blokowane, więc zakładam, że oznacza to, że połączenia (oprócz tych, na które zezwalamy) nie mogą zostać uruchomione, ponieważ zostaną zerwane, zanim nasza strona będzie mogła zastosować politykę WYDAJNOŚCI?

Przepraszam, moje umiejętności iptables są słabe;)

Uprzejmie dziękuję.

anonimowy-jeden
źródło

Odpowiedzi:

26

Aby to zrobić, potrzebujesz dwóch zasad:

iptables -I OUTPUT -o eth0 -d 0.0.0.0/0 -j ACCEPT
iptables -I INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Kilka notatek.

  • Istniejące reguły, które możesz mieć, już to robią, ale wyglądają inaczej.
  • To służy -Ido wymuszenia, aby te reguły były pierwsze. iptablesreguły są oceniane odgórnie.
  • -oI -iflagi na myśli „out” i „w” odpowiednio. Zastąp eth0poprawną nazwą interfejsu Ethernet.
bahamat
źródło
oboje :) nie wspomniałem o drugim, ponieważ, jak powiedziałem ... moje umiejętności w iptables to słaby sos. dzięki za wyjaśnienie :)
anonimowo-jeden
2
-d 0.0.0.0/0jest zbędny i nie jest potrzebny.
zapstar
Świetna odpowiedź. Ale teraz mogę pingować serwer i nie rozumiem dlaczego. Możesz wytłumaczyć?
Daniel
@Daniel Ponieważ jeśli zezwalasz tylko na ruch wychodzący, odpowiedź ping zostanie odrzucona przez filtr pakietów, gdy dotrze do twojego hosta. Aby temu zapobiec, musisz również zezwolić na ruch przychodzący powiązany z tą samą sesją lub związany z ruchem wychodzącym. Innymi słowy, ponieważ odpowiedź ping jest powiązana z żądaniem ping, powinna być dozwolona. Jeśli przychodzące żądanie ping nie zarejestruje żadnego wychodzącego polecenia ping w tabeli sesji, pakiet przychodzący zostanie odrzucony. Mam nadzieję, że to ma sens!
bahamat
@bahamat: Po ponownej próbie stwierdziłem, że muszę wyraźnie zezwolić na ruch icmp. Mówiłem o możliwości pingowania serwera, gdzie zaimplementowałem powyższe reguły. Nie mogę tego odtworzyć btw., Może gdzieś popełniłem błąd. W każdym razie dzięki.
Daniel
0

Obecnie używamy w zasadzie domyślnej polityki WYJŚCIA, AKCEPTUJĘ.

To wystarcza dla WYJŚCIA, ponieważ Netfilter nie potrzebuje specjalnych reguł, aby rozpocząć śledzenie połączeń stanowych.

Ale jeśli chcesz odfiltrować ruch przychodzący zgodnie z zasadą „ domyślnego odmowy ”, możesz to zrobić przełączając INPUT-chain na DROP:iptables -P INPUT DROP

Potem wszystko będzie ustawione z tylko 2 zasadami :

iptables -A INPUT -j ACCEPT -i lo
iptables -A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED

Zwróć uwagę na regułę zezwalającą na ruch wejściowy na interfejsie sprzężenia zwrotnego - jak zauważyłem w swoim blogu „ Minimalna zapora ogniowa dla użytkownika końcowego ”, chyba że wyraźnie zezwolono, ruch sprzężenia zwrotnego nie będzie obsługiwany przez „sprawdzone” sprawdzanie stanu, w porównaniu ze zwrotem ruch na, powiedzmy, eth0.

Aby mieć pewność, że ten minimalny zestaw reguł jest ładowany „ tak jak jest ” bez ingerencji w reguły, które już mogą tam być, wygodnie jest skorzystać z iptables-restoresesji SHELL:

lptables-restore <<__EOF__
-P INPUT DROP
-A INPUT -j ACCEPT -i lo
-A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED
__EOF__

Zanim to zrobisz, upewnij się, że nie przerwiesz własnego połączenia sieciowego 1 , chociaż już otwarte sesje SSH powinny kontynuować normalne działanie, próby otwarcia nowych nie będą działać.

__

  1. Oczywiście możesz dodać inne reguły, aby umożliwić takie połączenia. Może to być tak proste, jak po prostu -A INPUT -j ACCEPT -p tcp --dport 22- nie trzeba -m statetutaj majstrować . Nie zapomnij też naprawić lptables-restoretego iptables-restoreprzed wypróbowaniem;)
poige
źródło