Comment puis-je faire démarrer automatiquement le service iptables après le redémarrage sur CenOS / RHEL7?

8

J'ai quelques problèmes avec un serveur domestique nouvellement installé que je prépare. J'ai installé CentOS7 dessus et j'ai constaté que les ports 80 et 443 sont désactivés par défaut. Je les ai donc ajoutés aux iptables avec les commandes suivantes:

iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
service iptables save

J'ai également installé le service iptable qui n'était pas présent. Le problème est qu'à chaque redémarrage de la machine, les nouvelles configurations sont effacées.

J'ai essayé d'ajouter le service iptable à chkconfig mais j'obtiens l'erreur suivante:

[root@CentOS-7]# chkconfig --add iptables
error reading information on service iptables: No such file or directory

Je suppose que la raison pour laquelle j'obtiens cette erreur est qu'il n'y a pas de script iptable dans /etc/init.d/ mais que quelqu'un a des idées si je fais la bonne chose et / ou s'il existe un moyen plus simple et plus solide de le faire cette? Sinon, comment puis-je résoudre ce problème? Au final j'ai juste besoin d'utiliser mon serveur domestique comme serveur web / mail ...

J'ai également essayé d'utiliser la commande 'systemctl enable iptables' comme l'a gentiment suggéré le flemingovirus mais sans succès. Après avoir entré la commande, j'ai obtenu la sortie suivante:

ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants`/iptables.service'`

MISE À JOUR: J'ai regardé les iptables et la commande "service iptables save" a fonctionné correctement. Le problème semble être dû au fait que le service ne démarre pas au redémarrage. J'ai réussi à faire fonctionner le service au redémarrage après avoir ajouté la ligne suivante à /etc/rc.local

systemctl start  iptables.service

cependant je me demande pourquoi la commande 'systemctl enable iptables' ne fonctionne pas dans ce cas. Suis-je en train de manquer quelque chose? Merci

Dave
la source

Réponses:

6

Bien que cette question soit ancienne, je suis tombé sur le même problème et j'ai découvert la solution ici .

systemctl mask firewalld
systemctl stop firewalld

Fondamentalement, le pare-feu entre en conflit avec iptables et empêchera ainsi le chargement d'iptables:

# cat /usr/lib/systemd/system/firewalld.service 
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network.target
Before=libvirtd.service
Before=NetworkManager.service
Conflicts=iptables.service ip6tables.service ebtables.service

...

J'ai pu résoudre ce problème en masquant firewalld pour m'assurer qu'il ne démarre pas automatiquement et ne sera jamais démarré par la suite. Bien sûr, vous devrez vous assurer qu'iptables est activé:

systemctl enable iptables
zanegray
la source
4

les scripts d'initialisation ont disparu. Maintenant c'est systemctl. Son là-bas dans tous les documents CentOS7. Pour chkconfig ipatables ou pour démarrer le service iptables au démarrage, vous devez utiliser ceci: -

systemctl enable iptables

Vous devriez vérifier des choses simples à connaître sur systemctl dans les documents Cyberciti sur iptables .

flemingovirus
la source
Salut flemingovirus, j'ai essayé ce que vous avez suggéré et j'ai également regardé le lien mais cela ne fonctionne toujours pas. Des idées? merci
Dave
@Dave avez-vous vérifié où se trouvent les iptables? Est-ce / sbin / iptables lui-même? Découvrez-le avecdpkg -L iptables
flemingovirus
[root @ CentOS-7} # rpm -ql iptables-services.x86_64 / etc / sysconfig / ip6tables / etc / sysconfig / iptables /usr/lib/systemd/system/ip6tables.service / usr / lib / systemd / system / iptables .service / usr / libexec / initscripts / legacy-actions / ip6tables / usr / libexec / initscripts / legacy-actions / ip6tables / panic / usr / libexec / initscripts / legacy-actions / ip6tables / save / usr / libexec / initscripts / legacy -actions / iptables / usr / libexec / initscripts / legacy-actions / iptables / panic / usr / libexec / initscripts / legacy-actions / iptables / save / usr / libexec / iptables /usr/libexec/iptables/ip6tables.init / usr /libexec/iptables/iptables.init
Dave
il n'y a pas de dpkg donc j'ai plutôt utilisé rpm. cette sortie est-elle sensible? merci
Dave
1
@Dave la sortie de systemctl indique qu'elle a été mise pour le démarrage. Vérifiez avec un redémarrage.
flemingovirus
0

Tout d'abord, vous devriez essayer #chkconfig --add /sbin/iptablesceci reconnaîtra les "iptables". alors vous devez créer un script pour votre configuration iptables puis faire ce script pour démarrer au démarrage. créer un script:

#!/bin/bash
#
iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/service iptables save

et nommez-le par exemple myfirewall. le rendre exécutable avec chmod +x myfirewallet écrire ce ./myfirewallen /etc/rc.localpour lancer le script au démarrage.

amir jj
la source
merci mais j'obtiens l'erreur suivante: "erreur lors de la lecture des informations sur le service iptables: aucun fichier ou répertoire de ce type". N'y a-t-il pas d'autre moyen de l'implémenter dans CentOS. En fin de compte, j'essaie seulement de l'utiliser comme serveur Web / de messagerie standard. Comment utiliser un serveur Web si les ports 80 et 443 ne sont pas ouverts par défaut. Est-ce que je fais quelque chose de mal?
Dave
iptables est intégré dans Centos. je pense que vous avez eu un problème d'installation. veuillez essayer d' $sudo service iptables statusécrire la sortie en commentaire.
amir jj