Come consentire SMTP in uscita su iptables Debian Linux


13

Se scelgo di consentire tutto il traffico sulla catena OUTPUT ( iptables -P OUTPUT ACCEPT), la posta viene inviata correttamente. Non appena blocco il mio server con queste regole, la posta in uscita smette di funzionare. Tutto il resto però funziona, il che è strano.

Qualcuno vede qualcosa qui che impedisce l'invio della mia posta in uscita? Sono sconcertato, ho guardato più volte queste regole e ho provato molte versioni diverse.

 iptables -F
 iptables -P INPUT DROP
 iptables -P FORWARD DROP
 iptables -P OUTPUT DROP


 iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables -A INPUT  -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A INPUT  -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT

 iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT

 iptables -A OUTPUT  -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables -A OUTPUT  -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT  -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

 iptables -A INPUT -i lo -j ACCEPT
 iptables -A OUTPUT -o lo -j ACCEPT

 iptables -A OUTPUT -p udp  --dport 53 -j ACCEPT
 iptables -A INPUT -p udp  --sport 53 -j ACCEPT

 iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
 iptables -A INPUT -p tcp --dport 443 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT


 iptables -N LOGGING
 iptables -A INPUT -j LOGGING
 iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
 iptables -A LOGGING -j DROP

Risposte:


18

Hai una regola per far uscire il traffico, ma non hai una regola per far entrare il traffico di ritorno.

Immagino che intendevi che queste 2 regole fossero -A INPUTinvece:

iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT

Tuttavia, l'utilizzo della porta di origine come metodo per consentire il traffico di ritorno è un modo errato per proteggere il sistema. Tutto quello che qualcuno deve fare è utilizzare una di queste porte di origine e il set di regole del firewall diventa inutile.

Un'idea molto migliore sarebbe quella di rimuovere tutte le -A INPUT ... --sportregole e utilizzare solo questa singola regola:

iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Il modo in cui funziona questa regola è che quando il sistema stabilisce una connessione in uscita, il kernel registra la connessione in una tabella di tracciamento. Quindi, quando i pacchetti dal sistema remoto rientrano, sembra vedere se quei pacchetti sono associati a qualsiasi connessione nella tabella di tracciamento.
Il ESTABLISHEDbit è quello che consente il traffico direttamente correlato alla sessione. Si tratterà di pacchetti TCP che tornano sullo stream.
IlRELATEDbit consente il traffico correlato alla connessione, ma non fa parte della connessione stessa, tramite. Questo può essere qualcosa come i pacchetti ICMP, come "ICMP non può frammentare". Questi pacchetti non fanno parte del flusso TCP, ma sono di vitale importanza per mantenere vivo il flusso (che è anche un'altra cosa che il tuo set di regole non copre e senza il quale vedrai strani problemi di connessione e perdita).

Questa regola funziona anche per il traffico UDP, ma poiché UDP è apolide, non è esattamente la stessa. Invece il kernel deve tenere traccia dei pacchetti UDP che escono, e presuppone solo che quando i pacchetti UDP tornano sulla stessa combinazione host / porta, ed è in un breve lasso di tempo, che sono correlati.


Grazie per la risposta. Penso di non voler riaccendere il traffico perché sto solo effettuando una connessione SMTP in uscita? Stavo pensando che se avessi aggiunto la regola alla catena INPUT, avrei lasciato indietro SMTP. Questo è un server web che deve solo connettersi a un host SMTP esterno per inviare posta .... grazie!
916 Networks,

Se non si fa rientrare il traffico di ritorno, in che modo il sistema riceverà tutti i messaggi "Sì, ho i tuoi dati" utilizzati dai protocolli TCP e SMTP?
Patrick,

Ha senso. Ho appena aggiunto la tua regola e ha funzionato totalmente. Apprezzo la risposta! Ho provato a votare ma dice che non ho abbastanza reputazione (nuovo su Unix StackExchange)
916 Networks

Ho aggiunto una spiegazione di come funziona quella regola.
Patrick,
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.