GNU/Linux >> Znalost Linux >  >> Linux

Odepřít všechna příchozí spojení s iptables?

Zkuste to s přístupem root:

# Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Accept on localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Allow established sessions to receive traffic
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Upozorňujeme, že to brutálně přeruší všechna spuštěná připojení - to zahrnuje věci jako připojení SSH, které můžete použít ke správě serveru. Toto používejte pouze v případě, že máte přístup k místní konzoli.

Jak přidat výjimku pro SSH, viz odpověď Miphix.


Pokud pracujete vzdáleně přes SSH, možná budete chtít přidat toto (-I vloží jej před všechna ostatní pravidla v INPUT ):

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

Pokud vaše služba SSH naslouchá na jiném portu, budete muset použít tento port místo 22 .

V opačném případě můžete nechtěně ztratit přístup.


Uvědomte si, že ostatní odpovědi nepokrývají IPv6! Pokud váš systém přijímá provoz IPv6, nebude se na provoz ipv6 vztahovat ani jedno pravidlo iptables.

místo přímého použití iptables / ip6tables doporučuji použít iptables-restore and save. Tyto nástroje umožňují specifikovat konfiguraci iptables s více pravidly a snadno ji načíst jedním příkazem.

vytvořte soubor (nazval jsem ho iptables.rules) s následujícím obsahem:

*filter

# drop forwarded traffic. you only need it of you are running a router
:FORWARD DROP [0:0]

# Accept all outgoing traffic
:OUTPUT ACCEPT [623107326:1392470726908]


# Block all incoming traffic, all protocols (tcp, udp, icmp, ...) everything.
# This is the base rule we can define exceptions from.
:INPUT DROP [11486:513044]

# do not block already running connections (important for outgoing)
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# do not block localhost
-A INPUT -i lo -j ACCEPT

# do not block icmp for ping and network diagnostics. Remove if you do not want this
# note that -p icmp has no effect on ipv6, so we need an extra ipv6 rule
-4 -A INPUT -p icmp -j ACCEPT
-6 -A INPUT -p ipv6-icmp -j ACCEPT

# allow some incoming ports for services that should be public available
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

# commit changes
COMMIT

Poznámka:Pokud chcete povolit ICMP a provoz na konkrétních portech, přidal jsem několik dalších příkladů.

nyní jej můžete načíst pomocí těchto příkazů:

iptables-restore < iptables.rules
ip6tables-restore < iptables.rules

Vaše pravidla nyní pokrývají také ipv6 a lze je snadno spravovat.

Dodatečná poznámka pro uživatele Debianu:pokud jste spokojeni se svými pravidly, můžete apt install iptables-persistent takže pravidla se po restartu obnoví. Pravidla se při vypnutí automaticky neukládají, takže spusťte netfilter-persistent save aktualizovat trvalá pravidla.


Linux
  1. IPTables Flush:Smazat / odebrat všechna pravidla na RedHat a CentOS Linux

  2. Najděte všechny soubory s názvem obsahujícím řetězec

  3. Nastavte nginx.conf tak, aby odmítal všechna připojení kromě určitých souborů nebo adresářů

  1. Příkaz Linux DD – 15 příkladů se všemi možnostmi

  2. Povolení FTP s IPTables

  3. Jak vypíšu všechny uživatele s rootem?

  1. Testování připojení SSL pomocí SSLyze, Nmap nebo OpenSSL

  2. Smazání všech C komentářů se Sedem?

  3. Jak přeinstalovat všechny nainstalované balíčky pomocí Zypper?