¿Como puedo usar iptables en centos 7? [cerrado]

154

Instalé CentOS 7 con una configuración mínima (herramientas os + dev). Estoy tratando de abrir el puerto 80 para el httpdservicio, pero algo está mal con mi servicio de iptables ... ¿qué tiene de malo? ¿Qué estoy haciendo mal?

# ifconfig/sbin/service iptables save
bash: ifconfig/sbin/service: No such file or directory


# /sbin/service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

# sudo service iptables status
Redirecting to /bin/systemctl status  iptables.service
iptables.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

# /sbin/service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

# sudo service iptables start
Redirecting to /bin/systemctl start  iptables.service
Failed to issue method call: Unit iptables.service failed to load: No such file or directory.
Meiblorn
fuente
intente esto /etc/init.d/iptables save
Satya
8
Tengo la respuesta aquí . RHEL 7 utiliza Firewalld Instad de iptables
Meiblorn

Respuestas:

333

Con RHEL 7 / CentOS 7, se introdujo firewalld para administrar iptables. En mi humilde opinión, firewalld es más adecuado para estaciones de trabajo que para entornos de servidor.

Es posible volver a una configuración de iptables más clásica. Primero, deténgase y enmascare el servicio firewalld:

systemctl stop firewalld
systemctl mask firewalld

Luego, instale el paquete iptables-services:

yum install iptables-services

Habilite el servicio en el momento del arranque:

systemctl enable iptables

Administrar el servicio

systemctl [stop|start|restart] iptables

Puede guardar las reglas de su firewall de la siguiente manera:

service iptables save

o

/usr/libexec/iptables/iptables.init save
Sgaduuw
fuente
55
No está guardando las iptables. Reiniciar el servidor pierde todos los cambios.
roosevelt
2
En mi sistema, las iptables se guardan correctamente. ¿Se ha asegurado de que el servicio de iptables se inicie en el arranque? Puede hacerlo ejecutando 'systemctl enable iptables'
Sgaduuw
1
También puede ejecutar Firewalld, que agregará reglas adicionales de iptables a la lista (cada vez que reinicie el sistema). Para detener Firewalld, ejecuta "systemctl mask firewalld"
TroodoN-Mike
Agregó la información sobre enmascarar Firewalld a la respuesta, como sugirió @ TroodoN-Mike
Sgaduuw
8
@Sgaduuw ¿Puede explicar por qué cree que fitewalld no es / menos adecuado para servidores?
Alexander Groß
98

RHEL y CentOS 7 usan firewall-cmd en lugar de iptables . Deberías usar ese tipo de comando:

# add ssh port as permanent opened port
firewall-cmd --zone=public --add-port=22/tcp --permanent

Luego, puede volver a cargar las reglas para asegurarse de que todo esté bien

firewall-cmd --reload

Esto es mejor que usar iptable-save, espacialmente si planea usar contenedores lxc o docker. Al iniciar los servicios de Docker se agregarán algunas reglas que el comando iptable-save le solicitará. Si guarda el resultado, tendrá muchas reglas que NO deben guardarse. Debido a que los contenedores Docker pueden cambiarlos de direcciones IP en el próximo reinicio.

Firewall-cmd con opción permanente es mejor para eso.

Verifique "man firewall-cmd" o consulte los documentos oficiales de firewalld para ver las opciones. Hay muchas opciones para verificar zonas, configuración, cómo funciona ... la página del manual está realmente completa.

Recomiendo no usar iptables-service desde Centos 7

Metal3d
fuente
1
Gran explicación: funcionó perfectamente para mí. ¡Gracias!
digitalformula
1
firewall-cmd --reload no funciona. Tuve que reiniciar usando "systemctl restart firewalld" para que los cambios surtan efecto.
Basil Musa
"Debido a que Firewalld es dinámico, los cambios en su configuración se pueden hacer en cualquier momento y se implementan de inmediato. No es necesario volver a cargar ninguna parte del firewall, por lo que no hay interrupción involuntaria de las conexiones de red existentes" - de los documentos oficiales de Firewalld
yicone
Eficiente y limpio. Muchas gracias
Vaibhav
17

Tuve el problema de que el reinicio no iniciaría iptables.

Esto lo solucionó:

yum install iptables-services
systemctl mask firewalld
systemctl enable iptables
systemctl enable ip6tables
systemctl stop firewalld
systemctl start iptables
systemctl start ip6tables
par
fuente
En CentOS 7 no funciona: # systemctl start iptablesda Failed to start iptables.service: Unit not found.y # systemctl start ip6tablesdaFailed to start ip6tables.service: Unit not found.
PKHunter
14

Prueba el siguiente comando iptables-save.

João Chambel
fuente
man iptables-save - volcar las reglas de iptables en stdout.
Paul Hargreaves
1
entonces podemos usariptables-save > /etc/sysconfig/iptables
dgregory
5

Modifiqué el /etc/sysconfig/ip6tables-configarchivo cambiando:

IP6TABLES_SAVE_ON_STOP="no"

A:

IP6TABLES_SAVE_ON_STOP="yes"

Y esto:

IP6TABLES_SAVE_ON_RESTART="no"

A:

IP6TABLES_SAVE_ON_RESTART="yes"

Esto pareció guardar los cambios que hice usando los comandos de iptables a través de un reinicio.

Excavado
fuente
1

Coloque la configuración de IPtables en el archivo tradicional y se cargará después del arranque:

/ etc / sysconfig / iptables

BVB Media
fuente
1

El mes pasado intenté configurar iptables en un contenedor LXC VM, pero cada vez que se reiniciaba, la configuración de iptables no se cargaba automáticamente.

La única forma de que funcionara fue ejecutando el siguiente comando:

yum -y instalar iptables-services; systemctl deshabilita firewalld; systemctl mask firewalld; servicio de reinicio de iptables; servicio iptables guardar

BVB Media
fuente
0

Y para agregar, también debe poder hacer lo mismo para ip6tables después de ejecutar el systemctl mask firewalldcomando:

    systemctl start ip6tables.service
    systemctl enable ip6tables.service
jman594
fuente
0

Si lo hace, y está utilizando fail2ban, deberá habilitar los filtros / acciones adecuados:

Pon las siguientes líneas en /etc/fail2ban/jail.d/sshd.local

[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/secure
maxretry = 5
bantime = 86400

Habilitar e iniciar fail2ban:

systemctl enable fail2ban
systemctl start fail2ban

Referencia: http://blog.iopsl.com/fail2ban-on-centos-7-to-protect-ssh-part-ii/

Sebas
fuente