J'ai installé une version minimale de CentOS 7 sur un serveur de développement pour virtualiser certains invités Linux avec kvm / qemu.
Pour utiliser iptables au lieu d' firewalld
installer iptables-service
et de faire:
systemctl stop firewalld
systemctl mask firewalld
systemctl enable iptables
systemctl start iptables
SELinux est désactivé par modification /etc/sysconfig/selinux
.
Mes règles pour iptables sont les suivantes:
iptables -Z
iptables -F
iptables -X
iptables -t nat -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -o enp6s0 -j MASQUERADE
iptables -A FORWARD -i enp6s0 -o virbr0 -j ACCEPT
Maintenant, j'enregistre mes paramètres avec la commande suivante:
iptables-save > /etc/sysconfig/iptables
Mes iptables-file
looks:
# Generated by iptables-save v1.4.21 on Thu Aug 20 10:46:40 2015
*mangle
:PREROUTING ACCEPT [16736:10889078]
:INPUT ACCEPT [1063:106860]
:FORWARD ACCEPT [15679:10784186]
:OUTPUT ACCEPT [570:71275]
:POSTROUTING ACCEPT [15728:10809742]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Thu Aug 20 10:46:40 2015
# Generated by iptables-save v1.4.21 on Thu Aug 20 10:46:40 2015
*filter
:INPUT ACCEPT [868:81772]
:FORWARD ACCEPT [8328:7311589]
:OUTPUT ACCEPT [233:32016]
-A FORWARD -i enp6s0 -o virbr0 -j ACCEPT
COMMIT
# Completed on Thu Aug 20 10:46:40 2015
# Generated by iptables-save v1.4.21 on Thu Aug 20 10:46:40 2015
*nat
:PREROUTING ACCEPT [1308:86998]
:INPUT ACCEPT [77:12475]
:OUTPUT ACCEPT [1:72]
:POSTROUTING ACCEPT [1228:74319]
-A POSTROUTING -o enp6s0 -j MASQUERADE
COMMIT
# Completed on Thu Aug 20 10:46:40 2015
Une vérification rapide pour voir si mes règles sont correctes pour l'instant:
[root@dev1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Mais après avoir redémarré le serveur, les règles iptables ressemblent à ceci:
[root@dev1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere 10.0.1.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 10.0.1.0/24 anywhere
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:bootpc
Je ne comprends pas d'où viennent les autres règles.
Lors de l'appel, iptables-restore -c /etc/sysconfig/iptables
les règles attendues sont affichées.
Il semble que les règles enregistrées ne soient pas chargées au démarrage ou que les règles "par défaut" ne soient pas vidées ou autre.
Quel est le problème ici ??? Je reçois lentement des cheveux gris ...
Merci pour vos réponses rapides :)
Comme mentionné ci-dessus, les services iptables ont été installés par moi:
[root@dev1 ~]# rpm -aq iptables-services
iptables-services-1.4.21-13.el7.x86_64
L'activation du service avec systemctl enable iptables.service
au lieu d'utiliser ne systemctl enable iptables
semble faire aucune différence car le même fichier de service est lié:
[root@dev1 ~]# systemctl disable iptables
rm '/etc/systemd/system/basic.target.wants/iptables.service'
[root@dev1 ~]# systemctl enable iptables.service
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'
C'est le contenu du fichier iptables après avoir appelé
/usr/libexec/iptables/iptables.init save
[root@develcluster1 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Fri Aug 21 14:34:04 2015
*nat
:PREROUTING ACCEPT [351490:22546787]
:INPUT ACCEPT [15751:2400243]
:OUTPUT ACCEPT [324:21186]
:POSTROUTING ACCEPT [304860:18293418]
-A POSTROUTING -o enp6s0 -j MASQUERADE
COMMIT
# Completed on Fri Aug 21 14:34:04 2015
# Generated by iptables-save v1.4.21 on Fri Aug 21 14:34:04 2015
*filter
:INPUT ACCEPT [505048:69178501]
:FORWARD ACCEPT [55815086:22035726185]
:OUTPUT ACCEPT [325986:56595531]
-A FORWARD -i enp6s0 -o virbr0 -j ACCEPT
COMMIT
# Completed on Fri Aug 21 14:34:04 2015
# Generated by iptables-save v1.4.21 on Fri Aug 21 14:34:04 2015
*mangle
:PREROUTING ACCEPT [109215513:66867793592]
:INPUT ACCEPT [505243:69203589]
:FORWARD ACCEPT [108710264:66798590873]
:OUTPUT ACCEPT [326323:56634790]
:POSTROUTING ACCEPT [109036066:66855179944]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Fri Aug 21 14:34:04 2015
Après avoir redémarré un appel pour iptables -L
ne pas afficher mes règles enregistrées:
[root@dev1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere 10.0.1.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 10.0.1.0/24 anywhere
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:bootpc
Peut-être que je fais quelque chose de fondamentalement mauvais. Mais chaque fil que je lis le fait de la même manière et cela devrait fonctionner.
Si vous avez besoin de plus d'informations, veuillez me le dire.
Pendant ce temps, je m'a aidé en appelant un petit script que je dois appeler après chaque redémarrage.
#!/bin/sh
iptables -Z
iptables -F
iptables -X
iptables -t nat -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -o enp6s0 -j MASQUERADE
iptables -A FORWARD -i enp6s0 -o virbr0 -j ACCEPT
iptables --flush
iptables-restore -c /etc/sysconfig/iptables
Ce n'est pas sexy mais fonctionne jusqu'à présent. Mais ne pouvait pas être la solution finale.
service stop|mask firewalld
)Réponses:
Je pense que vous devez activer le service avec:
systemctl enable iptables.service
et vous devez exécuter le script d'initialisation iptables pour enregistrer vos règles comme ceci:
/usr/libexec/iptables/iptables.init save
la source
Assurez-vous que le package iptables-services est installé:
Sinon, installez-le:
Vous pouvez ensuite utiliser la commande de service pour le contrôler comme avec les versions précédentes de CentOS:
Le
save
,stop
,start
, lesrestart
commandes seront tous les travaux et il devrait charger au démarrage.la source
rpm -aq
par lui-même listera tous les packages installés sur un système et leur version.rpm -aq <package>
affichera les informations sur le package défini s'il est installé. Sirpm -aq iptables-services
ne renvoie rien, cela signifie que le package «iptables-services» n'est pas installé.iptables-services
sont disponibles dans le référentiel CentOS 7 de base standard.J'ai contourné cela en ajoutant la commande «service iptables stop \ iptables --flush» ajoutée en bas /etc/rc.d/rc.local
Mon environnement était KVM Centos 7 et mon problème était que libvirt repeuplerait les iptables lors d'un redémarrage - bloquant l'accès à mes machines virtuelles.
la source
Si je me souviens bien, l'un des services de virtualisation (et vous semblez en exécuter un, à en juger par le nom de l'interface virbr0) ajoutait lui-même des règles de pare-feu pour s'adapter aux réseaux et interfaces virtuels configurés. Veuillez jeter un œil à ce domaine (et
libvirt-daemon
c'est probablement un bon point de départ).Je ne sais pas cependant si le fait qu'il semble écraser vos règles soit un bug ou une fonctionnalité. RedHat semble être assez concentré en
firewalld
tant que solution de pare-feu dans RHEL (et cela va directement à CentOS inchangé également) et ils peuvent ne pas prendre en charge le bon fonctionnement de leurs solutions de virtualisation avec desfirewalld
alternatives.la source
Essaye ça:
exécutez vos règles iptables ici maintenant
la source