Centos 7 enregistrer les paramètres iptables

58

Problème: iptables rétablit les paramètres par défaut après le redémarrage du serveur.

J'essaie de définir une règle comme celle-ci:

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

après ça 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 j'ai juste couru (cela a été fait une fois):

chkconfig iptables on (J'ai lu que cela devait être fait pour pouvoir restaurer les paramètres après le redémarrage)

Après cela, je redémarre et lance 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 puis-je conserver ces paramètres?

utilisateur1463822
la source
Pourquoi n'avez-vous pas simplement utilisé firewalld? Il est probablement toujours en cours d'exécution.
Michael Hampton
Probablement parce que firewalld n'est pas adapté aux environnements de serveurs ...
Juan Jimenez

Réponses:

67

CentOS 7 utilise FirewallD maintenant!

Exemple:

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

règles de rechargement:

firewall-cmd --reload
roothahn
la source
2
aucune idée pourquoi l’image centos7 d’AWS AMI n’a pas firewallD.
Saad Masood
5
OU vous pouvez désactiver firewalld et installer le paquet "iptables-services" pour obtenir une compatibilité quasi-native avec iptables :)
vendredi
1
J'ai essayé de configurer la redirection de port 80 -> 8180 pour lo ( --zone=trusted) avec firewalld-cmd mais cela ne fonctionne pas (ça marche en --zone=public) Cela fonctionne avec 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 8180(mais chacun firewalld --reloadperd cette action)
djb
@saad: comme aws fournit déjà un service de pare-feu, l'ami peut rester petit
roothahn
Ce n'est pas! J'ai commandé un Centos 7 VPS et il a iptables par défaut! La version du système d'exploitation: 7.5.1804 (Core)
codezombie
66

Désactivez firewalld avec la commande suivante:

systemctl disable firewalld

Puis installez iptables-service en suivant la commande:

yum install iptables-services

Activez ensuite iptables en tant que services:

systemctl enable iptables

Maintenant, vous pouvez sauvegarder vos règles iptables en suivant la commande:

service iptables save
HosseinGBI
la source
22

Sur CentOS 7 Minimal, vous devrez peut-être installer le iptables-servicespackage (merci à @RichieACC pour la suggestion ):

sudo yum install -y iptables-services

Et puis activez le service en utilisant systemd:

sudo systemctl enable iptables.service

Et lancez l'initscript pour sauvegarder vos règles de pare-feu:

sudo /usr/libexec/iptables/iptables.init save
qris
la source
2

Peut-être qu'un script comme celui-ci aurait été utile à quelqu'un?

Attention, vous perdrez tout ce qui est actuellement configuré car il supprime firewalld et efface toutes les règles actuelles du tableau 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
JohannesB
la source
1

Vous pouvez modifier directement le fichier / etc / sysconfig / iptables. Rechargez le service iptables pour recharger les règles de ce fichier. Cependant, 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?

lapidé
la source
7
dans CentOS7, il n'y a plus de fichier / etc / sysconfig / iptables
roothahn
1
Désolé @roothahn, mais ça existe vraiment ... à moins que vous ne manquiez de paquets bien sûr. Dans /usr/lib/systemd/system/iptables.service, vous pouvez voir que ce qui est réellement lancé est "/usr/libexec/iptables/iptables.init start", qui est l'ancien et cher script cherchant l'ancien fichier de configuration. dans / etc / sysconfig
lapidé le
1
Ouais /etc/sysconfig/iptablesn'existe pas pour moi non plus. Cependant, /etc/sysconfig/iptables-configexiste. Mais il n’a pas de règles de pare-feu à l’intérieur de celles-ci, comme le iptablesfichier en avait auparavant.
Kentgrav
2
J'ai trouvé que le fichier n'était pas présent lors d'une installation minimale par défaut non plus. CentOS 7 n'installe pas iptables.service par défaut, semble-t-il. "yum install -y iptables.service" a installé le service et créé un fichier par défaut / etc / sysconfig / iptables.
RichieACC
3
Cela devrait être "yum install iptables-services"
jeudi
0
iptables-save

enregistrera la configuration actuelle sans avoir à installer d’autres bibliothèques ou services.

Tempête Drainage
la source