Problème: iptables réinitialise les paramètres par défaut après le redémarrage du serveur.
J'essaie de définir une règle comme ceci:
iptables -I INPUT -p tcp --dport 3000 -j ACCEPT
après cela je fais:
service iptables save
et il écrit quelque chose comme ça
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
et après cela, je viens de courir (cela a été fait une fois):
chkconfig iptables on
(J'ai lu que cela doit être fait pour restaurer les paramètres après le redémarrage)
Après cela, je redémarre et exécute cette commande:
systemctl list-unit-files | grep iptables
et je vois que iptables.service est activé, cependant, la règle (pour ouvrir le port 3000) ne fonctionne plus.
Comment conserver ces paramètres?
CentOS 7 utilise FirewallD maintenant!
Exemple:
firewall-cmd --zone=public --add-port=3000/tcp --permanent
règles de rechargement:
firewall-cmd --reload
Désactivez firewalld avec la commande suivante:
systemctl disable firewalld
Installez ensuite iptables-service en suivant la commande:
yum install iptables-services
Activez ensuite iptables en tant que services:
systemctl enable iptables
Vous pouvez maintenant enregistrer vos règles iptables en suivant la commande:
service iptables save
Sur CentOS 7 Minimal, vous devrez peut-être installer le iptables-services
package (merci à @ RichieACC pour le suggestion ):
Sudo yum install -y iptables-services
Et puis activez le service à l'aide de systemd
:
Sudo systemctl enable iptables.service
Et exécutez l'initscript pour enregistrer vos règles de pare-feu:
Sudo /usr/libexec/iptables/iptables.init save
Peut-être qu'un script comme celui-ci aurait été utile à n'importe qui?
Attention, vous perdrez tout ce qui est actuellement configuré car il supprime firewalld et vide toutes les règles actuelles de la table 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
Je suppose que vous voulez la même chose au cas où votre système pourrait être atteint (maintenant ou à tout moment plus tard) par le trafic 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
iptables-save
enregistrera la configuration actuelle sans avoir besoin d'installer d'autres bibliothèques ou services.
Vous pouvez modifier directement le fichier/etc/sysconfig/iptables. Rechargez le service iptables pour recharger les règles de ce fichier. Pourtant, comme on vous l'a déjà dit, firewalld est le nouveau système de pare-feu par défaut pour Centos, et c'est une bonne occasion d'apprendre à l'utiliser, vous ne pensez pas?