Jak zezwolić niektórym systemom i zablokować wszystkie inne połączenia w iptables?
Jak zezwolić niektórym systemom i zablokować wszystkie inne połączenia w iptables?
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.
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 lo
i -o lo
z pewnością spowoduje problemy w niektórych aplikacjach.
iptables -F
, aby oczyścić wszystkie zasady, nie mogę nawet pingować Ubuntu.com
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
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.
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
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łoby 22
w twoim przykładzie na 2288
? 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 i DROP
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)