2014-06-17 09:06:40 +0000 2014-06-17 09:06:40 +0000
15
15

Come bloccare tutte le porte tranne 80,443 con iptables?

Bloccare tutte le porte (in entrata e in uscita) è facile ma è difficile con la parola “tranne”. Non conosco nessuna regola che soddisfi la condizione.

PS: So che questa domanda non è nuova. Ma in effetti, non ho trovato nulla di utile. Quindi, aiutatemi pls!

Risposte (3)

25
25
25
2014-06-18 01:46:30 +0000

Per prima cosa il ! è il simbolo NOT.

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

Secondo, le regole che hai scritto potrebbero non avere i risultati attesi. Tu abbandoni tutto, compresa la risposta alla connessione sulla porta 80. Pertanto, non sarete in grado di connettervi ad essa dice ai fini di un server web.

Queste regole permettono connessioni RELATED e ESTABLISHED quindi un server web dovrebbe funzionare, se questo è in effetti ciò che stai cercando di fare.

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP
5
5
5
2014-06-17 09:12:54 +0000
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

Questo dovrebbe darvi quello che vi serve

3
3
3
2014-06-17 09:11:51 +0000

Puoi impostare la tua azione di default su DROP, e poi creare regole di eccezione per permettere 80 e 443, così:

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS

iptables passerà in rassegna la lista delle ‘eccezioni’ finché non troverà una corrispondenza. Poi eseguirà l'azione specificata dal parametro -j (ACCEPT in questo caso). Se non trova una corrispondenza, tornerà alla politica predefinita e abbandonerà il pacchetto.

Nota che con questo workaround qualsiasi sottodominio sarà bloccato. Per esempio con questo metodo lo farete funzionare su www.mydomain.com tutto bene ma il vostro sottodominio diciamo www.sub.mydomain.com non si aprirà per errori DNS.