Aprire la porta 80 per http in iptables
Supponiamo che stia configurando un web server usando CentOS (mi riferisco nello specifico alla versione 6.5 di CentOS, ma il discorso vale per molte altre release). Una volta installato il sistema e tutto il necessario, diciamo Apache come web server, probabilmente ti scontrerai con un grosso problema: non riesci ad accedere alle pagine web dall’esterno del sistema.
Il motivo per cui si verifica questa situazione è che CentOS installa automaticamente iptables con alcune determinate regole preimpostate. Tanto per intendersi iptables è il sistema di firewall software di cui dispone il sistema operativo. Ne parlo in alcune pagine che puoi consultare per vedere i dettagli operativi, a cui faccio riferimento in alcuni dei passaggi che seguono.
Tra le impostazioni di default di iptables c’è quella di non aprire la porta 80, porta su cui viaggia il traffico http. Quindi il risultato è che dalla stessa macchina su cui è stata fatta l’installazione funziona tutto, ma quando si cerca di accedere dall’esterno, dalla lan o via internet, non si ottiene risposta.
La prima cosa da fare è quindi visualizzare la situazione di iptable, con il comando iptables -L
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination #
Nell’esempio riportato sopra si può notare che l’ultima riga della catena INPUT dice di rifiutare, REJECT, tutto il traffico che non è esplicitamente previsto dalle righe precedenti.
Nell’esempio è facile contare le linee presenti e notare che quella che riporta l’istruzione REJECT è in posizione 5, ma in altre situazioni può essere comodo usare il comando iptables -L -n –line-numbers per visualizzare i numeri corrispondenti.
Aprire la porta 80
Occorre quindi aggiungere in iptables una nuova istruzione che permetta il traffico che ci interessa e che si svolge sulla porta 80. La nuova istruzione deve essere posta prima della regola che attualmente si trova nella riga 5.
# iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
A questo punto basta controllare il risultato visualizzando le regole con il comando iptables -L -n –line-numbers
# iptables -L -n --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 291 23868 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW,ESTABLISHED 6 286 38524 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 4 packets, 608 bytes) num pkts bytes target prot opt in out source destination
Come previsto la regola si trova in posizione 5, dove si è inserita spostando quanto si trovava lì. Il traffico http è ora permesso.
Resta un’ultima cosa da fare: salvare le regole in modo che siano permanenti. Basta usare il comando service iptables save
# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]