¿Cómo puedo hacer que el servicio de iptables se inicie automáticamente después de reiniciar en CenOS / RHEL7?


8

Tengo algunos problemas con un servidor doméstico recién instalado que estoy preparando. He instalado CentOS7 en él y descubrí que los puertos 80 y 443 están desactivados de forma predeterminada. Por lo tanto, los agregué a iptables con los siguientes comandos:

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

También instalé el servicio iptable que no estaba presente. El problema es que cada vez que reinicio la máquina se borran las nuevas configuraciones.

Intenté agregar el servicio iptable a chkconfig pero aparece el siguiente error:

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

Supongo que la razón por la que obtengo este error es porque no hay un script iptable en /etc/init.d/, sin embargo, ¿alguien tiene alguna idea si realmente estoy haciendo lo correcto y / o si hay una manera más fácil y sólida de hacerlo? ¿esta? Si no, ¿cómo puedo resolver este problema? Al final, solo necesito usar mi servidor doméstico como servidor web / de correo ...

También he tratado de usar el comando 'systemctl enable iptables' como flemingovirus sugirió amablemente pero sin éxito. Después de ingresar el comando obtuve el siguiente resultado:

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

ACTUALIZACIÓN: He mirado las iptables y el comando "service iptables save" ha funcionado correctamente. El problema parece deberse a que el servicio no comienza al reiniciar. He logrado que el servicio se ejecute al reiniciar después de agregar la siguiente línea a /etc/rc.local

systemctl start  iptables.service

Sin embargo, me pregunto por qué el comando 'systemctl enable iptables' no funciona en este caso. ¿Me estoy perdiendo de algo? Gracias

Respuestas:


6

Aunque esta pregunta es antigua, me encontré con el mismo problema y descubrí la solución aquí .

systemctl mask firewalld
systemctl stop firewalld

Básicamente, firewalld entra en conflicto con iptables y, por lo tanto, evitará que se cargue 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

...

Pude resolver esto enmascarando firewalld para asegurarme de que no se inicia automáticamente y que nunca se iniciará a partir de entonces. Por supuesto, deberá asegurarse de que iptables esté habilitado:

systemctl enable iptables

4

los guiones de inicio se han ido. Ahora es systemctl. Está disponible en todos los documentos de CentOS7. Para chkconfig ipatables o para iniciar el servicio iptables en el inicio, debe usar esto: -

systemctl habilita iptables

Debe consultar cosas simples que debe conocer sobre systemctl en los documentos de Cyberciti en iptables .


Hola, Flemingovirus. Intenté lo que me sugirió y también miré el enlace, pero todavía no funciona. ¿Algunas ideas? gracias
Dave

@Dave, ¿comprobaste dónde está el iptables? ¿Es / sbin / iptables en sí? Comprobar que funciona condpkg -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

no hay dpkg, así que usé rpm en su lugar. ¿Es sensata esta salida? gracias
Dave

1
@Dave la salida de systemctl dice que se ha puesto en marcha. Consulte con un reinicio.
Flemingovirus

0

En primer lugar, debe intentarlo #chkconfig --add /sbin/iptables, reconocerá las "iptables". entonces debe crear un script para su configuración de iptables y luego hacer que ese script se inicie en el arranque. crear un guión:

#!/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

y nombrarlo por ejemplo myfirewall. hacerlo ejecutable con chmod +x myfirewally escribir esto ./myfirewallen /etc/rc.localpara iniciar el script en el arranque.


gracias pero recibo el siguiente error: "error al leer la información en el servicio de iptables: No existe tal archivo o directorio" Además, para mí parece una forma realmente complicada de hacer esto. ¿No hay otra forma de implementar esto en CentOS? Al final solo estoy tratando de usarlo como un servidor web / correo estándar. ¿Cómo se puede usar un servidor web si los puertos 80 y 443 no están abiertos por defecto? ¿Estoy haciendo algo mal?
Dave

iptables está integrado en Centos. Creo que tuvo un problema en la instalación. Por favor, intente $sudo service iptables statusy escriba la salida en el comentario.
amir jj
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.