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Ć.
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.
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.
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
0
Oto pełny działający przykład.
Sprawia także, że aplikacje działają (dotyczy: mojego komentarza o braku uruchamiania Keepass)
Odpowiedzi:
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
ipset
i 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.
Jeśli chcesz po prostu zezwolić tylko przez IP, bez stanu
prawdopodobnie będziesz mieć z tym problemy, i sugeruję użycie stanu, aby ułatwić ci życie. Na przykład niedozwolenie
-i lo
i-o lo
z pewnością spowoduje problemy w niektórych aplikacjach.źródło
iptables -F
, aby oczyścić wszystkie zasady, nie mogę nawet pingować Ubuntu.comOto (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.
źródło
lo
w powyższym przykładzie jest wykluczone z dopasowywania stanu i zawsze dozwolone.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.
źródło
yourIPaddress
czy mogę dodać kilka adresów IP i zakresów? A jeśli używam SSH na niestandardowym porcie, takim jak 2888, polecenie zmieniłoby22
w twoim przykładzie na2288
? Czy to również blokuje rsync, sftp itp. Na tym serwerze ze wszystkich adresów IP oprócz dozwolonych?-p tcp
jest to ważne tutaj, ponieważ--dport
nie działa bez niego. Sugerowałbym również użycie-j REJECT
zamiast,DROP
ponieważREJECT
czyni port identycznym z portem zamkniętym iDROP
sprawia, że pakiety kierowane do tego portu są czarne. W praktyce zdalny atakujący może wykryćDROP
skonfigurowane porty z faktycznie zamkniętych portów.Oto pełny działający przykład.
Sprawia także, że aplikacje działają (dotyczy: mojego komentarza o braku uruchamiania Keepass)
https://github.com/skironDotNet/linux-allow-only-single-ip
źródło