iptables: zezwala na określone IP i blokuje wszystkie inne połączenia


26

Jak zezwolić niektórym systemom i zablokować wszystkie inne połączenia w iptables?


Jak pokazuje Gilles, koncepcja wygląda następująco: Dodaj reguły AKCEPTUJ dla każdej konkretnej rzeczy, na którą chcesz zezwolić, czy to na podstawie źródłowego adresu IP, czy innych kwalifikacji, a następnie ustaw domyślną zasadę na ODRZUĆ.
Caleb

Odpowiedzi:


27

Dawno temu napisałem post na blogu na temat podstawowych zasad Iptables dla użytkownika pulpitu i prawdopodobnie powinieneś go przeczytać, a także jego link do artykułu na temat projektowania stanowej zapory ogniowej . Ale przed jądrem 2.6.39 (który obejmuje ipseti możesz użyć go do białej listy adresów IP, jeśli masz więcej niż 10 do białej listy (gdzie 10 jest dowolne)).

Najpierw obsłuż stan, który wiemy, że chcemy zaakceptować lub upuścić, oraz interfejsy.

iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept

Jeśli chcesz po prostu zezwolić tylko przez IP, bez stanu

iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

prawdopodobnie będziesz mieć z tym problemy, i sugeruję użycie stanu, aby ułatwić ci życie. Na przykład niedozwolenie -i loi -o loz pewnością spowoduje problemy w niektórych aplikacjach.


4
Zamiast DROP powinieneś ODRZUĆ niechciane pakiety, ponieważ znacznie ułatwia to diagnozowanie problemów i zapobiega przekroczeniu limitu czasu. Zobacz Odrzucanie pakietów IP z błędem ICMP, czy po prostu je upuścić?
Gilles „SO- przestań być zły”

Próbowałem obu konfiguracji i KeePass2 się nie uruchamia, jakiś pomysł? Również jeśli to zrobię iptables -F, aby oczyścić wszystkie zasady, nie mogę nawet pingować Ubuntu.com
Paweł Cioch

@PawelCioch dlaczego KeePass2 i tak potrzebuje połączenia z Internetem?
Alex

@Alex do przechowywania pliku DB w zdalnej lokalizacji, to chcę pojedynczy adres IP. Ale wszystko rozumiem, konfiguracja jest bardziej skomplikowana niż przykład tutaj
Paweł Cioch

10

Oto (niesprawdzony!) Przykład, który blokuje tylko połączenia przychodzące . Połączenia za pośrednictwem interfejsu pętli zwrotnej, pochodzące z 192.168.3.x, ICMP lub portu SSH są dozwolone. Wszystkie pozostałe połączenia są odrzucane.

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT

@Gilles, aby poprawnie używać stanów POWIĄZANE i USTALONE, musisz dopasować początkowy pakiet jako stan NOWY. low powyższym przykładzie jest wykluczone z dopasowywania stanu i zawsze dozwolone.
penguin359

@ penguin359: Czy mógłbyś wyjaśnić, dlaczego NOWOŚĆ jest potrzebna? Jestem daleki od eksperta od iptables, częściowo skopiowałem te reguły z mojego domowego routera, który nie pasuje do NOWEGO. O ile rozumiem, wszystko, co pozostało po pierwszej regule, to NOWE (lub NIEŚLEDZONE) pakiety. (Jeśli jestem zbyt daleko od celu i nie możesz tego wyjaśnić w komentarzu, opublikuj swoje wersje z wyjaśnieniami jako odpowiedź, a ja usunę moje.)
SO Gillesa - przestań być zły ”

@Gilles Zawsze upuszczam stan NIEPRAWIDŁOWY przed zaakceptowaniem czegokolwiek ... co powoduje, że wszystko, co NIE jest NIEPRAWIDŁOWE, POWIĄZANE, USTALONE, musi być stanem NOWYM. Ale nie znam żadnego powodu, że wszystko inne musi określać NOWOŚĆ. Teoretycznie jednak, jeśli nie obsługujesz INVALID i nie określisz NEW, możesz ostatecznie zaakceptować INVALID. Ale po obsłużeniu INVALID wydaje mi się, że sprawdzanie stanu NEW dla każdej reguły wymaga po prostu więcej przetwarzania pakietu.
ksenoterracid

@Gilles również domyślna polityka odrzucania jest zła, ponieważ wysyła pakiet odrzucający dla każdego odebranego pakietu, co powoduje atak DOS.
ksenoterracid

@xenoterracide: Dobra uwaga. Czy REJECT powinien być kiedykolwiek używany? Zadałem pytanie: Odrzucić pakiety IP z błędem ICMP, czy po prostu je upuścić?
Gilles 'SO - przestań być zły'

7

Poniższa reguła zezwala tylko na twoje IP i blokuje wszystkie inne IP na porcie 22 lub ssh. Przed odłączeniem przetestuj nowy terminal.

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP

3
dziękuję za zwięzłą odpowiedź. Jak by to się zmieniło, jeśli chcę pozwolić na kilka adresów IP i zakresów adresów IP. Zamiast yourIPaddressczy mogę dodać kilka adresów IP i zakresów? A jeśli używam SSH na niestandardowym porcie, takim jak 2888, polecenie zmieniłoby 22w twoim przykładzie na 2288? Czy to również blokuje rsync, sftp itp. Na tym serwerze ze wszystkich adresów IP oprócz dozwolonych?
PKHunter

1
Pamiętaj, że -p tcpjest to ważne tutaj, ponieważ --dportnie działa bez niego. Sugerowałbym również użycie -j REJECTzamiast, DROPponieważ REJECTczyni port identycznym z portem zamkniętym i DROPsprawia, że ​​pakiety kierowane do tego portu są czarne. W praktyce zdalny atakujący może wykryć DROPskonfigurowane porty z faktycznie zamkniętych portów.
Mikko Rantalainen

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.