¿Cómo iniciar / detener iptables en Ubuntu?


86

¿Cómo puedo iniciar / detener el servicio iptables en Ubuntu?

Yo he tratado

 service iptables stop

pero está dando "servicio no reconocido" .

¿Por qué lo está haciendo así? ¿Hay algún otro método?


Creo que parte de la confusión proviene de artículos como este: cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux que solo se aplica a Fedora / Red Hat y afirma que lo encontrarás en /etc/init.d/él (un) es el enlace principal que obtienes cuando buscas en Google 'apaga iptables ubuntu'.
icc97

Respuestas:


76

No sé sobre "Ubuntu", pero en Linux en general, "iptables" no es un servicio, es un comando para manipular el firewall del kernel netfilter. Puede "deshabilitar" (o detener) el firewall configurando las políticas predeterminadas en todas las cadenas estándar en "ACEPTAR" y eliminando las reglas.

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F

(Es posible que también necesite eliminar otras tablas, como "nat", si las ha usado)

El siguiente artículo en el sitio web de Ubuntu describe cómo configurar iptables para usar con NetworkManager: https://help.ubuntu.com/community/IptablesHowTo


55
¿No arrojará esto a la basura todas las reglas actuales para siempre? Lo mejor es guardarlos en algún lugar primero con sudo iptables-save> / tmp / rules
Jens Timmerman

8
Esto no detiene el servicio, sino que solo permite que todo pase.
Frederik Nielsen

1
Ah gracias. iptables -Fera lo que me faltaba :-)
Cameron

@JensTimmerman iptables-save > /tmp/rulesme salvó el día. Gracias
blagus

46

Todos ustedes están equivocados :-)

El comando que estás buscando es:

$ sudo ufw disable

29
seguro si estuviéramos hablando de ufw, pero esta publicación es sobre iptables
webjay

1
Bueno, supuse que era una instalación predeterminada de Ubuntu, y que no tiene iptables, pero tiene ufw.
Frederik Nielsen

22
ufw es solo una interfaz para iptables: "Iptables es un firewall, instalado de manera predeterminada en todas las distribuciones oficiales de Ubuntu (Ubuntu, Kubuntu, Xubuntu). Cuando instala Ubuntu, iptables está allí, pero permite todo el tráfico de forma predeterminada. Ubuntu 8.04 viene con ufw: un programa para administrar fácilmente el firewall de iptables ". help.ubuntu.com/community/IptablesHowTo
benjaoming

2
Puede ser, pero como ufw == iptables (más o menos) en Ubuntu, deshabilitar ufw es igual a deshabilitar iptables.
Frederik Nielsen

2
Lo más probable es que el OP estuviera realmente interesado en deshabilitar los firewalls, en lugar de comprender las complejidades del servicio iptables para administrar los firewalls, por lo que esta es una buena respuesta.
BobDoolittle

30

Primero verificaría si está instalado con (probablemente lo sea):

dpkg -l | grep iptables

En Ubuntu, iptables no es un servicio. Para detenerlo, debe hacer lo siguiente:

sudo iptables-save > /root/firewall.rules
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Para restaurar sus reglas anteriores:

iptables-restore < /root/firewall.rules

Esto fue tomado de http://www.cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux/ y fue probado en muchas instalaciones de Ubuntu 8.X y 9.10.


No sé por qué esto tiene tantos votos positivos, iptables es un módulo del núcleo. Nunca es un "servicio" que se pueda "detener". Se usan para decirle al núcleo cómo manejar las conexiones. Además, en un entorno de producción, nunca debe deshabilitar su firewall. Si algo no funciona, encuentre la solución correcta, no la fácil.
Broco

17

Iptables es un comando, no es un servicio, por lo que generalmente no es posible usar comandos como

service iptables start

o

service iptables stop

para iniciar y detener el firewall, pero algunas distribuciones como centos han instalado un servicio llamado iptables para iniciar y detener el firewall y un archivo de configuración para configurarlo. De todos modos, es posible hacer un servicio para administrar la edición de ipotables o instalar un script para este alcance. Todos los servicios en Linux, ubuntu no es una excepción, son scripts ejecutables dentro de la carpeta /etc/init.d, que implementa una interfaz estándar (iniciar, detener, reiniciar) Un posible script se ve así:

 #!/bin/sh -e
 ### BEGIN INIT INFO
 # Provides:          iptables
 # Required-Start:    mountvirtfs ifupdown $local_fs
 # Default-Start:     S
 # Default-Stop:      0 6
 ### END INIT INFO

 # July 9, 2007
 # James B. Crocker <ubuntu@james.crocker.name>
 # Creative Commons Attribution - Share Alike 3.0 License (BY,SA)
 # Script to load/unload/save iptables firewall settings.

 PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"

 IPTABLES=/sbin/iptables
 IPTABLES_SAVE=/sbin/iptables-save
 IPTABLES_RESTORE=/sbin/iptables-restore

 IPTABLES_CONFIG=/etc/iptables.conf

 [ -x $IPTABLES ] || exit 0

 . /lib/lsb/init-functions


 case "$1" in
 start)
    log_action_begin_msg "Starting firewall"
         type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 120" || true
    if $IPTABLES_RESTORE < $IPTABLES_CONFIG ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
         type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 15" || true
    ;;

 stop)
    log_action_begin_msg "Saving current firewall configuration"
    if $IPTABLES_SAVE > $IPTABLES_CONFIG ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    log_action_begin_msg "Flushing ALL firewall rules from chains!"
    if $IPTABLES -F ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    log_action_begin_msg "Deleting ALL firewall chains [Warning: ACCEPTING ALL PORT SERVICES!]"
    if $IPTABLES -X ; then
        $IPTABLES -P INPUT ACCEPT
        $IPTABLES -P FORWARD ACCEPT
        $IPTABLES -P OUTPUT ACCEPT
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;

 save)
    log_action_begin_msg "Saving current firewall configuration"
    if $IPTABLES_SAVE > $IPTABLES_CONFIG ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;

 force-reload|restart)
    log_action_begin_msg "Reloading firewall configuration [Warning: POTENTIAL NETWORK INSECURITY DURING RELOAD]"
    $IPTABLES -F
    $IPTABLES -X
    if $IPTABLES_RESTORE < $IPTABLES_CONFIG ; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;

 *)
    echo "Usage: /etc/init.d/iptables {start|stop|save|restart|force-reload}"
    exit 1
    ;;
 esac

 exit 0 

Este script es parte de este tutorial , todos los comandos para configurar el firewall deben insertarse, de acuerdo con el script anterior, en el archivo /etc/iptables.conf. Este script debe insertarse en un archivo llamado iptables en /etc/init.d y hacerlo ejecutable usando

chmod+x *iptables* 

y agregue el servicio a niveles de ejecución usando

update-rc.d iptables defaults

Puede agregar nuevas reglas desde el shell, estas reglas estarán inmediatamente activas y se agregarán a /etc/iptables.conf cuando se detenga el servicio (significa que se guardarán con seguridad cuando se cierre el sistema).

Espero que esto sea útil para todos.


6

Debido a que tanto iptables como ufw son formas de administrar el firewall de netfilter en Linux, y debido a que ambos están disponibles por defecto en Ubuntu, puede usar para iniciar y detener (y administrar) las reglas del firewall.

iptables es más flexible, pero debido a que ufw proporciona un lenguaje de interfaz muy simple para una función simple y típica, puede usar:

sudo ufw disable # Para deshabilitar el firewall

sudo ufw enable # Para habilitar el firewall

Para ver la configuración actual del firewall sudo ufw status verbose, use , o iptables -L.

Las páginas de documentos de la Comunidad Ubuntu en iptables y UFW tienen mucha más información.


3

Parece que hay varias formas de administrar el firewall en Ubuntu, por lo que puede estar interesado en leer esto: https://help.ubuntu.com/community/IptablesHowTo#Configuration%20on%20startup

Para descartar todas las reglas actuales, puede usar estos comandos (ponerlos en algún script):

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -F
iptables -t mangle -X
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -F
iptables -t filter -X

En el caso habitual, las reglas de firewall predeterminadas se guardan en algún archivo (por ejemplo, /etc/iptables.rules). Mientras se iptables-restore </etc/iptables.rulesejecuta el comando del sistema ejecutado para cargar las reglas del firewall. Por lo tanto, ejecutar el mismo comando después de descartar todas las reglas usando los comandos anteriores dará como resultado "volver a cargar el firewall" que solicitó.


2

Si recuerdo correctamente, la forma sugerida de configurar iptables en las guías de ubuntu es configurarlo como parte de los scripts de red. lo que significa que no hay un script /etc/init.d/iptables como en los sistemas operativos de estilo BSD.


Había en Debian Woody (¿existía Ubuntu entonces?), De todos modos todavía lo implementan los administradores de sistemas hoy en día. ¿Por qué cambiaron esa idea?

No tengo ni idea ... pero parece recordar que fue una de esas cosas molestas que tuve que resolver cuando configuré ubuntu server 9.10 o algo así ... ya que quería una distribución de lanzamiento que tuviera un postgres reciente y fue para servidores ... de lo contrario ejecuto arch linux.
xenoterracide

2

Cree un archivo en /etc/init.d/

touch fw.rc

Hacer el archivo ejecutable chmod + x

Haga un enlace simbólico a ese archivo en /etc/rc2.d/

ln -s /etc/init.d/fw.rc S80firewall

Edite S80firewall y agregue lo siguiente

iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -F

Puede agregar todas sus reglas personalizadas de iptables en este archivo

Ahora puede reiniciar el firewall (iptables) ejecutando /etc/rc2.d/S80firewall (debe ser root)


2

Tuve el mismo problema. De hecho, no había iptables-persistentes en/etc/init.d

Entonces, creé el archivo iptables-persistent en /etc/init.d

nano /etc/init.d/iptables-persistent

y escribió lo siguiente dentro:

#!/bin/sh
#       Written by Simon Richter <sjr@debian.org>
#       modified by Jonathan Wiltshire <jmw@debian.org>
#       with help from Christoph Anton Mitterer
#

### BEGIN INIT INFO
# Provides:          iptables-persistent
# Required-Start:    mountkernfs $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Start-Before:    $network
# X-Stop-After:      $network
# Short-Description: Set up iptables rules
# Description:       Loads/saves current iptables rules from/to /etc/iptables
#  to provide a persistent rule set during boot time
### END INIT INFO

. /lib/lsb/init-functions

rc=0

load_rules()
{
    log_action_begin_msg "Loading iptables rules"

    #load IPv4 rules
    if [ ! -f /etc/iptables/rules.v4 ]; then
        log_action_cont_msg " skipping IPv4 (no rules to load)"
    else
        log_action_cont_msg " IPv4"
        iptables-restore < /etc/iptables/rules.v4 2> /dev/null
        if [ $? -ne 0 ]; then
            rc=1
        fi
    fi

    #load IPv6 rules    
    if [ ! -f /etc/iptables/rules.v6 ]; then
        log_action_cont_msg " skipping IPv6 (no rules to load)"
    else
        log_action_cont_msg " IPv6"
        ip6tables-restore < /etc/iptables/rules.v6 2> /dev/null
        if [ $? -ne 0 ]; then
            rc=1
        fi
    fi

    log_action_end_msg $rc
}

save_rules()
{
    log_action_begin_msg "Saving rules"

    #save IPv4 rules
    #need at least iptable_filter loaded:
    /sbin/modprobe -q iptable_filter
    if [ ! -f /proc/net/ip_tables_names ]; then
        log_action_cont_msg " skipping IPv4 (no modules loaded)"
    elif [ -x /sbin/iptables-save ]; then
        log_action_cont_msg " IPv4"
        iptables-save > /etc/iptables/rules.v4
        if [ $? -ne 0 ]; then
            rc=1
        fi
    fi

    #save IPv6 rules
    #need at least ip6table_filter loaded:
    /sbin/modprobe -q ip6table_filter
    if [ ! -f /proc/net/ip6_tables_names ]; then
        log_action_cont_msg " skipping IPv6 (no modules loaded)"
    elif [ -x /sbin/ip6tables-save ]; then
        log_action_cont_msg " IPv6"
        ip6tables-save > /etc/iptables/rules.v6
        if [ $? -ne 0 ]; then
            rc=1
        fi
    fi

    log_action_end_msg $rc
}

flush_rules()
{
    log_action_begin_msg "Flushing rules"

    if [ ! -f /proc/net/ip_tables_names ]; then
        log_action_cont_msg " skipping IPv4 (no module loaded)"
    elif [ -x /sbin/iptables ]; then
        log_action_cont_msg " IPv4"
        for param in F Z X; do /sbin/iptables -$param; done
        for table in $(cat /proc/net/ip_tables_names)
        do
            /sbin/iptables -t $table -F
            /sbin/iptables -t $table -Z
            /sbin/iptables -t $table -X
        done
        for chain in INPUT FORWARD OUTPUT
        do
            /sbin/iptables -P $chain ACCEPT
        done
    fi

    if [ ! -f /proc/net/ip6_tables_names ]; then
        log_action_cont_msg " skipping IPv6 (no module loaded)"
    elif [ -x /sbin/ip6tables ]; then
        log_action_cont_msg " IPv6"
        for param in F Z X; do /sbin/ip6tables -$param; done
        for table in $(cat /proc/net/ip6_tables_names)
        do
            /sbin/ip6tables -t $table -F
            /sbin/ip6tables -t $table -Z
            /sbin/ip6tables -t $table -X
        done
        for chain in INPUT FORWARD OUTPUT
        do
            /sbin/ip6tables -P $chain ACCEPT
        done
    fi

    log_action_end_msg 0
}

case "$1" in
start|restart|reload|force-reload)
    load_rules
    ;;
save)
    save_rules
    ;;
stop)
    # Why? because if stop is used, the firewall gets flushed for a variable
    # amount of time during package upgrades, leaving the machine vulnerable
    # It's also not always desirable to flush during purge
    echo "Automatic flushing disabled, use \"flush\" instead of \"stop\""
    ;;
flush)
    flush_rules
    ;;
*)
    echo "Usage: $0 {start|restart|reload|force-reload|save|flush}" >&2
    exit 1
    ;;
esac

exit $rc

y luego le dio permiso a chmod 755.

chmod 755 /etc/init.d/iptables-persistent

¡Ahora funciona perfectamente! Espero que pueda ayudar a alguien.


2

Si está ejecutando el servidor Ubuntu como un invitado VM (por ejemplo, en VirtualBox), entonces libvirt puede estar habilitado. Si es así, libvirt contiene algunos filtros de red incorporados que utilizan iptables. Estos filtros se pueden configurar como se describe en la sección de firewall en nwfilters .

Para deshabilitar las reglas de iptables, necesitará eliminar todas las reglas ofensivas de libvirt, o simplemente puede deshabilitar libvirt si no lo está utilizando, por ejemplo, instale una configuración de anulación manual (luego reinicie):

sudo bash -c 'echo "manual" > /etc/init/libvirt-bin.override'


1

No hay ninguno por defecto, pero en los derivados de Debian recientes (incluido Ubuntu) puede instalar un servicio para administrar iptables :

sudo apt install iptables-persistent

Luego puede cargar las reglas guardadas previamente:

systemctl start netfilter-persistent

Revisa lo que sucedió:

systemctl status netfilter-persistent

netfilter-persistent.service - netfilter persistent configuration

       Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
       Active: active (exited) since Sun 2019-03-24 10:49:50 IST; 16min ago
     Main PID: 1674 (code=exited, status=0/SUCCESS)
        Tasks: 0
       Memory: 0B
          CPU: 0
       CGroup: /system.slice/netfilter-persistent.service

Mar 24 10:49:50 ubuntu systemd[1]: Starting netfilter persistent configuration...
Mar 24 10:49:50 ubuntu netfilter-persistent[1674]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Mar 24 10:49:50 ubuntu netfilter-persistent[1674]: Warning: skipping IPv4 (no rules to load)
Mar 24 10:49:50 ubuntu netfilter-persistent[1674]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Mar 24 10:49:50 ubuntu netfilter-persistent[1674]: Warning: skipping IPv6 (no rules to load)
Mar 24 10:49:50 ubuntu systemd[1]: Started netfilter persistent configuration.
Mar 24 11:02:49 ubuntu systemd[1]: Started netfilter persistent configuration.

O pare el servicio:

systemctl stop netfilter-persistent

Detener el servicio, por defecto, no vaciará iptables (es decir, no deshabilitará el firewall, ver man netfilter-persistent).

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.