Centos 7 guardar la configuración de iptables

58

Problema: iptables se restablece a la configuración predeterminada después de reiniciar el servidor.

Estoy tratando de establecer una regla como esta:

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

después de eso hago:

service iptables save

y escribe algo como esto

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

y después de esto simplemente corrí (esto se hizo una vez):

chkconfig iptables on (He leído que esto debe hacerse para restaurar la configuración después de reiniciar)

Después de eso reinicio y ejecuto este comando:

systemctl list-unit-files | grep iptables

y veo que iptables.service está habilitado, sin embargo, la regla (para abrir el puerto 3000) ya no funciona.

¿Cómo persisto esta configuración?

usuario1463822
fuente
¿Por qué no usaste Firewalld? Probablemente todavía se está ejecutando.
Michael Hampton
Probablemente porque Firewalld no es adecuado para entornos de servidor ...
Juan Jiménez

Respuestas:

67

¡CentOS 7 está usando FirewallD ahora!

Ejemplo:

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

recargar reglas:

firewall-cmd --reload
roothahn
fuente
2
alguna idea de por qué la imagen centos7 de AWS AMI no tiene firewallD.
Saad Masood
55
O puede deshabilitar firewalld e instalar el paquete "iptables-services" para lograr una compatibilidad casi nativa con iptables :)
vagarwal
1
Intenté configurar el reenvío de puertos 80 -> 8180 para lo ( --zone=trusted) con firewalld-cmd pero no funciona (funciona --zone=public) Hacerlo 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 8180funciona (pero cada uno firewalld --reloadpierde deshace esto)
djb
@saad: porque aws ya proporciona un servicio de firewall, por lo tanto, el ami puede mantenerse pequeño
roothahn
¡No lo es! ¡He pedido un VPS Centos 7 y tiene iptables por defecto! La versión del sistema operativo: 7.5.1804 (Core)
codezombie
66

Deshabilita firewalld con el siguiente comando:

systemctl disable firewalld

Luego instale iptables-service siguiendo el comando:

yum install iptables-services

Luego habilite iptables como servicios:

systemctl enable iptables

Ahora puede guardar sus reglas de iptable siguiendo el comando:

service iptables save
HosseinGBI
fuente
22

En CentOS 7 Minimal puede que necesite instalar el iptables-servicespaquete (gracias a @RichieACC por la sugerencia ):

sudo yum install -y iptables-services

Y luego habilite el servicio usando systemd:

sudo systemctl enable iptables.service

Y ejecute el initscript para guardar sus reglas de firewall:

sudo /usr/libexec/iptables/iptables.init save
qris
fuente
2

¿Quizás un guión como este hubiera sido útil para alguien?

Tenga en cuenta que perderá todo lo que esté configurado actualmente porque elimina firewalld y elimina las reglas actuales en la tabla 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

Supongo que quiere lo mismo en caso de que su sistema pueda ser alcanzado (ahora o en cualquier momento después) por el tráfico 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
fuente
1

Puede modificar directamente el archivo / etc / sysconfig / iptables. Vuelva a cargar el servicio de iptables para volver a cargar las reglas de ese archivo. Sin embargo, como ya le dijeron, firewalld es el nuevo sistema de firewall predeterminado para Centos, y esta es una buena oportunidad para aprender cómo usarlo, ¿no cree?

drogado
fuente
77
en CentOS7 no hay más un archivo / etc / sysconfig / iptables
roothahn
1
Lo siento @roothahn, pero definitivamente existe ... a menos que te pierdas algunos paquetes, por supuesto. Desde /usr/lib/systemd/system/iptables.service puede ver que lo que realmente se inicia es "/usr/libexec/iptables/iptables.init start", que es el script antiguo y querido habitual que busca el archivo de configuración antiguo habitual en / etc / sysconfig
drogado
1
/etc/sysconfig/iptables, tampoco existe para mí. Sin embargo, /etc/sysconfig/iptables-configexiste. Pero no tiene reglas de cortafuegos en su interior como lo iptablestenía antes el archivo.
Kentgrav
2
Descubrí que el archivo no estaba allí en una instalación predeterminada, mínima tampoco. CentOS 7 no instala iptables.service por defecto, parece. "yum install -y iptables.service" instaló el servicio y creó un / etc / sysconfig / iptables predeterminado para mí.
RichieACC
3
Eso debería ser "yum install iptables-services"
qris