Firewall Iptables
Recentemente stavo configurando un server web su centos con nginx e php. L'installazione di nginx andava bene, ma la porta http del sistema non era accessibile dall'esterno.
Questo perché centOS per impostazione predefinita ha alcune regole del firewall iptables attive. Solo la porta ssh (22) era accessibile e la shell remota funzionava. Quindi è necessario aprire la porta 80 affinché il server web come nginx funzioni.
Iptables è il firewall su Linux che può essere configurato per accettare o rifiutare il traffico di rete in base a vari tipi di set di regole a livello di pacchetto. Quindi è necessario configurare questo firewall per abilitare le connessioni sulle porte di rete.
Controlla le regole di Iptables
Ci sono 2 modi per configurare iptables per aprire la porta 80. Il primo è usare il comando iptables e il secondo è creare un file di configurazione. Per prima cosa controlla le regole iptables esistenti in vigore. Il comando è abbastanza semplice. Ecco un esempio di output.
[[email protected] ~]# 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 [[email protected] ~]#
Come si può vedere nell'output, c'è una riga REJECT nella catena INPUT alla fine che dice, rifiuta tutto. Tuttavia la riga precedente consente di accettare connessioni ssh in modo che ssh funzioni. È possibile visualizzare un elenco un po' più dettagliato e numerico utilizzando le opzioni v e n insieme all'opzione L
[[email protected] ~]# iptables --line -vnL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 273 22516 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 271 36456 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 172 packets, 24494 bytes) num pkts bytes target prot opt in out source destination [[email protected] ~]#
Apri la porta 80 in Iptables
Per accettare connessioni http dobbiamo aggiungere una regola alla riga numero 5 e premere la riga REJECT sotto. Ecco il comando per farlo.
# iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
Il comando precedente aggiungerà una regola alla riga n. 5 che afferma che il firewall dovrebbe accettare le connessioni in entrata sulla porta 80. Controlla di nuovo le regole di iptables.
[[email protected] ~]# iptables --line -vnL 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 [[email protected] ~]#
Ora abbiamo la nuova regola della porta TCP 80 alla riga #5 e quindi ora la porta http è accessibile dalla rete esterna.
Salva le regole di iptables
Con le nuove regole la porta 80 è ora aperta, tuttavia questa modifica è temporanea e iptables tornerà alle regole precedenti se il server viene riavviato.
Per renderlo permanente emettere il comando iptables save.
[[email protected] ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
Le nuove regole vengono salvate nel file /etc/sysconfig/iptables .
Ecco come appare il file:
# Generated by iptables-save v1.4.7 on Fri Oct 25 10:33:46 2013 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [39:6956] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Fri Oct 25 10:33:46 2013
Ora il cambiamento è permanente.
In alternativa puoi modificare direttamente il file di configurazione di iptables e riavviare iptables e la stessa modifica avrà effetto.
[[email protected] ~]# service iptables restart iptables: Flushing firewall rules: [ OK ] iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Unloading modules: [ OK ] iptables: Applying firewall rules: [ OK ] [[email protected] ~]#
Conclusione
Questo è stato un rapido esempio di come aprire una determinata porta in iptables per renderla accessibile. Per saperne di più su iptables, controlla le pagine di manuale eseguendo il comando "man iptables" nel tuo terminale, oppure controllalo online qui:
https://linux.die.net/man/8/iptables