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.

iptables porta 80

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  ]

 

 

 

Lascia il tuo commento