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 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.
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
low 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
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?
-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.
Oto pełny działający przykład.
Sprawia także, że aplikacje działają (dotyczy: mojego komentarza o braku uruchamiania Keepass)