Centos 7 salva le impostazioni di iptables


58

Problema: iptables ripristina le impostazioni predefinite dopo il riavvio del server.

Sto cercando di impostare una regola come questa:

iptables -I INPUT -p tcp --dport 3000 -j ACCEPT

dopo quello che faccio:

service iptables save

e riscrive qualcosa del genere

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

e dopo questo ho appena corso (questo è stato fatto una volta):

chkconfig iptables on (Ho letto che questo deve essere fatto per ripristinare le impostazioni dopo il riavvio)

Dopodiché riavvio ed eseguo questo comando:

systemctl list-unit-files | grep iptables

e vedo che iptables.service è abilitato, tuttavia, la regola (per aprire la porta 3000) non funziona più.

Come posso mantenere queste impostazioni?


Perché non hai appena usato firewalld? Probabilmente è ancora in esecuzione.
Michael Hampton

Probabilmente perché firewalld non è adatto per ambienti server ...
Juan Jimenez,

Risposte:


67

CentOS 7 sta usando FirewallD ora!

Esempio:

firewall-cmd --zone=public --add-port=3000/tcp --permanent

ricaricare le regole:

firewall-cmd --reload

2
qualsiasi idea del perché l'immagine centos7 di AWS AMI non abbia firewallD.
Saad Masood,

5
OPPURE è possibile disabilitare firewalld e installare il pacchetto "iptables-services" per ottenere la compatibilità con iptables quasi nativo :)
vagarwal

1
Ho provato a configurare il port forwarding 80 -> 8180 per lo ( --zone=trusted) con firewalld-cmd ma non funziona (funziona --zone=public) Facendo così con iptables sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8180 ; sudo /sbin/iptables -t nat -I OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8180funziona (ma ognuno firewalld --reloadperde questo annulla)
djb

@saad: perché aws fornisce già un servizio firewall, quindi l'ami può essere tenuto piccolo
roothahn

Non è! Ho ordinato un VPS Centos 7 e ha iptables per impostazione predefinita! La versione del sistema operativo: 7.5.1804 (Core)
codezombie

66

Disabilita firewalld con il seguente comando:

systemctl disable firewalld

Quindi installare iptables-service con il seguente comando:

yum install iptables-services

Quindi abilitare iptables come servizi:

systemctl enable iptables

Ora puoi salvare le tue regole iptable con il seguente comando:

service iptables save

22

Su CentOS 7 Minimal potresti dover installare il iptables-servicespacchetto (grazie a @RichieACC per il suggerimento ):

sudo yum install -y iptables-services

E quindi abilitare il servizio utilizzando systemd:

sudo systemctl enable iptables.service

Ed esegui l'initscript per salvare le regole del firewall:

sudo /usr/libexec/iptables/iptables.init save

2

Forse una sceneggiatura come questa sarebbe stata utile a chiunque?

Fai attenzione che perderai tutto ciò che è attualmente configurato perché rimuove firewalld ed elimina tutte le regole correnti nella tabella INPUT :

yum remove firewalld && yum install iptables-services

iptables --flush INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            # Any packages related to an existing connection are OK
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # ssh is OK
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT   # Port 3000 for IPv4 is OK
iptables -A INPUT -j REJECT # any other traffic is not welcome - this should be the last line
service iptables save       # Save IPv4 IPTABLES rules van memory naar disk
systemctl enable iptables   # To make sure the IPv4 rules are reloaded at system startup

Immagino che tu voglia lo stesso nel caso in cui il tuo sistema possa essere raggiunto (ora o in qualsiasi momento successivo) dal traffico IPv6:

ip6tables --flush INPUT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            # Any packages related to an existing connection are OK
ip6tables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # ssh is OK
ip6tables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT   # Port 3000 for IPv6 is OK
ip6tables -A INPUT -j REJECT # any other traffic is not welcome - this should be the last line
service ip6tables save       # Save IPv6 IPTABLES rules van memory naar disk
systemctl enable ip6tables   # To make sure the IPv6 rules are reloaded at system startup

1

È possibile modificare direttamente il file / etc / sysconfig / iptables. Ricarica il servizio iptables per ricaricare le regole da quel file. Eppure, come ti è stato già detto, firewalld è il nuovo sistema firewall predefinito per Centos, e questa è una buona possibilità per imparare a usarlo, non credi?


7
in CentOS7 non c'è più un file / etc / sysconfig / iptables
roothahn

1
Scusate @roothahn, ma sicuramente esiste ... a meno che non vi perdiate alcuni pacchetti ovviamente. Da /usr/lib/systemd/system/iptables.service puoi vedere che ciò che è effettivamente lanciato è "/usr/libexec/iptables/iptables.init start", che è il solito vecchio e caro script alla ricerca del solito vecchio file di configurazione in / etc / sysconfig
lapidato il

1
/etc/sysconfig/iptables, non esiste neanche per me. Tuttavia, /etc/sysconfig/iptables-configesiste. Ma non ha regole di firewall al suo interno come prima il iptablesfile.
Kentgrav,

2
Ho scoperto che il file non era presente in un'installazione predefinita predefinita. Sembra che CentOS 7 non installi iptables.service per impostazione predefinita. "yum install -y iptables.service" ha installato il servizio e ha creato per me un predefinito / etc / sysconfig / iptables.
RichieACC il

3
Dovrebbe essere "yum install iptables-services"
qris

0
iptables-save

salverà la configurazione corrente senza la necessità di installare altre librerie o servizi.

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.