Come avviare / arrestare iptables su Ubuntu?


86

Come posso avviare / interrompere il servizio iptables su Ubuntu?

Ho provato

 service iptables stop

ma sta dando "servizio non riconosciuto" .

Perché lo sta facendo? C'è qualche altro metodo?


Penso che parte della confusione provenga da articoli come questo: cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux che si applica solo a Fedora / Red Hat e afferma di trovarlo in /etc/init.d/esso (un) è utile il collegamento principale che si ottiene quando si cerca su google "disattivare iptables ubuntu".
icc97,

Risposte:


76

Non conosco "Ubuntu", ma in Linux generalmente "iptables" non è un servizio, è un comando per manipolare il firewall del kernel netfilter. È possibile "disabilitare" (o arrestare) il firewall impostando i criteri predefiniti su tutte le catene standard su "ACCETTA" e svuotando le regole.

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

(Potrebbe essere necessario svuotare anche altre tabelle, come "nat", se le hai utilizzate)

Il seguente articolo sul sito Web di Ubuntu descrive la configurazione di iptables per l'uso con NetworkManager: https://help.ubuntu.com/community/IptablesHowTo


5
Questo non getterà via tutte le regole attuali per sempre? Meglio salvarli prima da qualche parte con sudo iptables-save> / tmp / rules
Jens Timmerman,

8
Questo non interrompe il servizio, ma consente solo tutto.
Frederik Nielsen,

1
Ah grazie. iptables -Fera quello che mi mancava :-)
Cameron

@JensTimmerman iptables-save > /tmp/rulesmi ha salvato la giornata. Grazie
blagus il

46

Sbagli tutti :-)

Il comando che stai cercando è:

$ sudo ufw disable

29
certo se stessimo parlando di ufw, ma questo post parla di iptables
webjay,

1
Bene, ho pensato che fosse un'installazione predefinita di Ubuntu e che non avesse iptables, ma abbia ufw.
Frederik Nielsen,

22
ufw è solo un frontend per iptables: "Iptables è un firewall, installato di default su tutte le distribuzioni ufficiali di Ubuntu (Ubuntu, Kubuntu, Xubuntu). Quando installi Ubuntu, iptables è lì, ma consente tutto il traffico di default. Ubuntu 8.04 Comes con ufw - un programma per gestire facilmente il firewall iptables ". help.ubuntu.com/community/IptablesHowTo
benjaoming

2
Potrebbe essere, ma come ufw == iptables (più o meno) in Ubuntu, disabilitare ufw equivale a disabilitare iptables.
Frederik Nielsen,

2
Molto probabilmente l'OP era effettivamente interessato a disabilitare i firewall, invece di comprendere la complessità del servizio iptables per la gestione dei firewall, quindi questa è una buona risposta.
BobDoolittle,

30

Vorrei prima verificare se è installato con (probabilmente lo è):

dpkg -l | grep iptables

Su Ubuntu, iptables non è un servizio. Per fermarlo, devi fare quanto segue:

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

Per ripristinare le tue regole precedenti:

iptables-restore < /root/firewall.rules

Questo è stato preso da http://www.cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux/ ed è stato testato su molte installazioni Ubuntu 8.X e 9.10.


Non so perché questo abbia così tanti voti positivi, iptables è un modulo del kernel. Non è mai un "servizio" che può essere "fermato". Sono usati per dire al kernel come gestire le connessioni. Anche in un ambiente di produzione non dovresti mai disabilitare il tuo firewall. Se qualcosa non funziona, trova la soluzione giusta, non quella facile.
Broco,

17

Iptables è un comando non è un servizio, quindi generalmente non è possibile usare comandi come

service iptables start

o

service iptables stop

per avviare e arrestare il firewall, ma alcune distro come centos hanno installato un servizio chiamato iptables per avviare e arrestare il firewall e un file di configurazione per configurarlo. Ad ogni modo è possibile creare un servizio per gestire ipotizzabili modifiche o l'installazione di uno script per questo ambito. Tutti i servizi in Linux, Ubuntu non fa eccezione, sono script eseguibili nella cartella /etc/init.d, che implementa un'interfaccia standard (avvio, arresto, riavvio) Un possibile script è simile al seguente:

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

Questo script fa parte di questo tutorial , tutti i comandi per configurare il firewall devono essere inseriti, secondo lo script sopra, nel file /etc/iptables.conf. Questo script deve essere inserito in un file chiamato iptables in /etc/init.d e renderlo eseguibile usando

chmod+x *iptables* 

e aggiungi il servizio ai runlevel usando

update-rc.d iptables defaults

È possibile aggiungere nuove regole dalla shell, queste saranno immediatamente attive e verranno aggiunte a /etc/iptables.conf quando il servizio si arresta (ciò significa che verranno sicuramente salvate all'arresto del sistema).

Spero che questo possa essere utile a tutti.


6

Poiché sia ​​iptables che ufw sono modi per gestire il firewall netfilter in Linux e poiché entrambi sono disponibili per impostazione predefinita in Ubuntu, è possibile utilizzare sia per avviare e arrestare (e gestire) le regole del firewall.

iptables è più flessibile, ma poiché ufw fornisce un linguaggio di interfaccia molto semplice per una funzione semplice e tipica puoi usare:

sudo ufw disable # Per disabilitare il firewall

sudo ufw enable # Per abilitare il firewall

Per visualizzare le impostazioni del firewall correnti utilizzare sudo ufw status verbose, o iptables -L.

Le pagine dei documenti della comunità Ubuntu su iptables e UFW hanno molte più informazioni.


3

Sembra che ci siano diversi modi per gestire il firewall in Ubuntu, quindi potresti essere interessato a leggere questo: https://help.ubuntu.com/community/IptablesHowTo#Configuration%20on%20startup

Per eliminare tutte le regole correnti è possibile utilizzare questi comandi (inserirli in alcuni 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

Nel solito caso, le regole del firewall predefinite sono state salvate in alcuni file (ad esempio /etc/iptables.rules). Durante l'avvio del comando di sistema iptables-restore </etc/iptables.ruleseseguito per caricare le regole del firewall. Pertanto, eseguendo lo stesso comando dopo aver eliminato tutte le regole utilizzando i comandi sopra, si otterrà il "ricaricamento del firewall" richiesto.


2

Se ricordo correttamente il modo suggerito per configurare iptables nelle guide di Ubuntu è configurarlo come parte degli script di rete. il che significa che non esiste uno script /etc/init.d/iptables come nei sistemi operativi in ​​stile BSD.


C'era in Debian Woody (allora esisteva Ubuntu?), Comunque è ancora implementato dai amministratori di sistema oggi. Perché hanno cambiato questa idea?

Non ne ho idea ... ma mi sembra di ricordare che è una di quelle cose fastidiose che ho dovuto capire quando ho installato Ubuntu Server 9.10 o qualcosa del genere ... dal momento che volevo una distro di rilascio con postgres recenti e era per server ... altrimenti eseguo arch linux.
xenoterracide

2

Crea un file su /etc/init.d/

touch fw.rc

Rendi eseguibile il file chmod + x

Crea un link simbolico a quel file su /etc/rc2.d/

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

Modifica S80firewall e aggiungi quanto segue

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

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

È possibile aggiungere tutte le regole personalizzate di iptables su questo file

Ora puoi riavviare il firewall (iptables) eseguendo /etc/rc2.d/S80firewall (deve essere root)


2

Ho avuto lo stesso problema. In effetti, non vi era alcuna iptables-persistente in/etc/init.d

Quindi, ho creato il file persistente iptables in /etc/init.d

nano /etc/init.d/iptables-persistent

e ha scritto quanto segue all'interno:

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

e poi ha dato il permesso a chmod 755.

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

Ora funziona perfettamente! Spero che possa aiutare qualcuno.


2

Se stai eseguendo il server Ubuntu come guest VM (ad esempio in VirtualBox), libvirt potrebbe essere abilitato. In tal caso libvirt contiene alcuni filtri di rete integrati che utilizzano iptables. Questi filtri possono essere configurati come descritto nella sezione firewall su nwfilters .

Per disabilitare le regole di iptables dovrai o rimuovere tutte le regole offensive da libvirt, oppure puoi semplicemente disabilitare libvirt se non lo stai usando - ad es. Installa una configurazione di sostituzione manuale (quindi riavvia):

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


1

Non ce ne sono di default, ma negli ultimi derivati ​​debian (incluso Ubuntu) è possibile installare un servizio per gestire iptables :

sudo apt install iptables-persistent

È quindi possibile caricare le regole salvate in precedenza:

systemctl start netfilter-persistent

Rivedi cosa è successo:

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 interrompere il servizio:

systemctl stop netfilter-persistent

L'arresto del servizio, per impostazione predefinita, non scaricherà iptables (ovvero non disabiliterà il firewall, vedi man netfilter-persistent).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.