Come bloccare tutte le porte tranne 80.443 con iptables? [duplicare]


15

Il blocco di tutte le porte (in e out) è facile ma è difficile con la parola "tranne". Non conosco alcuna regola che soddisfi la condizione.

PS: So che questa domanda non è una novità. Ma in realtà, non ho trovato nulla di utile. Aiutatemi quindi!


Non riesci a chiudere TUTTE le porte e poi APRIRE una singola porta nella riga successiva?
sinni800,

Faccio questo: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -I INPUT -p tcp --dport 80 -j ACCEPT ------ Non funziona!
user71169,

Risposte:


25

Prima il ! è il simbolo NON.

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

In secondo luogo, le regole che hai scritto potrebbero non avere i risultati previsti. Rilasci tutto, inclusa la risposta alla connessione sulla porta 80. Pertanto, non sarai in grado di connetterti ad esso ai fini di un server web.

Queste regole consentono connessioni CORRELATE e STABILITE quindi un server web dovrebbe funzionare, se questo è in realtà 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

2
Non dovrebbe !essere evitato in questo modo \!, se viene utilizzata la shell Bash?
Cristian Ciupitu,

@CristianCiupitu No, non dovrebbe essere necessario sfuggire. Potresti avere qualcosa di strano, ma sulla mia base non ho bisogno di scappare.
cybernard,

Ho controllato l'output di "iptables -nvL" per vedere i pacchetti in connessione. Sembra funzionare, le tue regole. Ma non riesco a verificare che funzioni davvero o meno, tranne usare alcune app che usano quelle porte. Un'app usa una porta non significa che usa solo quella porta. Quindi, qualche suggerimento di controllare?
user71169,

1
@cybernard, sì, hai ragione. !Non è necessario sfuggire a una pianura . Mi dispiace per il falso allarme.
Cristian Ciupitu,

3
Le regole di @MohammadShahid non sono permanenti automaticamente, riavvia e sarà sparito e potrai accedere. È necessario aggiungere 22 all'elenco delle porte se si desidera mantenere una connessione ssh.
cybernard,

5
# 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 darti ciò di cui hai bisogno


4
Ricorda che se sei connesso tramite SSH dovresti aprire la porta TCP 22
Maximilian Ast

Sì, non dimenticare la tua porta SSH, probabilmente dovresti aggiungere la tua porta SSH prima di impostare il criterio predefinito su drop. ;)
James Little

3

È possibile impostare l'azione predefinita su DROP, quindi creare regole di eccezione per consentire 80 e 443, in questo modo:

# 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 esaminerà l'elenco delle "eccezioni" fino a quando non trova una corrispondenza. Quindi eseguirà l'azione specificata dal -jparametro (ACCETTA in questo caso). Se non trova una corrispondenza, tornerà alla politica predefinita e rilascerà il pacchetto.

Si noti che con questa soluzione alternativa tutti i sottodomini verranno bloccati. Ad esempio con questo metodo lo farai funzionare su www.mydomain.com, ma il tuo sottodominio diciamo che www.sub.mydomain.com non si aprirà per errori DNS.


Dovrebbe essere lavoro ma non lo è. Sono così confuso.
user71169,

Cosa non funziona? Permette tutti i pacchetti in arrivo o nessuno? Puoi aggiornare la tua domanda con l'output di iptables -nvL?
martedì

Perché il voto negativo? Ho questo in esecuzione in produzione, quindi sono sicuro al 100% che funzioni.
martedì

Scusate! Non sono io, qualcuno l'ha fatto :)) Sì, sicuramente mi piaci ma non funziona. Ecco perché devo fare la domanda.
user71169,

2
Non farlo oltre ssh.
Ashesh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.