Como iniciar / parar o iptables no Ubuntu?

86

Como posso iniciar / parar o serviço iptables no Ubuntu?

eu tentei

 service iptables stop

mas está dando "serviço não reconhecido" .

Por que está fazendo isso? Existe algum outro método?

splattne
fonte
Eu acho que algumas das confusões vem de artigos como este: cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux que só se aplica para Fedora / Red Hat e tem a pretensão de que você iria encontrá-lo no /etc/init.d/que (in) útil é o link principal que você obtém ao pesquisar no Google 'desativar o iptables ubuntu'.
21813 icc97

Respostas:

76

Eu não sei sobre "Ubuntu", mas no Linux geralmente, "iptables" não é um serviço - é um comando para manipular o firewall do kernel do netfilter. Você pode "desativar" (ou parar) o firewall, definindo as políticas padrão em todas as cadeias padrão como "ACEITAR" e liberando as regras.

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

(Você também pode liberar outras tabelas, como "nat", se você as tiver usado)

O seguinte artigo no site do Ubuntu descreve a configuração do iptables para uso com o NetworkManager: https://help.ubuntu.com/community/IptablesHowTo

JMusgrove
fonte
5
Isso não jogará fora todas as regras atuais para sempre? Melhor para salvá-los em algum lugar primeiro com sudo iptables-save> / tmp / regras
Jens Timmerman
8
Isso não interrompe o serviço, mas permite tudo passar.
Frederik Nielsen
1
Ah obrigada. iptables -Ffoi o que eu estava faltando :-)
Cameron
@JensTimmerman iptables-save > /tmp/rulessalvou meu dia. Graças
Blagus
46

Você está tudo errado :-)

O comando que você está procurando é:

$ sudo ufw disable
Frederik Nielsen
fonte
29
certeza se nós estávamos falando sobre ufw, mas este post é sobre iptables
webjay
1
Bem, eu assumi que era uma instalação padrão do Ubuntu, e que não possui iptables, mas possui ufw.
Frederik Nielsen
22
O ufw é apenas uma interface para o iptables: "O Iptables é um firewall, instalado por padrão em todas as distribuições oficiais do Ubuntu (Ubuntu, Kubuntu, Xubuntu). Quando você instala o Ubuntu, o iptables está lá, mas permite todo o tráfego por padrão. Ubuntu 8.04 Vem with ufw - um programa para gerenciar facilmente o firewall do iptables. " help.ubuntu.com/community/IptablesHowTo
benjaoming 19/12/12
2
Pode ser, mas como ufw == iptables (mais ou menos) no Ubuntu, desabilitar o ufw é igual a desabilitar o iptables.
Frederik Nielsen
2
Provavelmente, o OP estava realmente interessado em desativar os firewalls, em vez de entender os meandros do serviço iptables para gerenciar firewalls, portanto, essa é uma boa resposta.
BobDoolittle
30

Gostaria de verificar primeiro se ele está instalado (provavelmente):

dpkg -l | grep iptables

No Ubuntu, o iptables não é um serviço. Para pará-lo, você deve fazer o seguinte:

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 suas regras anteriores:

iptables-restore < /root/firewall.rules

Isso foi retirado de http://www.cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux/ e foi testado em muitas instalações do Ubuntu 8.X e 9.10.

Embreau
fonte
Não sei por que isso tem tantos upvotes, o iptables é um módulo do kernel. Nunca é um "serviço" que pode ser "parado". Eles são usados ​​para dizer ao kernel como lidar com conexões. Também em um ambiente de produção, você nunca deve desativar seu firewall. Se algo não funcionar, encontre a solução certa, não a mais fácil.
Broco 21/10
17

Iptables é um comando que não é um serviço; portanto, geralmente não é possível usar comandos como

service iptables start

ou

service iptables stop

para iniciar e parar o firewall, mas algumas distros, como o centos, instalaram um serviço chamado iptables para iniciar e parar o firewall e um arquivo de configuração para configurá-lo. De qualquer forma, é possível criar um serviço para gerenciar a edição de ipotables ou instalar um script para esse escopo. Todos os serviços no linux, o ubuntu não são uma exceção, são scripts executáveis ​​dentro da pasta /etc/init.d, que implementam uma interface padrão (iniciar, parar, reiniciar). Um script possível é o seguinte:

 #!/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 <[email protected]>
 # 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 faz parte deste tutorial , todos os comandos para configurar o firewall devem ser inseridos, de acordo com o script acima, no arquivo /etc/iptables.conf. Esse script deve ser inserido em um arquivo chamado iptables em /etc/init.d e torná-lo executável usando

chmod+x *iptables* 

e adicione o serviço aos níveis de execução usando

update-rc.d iptables defaults

Você pode adicionar novas regras a partir do shell, essas regras serão ativadas imediatamente e serão adicionadas ao /etc/iptables.conf quando o serviço for interrompido (significa que elas serão salvas com certeza quando o sistema for desligado).

Espero que isso seja útil para todos.

quebra-cabeça
fonte
6

Como o iptables e o ufw são maneiras de gerenciar o firewall do netfilter no Linux e como ambos estão disponíveis por padrão no Ubuntu, você pode usar para iniciar e parar (e gerenciar) regras de firewall.

O iptables é mais flexível, mas como o ufw fornece uma linguagem de interface muito simples para funções simples e típicas, você pode usar:

sudo ufw disable # Para desativar o firewall

sudo ufw enable # Para habilitar o firewall

Para ver as configurações atuais do firewall, use sudo ufw status verbose, ou iptables -L.

As páginas de documentação da Comunidade Ubuntu no iptables e na UFW têm muito mais informações.

belacqua
fonte
3

Parece que existem várias maneiras de gerenciar o firewall no Ubuntu, então você pode estar interessado em ler o seguinte: https://help.ubuntu.com/community/IptablesHowTo#Configuration%20on%20startup

Para descartar todas as regras atuais, você pode usar estes comandos (coloque-os em algum 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

Normalmente, suas regras de firewall padrão são salvas em algum arquivo (por exemplo, /etc/iptables.rules). Durante a inicialização, o comando do sistema foi iptables-restore </etc/iptables.rulesexecutado para carregar regras de firewall. Portanto, a execução do mesmo comando após a eliminação de todas as regras usando os comandos acima resultará em "recarregar o firewall" solicitado.

Powerman
fonte
2

Se bem me lembro, a maneira sugerida de configurar o iptables nos guias do ubuntu é configurá-lo como parte dos scripts de rede. o que significa que não há script /etc/init.d/iptables como existe nos sistemas operacionais no estilo BSD.

xenoterracida
fonte
Havia no Debian Woody (o Ubuntu existia então?), Mesmo assim ainda é implementado pelos administradores de sistemas hoje. Por que eles mudaram essa ideia?
Eu não tenho idéia ... mas eu me lembro de ter sido uma daquelas coisas irritantes que tive que descobrir quando configurei o servidor ubuntu 9.10 ou algo assim ... desde que eu queria uma distribuição de lançamento que tivesse um postgres recente e era para servidores ... caso contrário, eu corro arch linux.
Xenoterracide
2

Crie um arquivo em /etc/init.d/

touch fw.rc

Tornar o arquivo executável chmod + x

Faça um link simbólico para esse arquivo em /etc/rc2.d/

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

Edite o S80firewall e adicione o seguinte

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

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

Você pode adicionar todas as suas regras personalizadas do iptables neste arquivo

Agora você pode reiniciar o firewall (iptables) executando /etc/rc2.d/S80firewall (deve ser root)

jerichorivera
fonte
2

Eu tive o mesmo problema. De fato, não havia iptables persistente no/etc/init.d

Então, eu criei o arquivo iptables-persistent em /etc/init.d

nano /etc/init.d/iptables-persistent

e escreveu o seguinte dentro:

#!/bin/sh
#       Written by Simon Richter <[email protected]>
#       modified by Jonathan Wiltshire <[email protected]>
#       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

e depois deu permissão chmod 755.

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

Agora funciona perfeitamente! Espero que possa ajudar alguém.

capitainabloc
fonte
2

Se você estiver executando o servidor Ubuntu como convidado da VM (por exemplo, no VirtualBox), a libvirt poderá estar ativada. Nesse caso, o libvirt contém alguns filtros de rede embutidos que utilizam iptables. Esses filtros podem ser configurados conforme descrito na seção de firewall em nwfilters .

Para desabilitar as regras do iptables, você precisará remover todas as regras ofensivas da libvirt ou simplesmente desabilitar a libvirt se não a estiver usando - por exemplo, instale uma configuração de substituição manual (depois reinicie):

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

Por padrão, não há nenhum, mas nos derivados recentes do debian (incluindo o Ubuntu) você pode instalar um serviço para gerenciar o iptables :

sudo apt install iptables-persistent

Você pode carregar as regras salvas anteriormente:

systemctl start netfilter-persistent

Revise o que aconteceu:

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.

Ou pare o serviço:

systemctl stop netfilter-persistent

Parar o serviço, por padrão, não liberará o iptables (ou seja, não desativará o firewall, consulte man netfilter-persistent).

Yogesh
fonte