Jak uruchomić / zatrzymać iptables na Ubuntu?


86

Jak mogę uruchomić / zatrzymać usługę iptables na Ubuntu?

próbowałem

 service iptables stop

ale daje „nierozpoznaną usługę” .

Dlaczego to robi? Czy jest jakaś inna metoda?


Myślę, że pewne zamieszanie wynika z takich artykułów: cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux, który dotyczy tylko Fedory / Red Hat i twierdzi, że w /etc/init.d/nim znajdziesz (nie) pomocne jest górny link, który dostajesz, kiedy googlujesz „wyłącz iptables ubuntu”.
— icc97

Odpowiedzi:


76

Nie wiem o „Ubuntu”, ale ogólnie w Linuksie „iptables” nie jest usługą - to polecenie do manipulowania zaporą jądra netfiltra. Możesz „wyłączyć” (lub zatrzymać) zaporę, ustawiając domyślne zasady dla wszystkich standardowych łańcuchów na „AKCEPTUJ” i opróżniając reguły.

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

(Może być konieczne opróżnienie również innych tabel, takich jak „nat”, jeśli z nich korzystałeś)

Poniższy artykuł na stronie Ubuntu opisuje konfigurowanie iptables do użytku z NetworkManager: https://help.ubuntu.com/community/IptablesHowTo


5
Czy to nie wyrzuci na zawsze wszystkich obecnych zasad? Najlepiej zapisać je gdzieś najpierw za pomocą sudo iptables-save> / tmp / rules
— Jens Timmerman

8
To nie zatrzymuje usługi, ale po prostu pozwala na wszystko.
— Frederik Nielsen

1
Ach, dzięki. iptables -Fbrakowało mi :-)
— Cameron

@JensTimmerman iptables-save > /tmp/rulesuratował mi dzień. Dzięki
— blagus,

46

Wszyscy się mylicie :-)

Polecenie, którego szukasz, to:

$ sudo ufw disable

29
pewnie, jeśli mówiliśmy o ufw, ale ten post dotyczy iptables
— webjay,

1
Cóż, założyłem, że była to domyślna instalacja Ubuntu, i że nie ma iptables, ale ma ufw.
— Frederik Nielsen

22
ufw to tylko nakładka na iptables: „Iptables to zapora ogniowa, domyślnie instalowana we wszystkich oficjalnych dystrybucjach Ubuntu (Ubuntu, Kubuntu, Xubuntu). Po zainstalowaniu Ubuntu, iptables jest dostępny, ale domyślnie zezwala na cały ruch. Ubuntu 8.04 with ufw - program do łatwego zarządzania zaporą iptables. ” help.ubuntu.com/community/IptablesHowTo
— benjaoming

2
Być może, ale ponieważ ufw == iptables (mniej więcej) w Ubuntu, wyłączenie ufw jest równoznaczne z wyłączeniem iptables.
— Frederik Nielsen,

2
Najprawdopodobniej OP był faktycznie zainteresowany wyłączeniem zapór ogniowych, zamiast zrozumienia zawiłości usługi iptables do zarządzania zaporami ogniowymi, więc jest to dobra odpowiedź.
— BobDoolittle,

30

Najpierw sprawdziłbym, czy jest on zainstalowany (prawdopodobnie jest):

dpkg -l | grep iptables

W systemie Ubuntu iptables nie jest usługą. Aby go zatrzymać, musisz wykonać następujące czynności:

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

Aby przywrócić poprzednie zasady:

iptables-restore < /root/firewall.rules

Zostało to zaczerpnięte z http://www.cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux/ i zostało przetestowane na wielu instalacjach Ubuntu 8.X i 9.10.


Nie wiem, dlaczego ma tak wiele pozytywnych opinii, iptables to moduł jądra. Nigdy nie jest to „usługa”, którą można „zatrzymać”. Służą do informowania jądra, jak obsługiwać połączenia. Również w środowisku produkcyjnym nigdy nie należy wyłączać zapory. Jeśli coś nie działa, znajdź właściwe rozwiązanie, a nie łatwe.
— Broco,

17

Iptables jest poleceniem, nie jest usługą, więc generalnie nie można używać poleceń takich jak

service iptables start

lub

service iptables stop

w celu uruchomienia i zatrzymania zapory ogniowej, ale niektóre dystrybucje, takie jak centos, zainstalowały usługę o nazwie iptables w celu uruchomienia i zatrzymania zapory ogniowej oraz plik konfiguracyjny do jej skonfigurowania. W każdym razie możliwe jest stworzenie usługi do zarządzania edycją ipotables lub instalowania skryptu dla tego zakresu. Wszystkie usługi w systemie Linux, ubuntu nie jest wyjątkiem, są skryptami wykonywalnymi w folderze /etc/init.d, które implementują standardowy interfejs (start, stop, restart) Możliwy skrypt wygląda następująco:

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

Ten skrypt jest częścią tego samouczka , zgodnie z powyższym skryptem wszystkie polecenia służące do konfigurowania zapory muszą zostać wstawione do pliku /etc/iptables.conf. Skrypt ten należy wstawić do pliku o nazwie iptables w /etc/init.d i umożliwić jego wykonanie za pomocą

chmod+x *iptables* 

i dodaj usługę do poziomów uruchamiania za pomocą

update-rc.d iptables defaults

Możesz dodać nowe reguły z powłoki, reguły te będą natychmiast aktywne i zostaną dodane do /etc/iptables.conf, gdy usługa się zatrzyma (oznacza to, że zostaną zapisane na pewno po zamknięciu systemu).

Mam nadzieję, że będzie to pomocne dla wszystkich.


6

Ponieważ zarówno iptables, jak i ufw są sposobami zarządzania zaporą netfilter w Linuksie, a ponieważ oba są domyślnie dostępne w Ubuntu, możesz użyć albo do uruchomienia i zatrzymania (i zarządzania) regułami zapory.

iptables jest bardziej elastyczny, ale ponieważ ufw zapewnia bardzo prosty język interfejsu dla prostych i typowych funkcji, których możesz użyć:

sudo ufw disable # Aby wyłączyć zaporę

sudo ufw enable # Aby włączyć zaporę ogniową

Aby zobaczyć bieżące ustawienia zapory, użyj sudo ufw status verboselub iptables -L.

Strony z dokumentami społeczności Ubuntu na iptables i UFW zawierają znacznie więcej informacji.


3

Wygląda na to, że istnieje kilka sposobów zarządzania zaporą ogniową w systemie Ubuntu, więc możesz zainteresować się tym: https://help.ubuntu.com/community/IptablesHowTo#Configuration%20on%20startup

Aby usunąć wszystkie obecne reguły, możesz użyć tych poleceń (umieść je w skrypcie):

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

W zwykłym przypadku domyślne reguły zapory są zapisywane w niektórych plikach (na przykład /etc/iptables.rules). Podczas uruchamiania systemu uruchomiono polecenie iptables-restore </etc/iptables.ruleszaładowania reguł zapory. Wykonanie tego samego polecenia po usunięciu wszystkich reguł przy użyciu powyższych poleceń spowoduje „ponowne załadowanie zapory”, o które prosiłeś.


2

Jeśli dobrze pamiętam, sugerowanym sposobem skonfigurowania iptables w przewodnikach Ubuntu jest skonfigurowanie go jako części skryptów sieciowych. co oznacza, że ​​nie ma skryptu /etc/init.d/iptables, tak jak w systemach operacyjnych typu BSD.


Była w Debianie Woodym (czy wtedy Ubuntu istniało?), Zresztą jest nadal wdrażana przez sysadmins. Dlaczego zmienili ten pomysł?

Nie mam pojęcia ... ale wydaje mi się, że pamiętam, że jest to jedna z tych irytujących rzeczy, które musiałem wymyślić, konfigurując serwer Ubuntu 9.10 lub coś w tym stylu ... ponieważ chciałem dystrybucji, która zawierała ostatnio postgres i było dla serwerów ... w przeciwnym razie uruchomię arch Linux.
— ksenoterrakid

2

Utwórz plik na /etc/init.d/

touch fw.rc

Ustaw plik wykonywalny chmod + x

Utwórz dowiązanie symboliczne do tego pliku na /etc/rc2.d/

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

Edytuj S80firewall i dodaj następujące elementy

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

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

Możesz dodać wszystkie niestandardowe reguły iptables do tego pliku

Teraz możesz ponownie uruchomić zaporę (iptables), uruchamiając /etc/rc2.d/S80firewall (musi być rootem)


2

Miałem ten sam problem. W rzeczywistości nie było w nim opcji trwałej w iptables/etc/init.d

Tak więc utworzyłem plik trwały iptables w /etc/init.d

nano /etc/init.d/iptables-persistent

i napisał w środku:

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

a następnie dał chmod 755 pozwolenie.

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

Teraz działa idealnie! Mam nadzieję, że może komuś pomóc.


2

Jeśli korzystasz z serwera Ubuntu jako gość VM (np. W VirtualBox), możesz włączyć libvirt . Jeśli tak, libvirt zawiera wbudowane filtry sieciowe wykorzystujące iptables. Filtry te można skonfigurować zgodnie z opisem w sekcji zapory na filtrach nw .

Aby wyłączyć reguły iptables, musisz albo usunąć wszystkie obraźliwe reguły z libvirt, albo możesz po prostu wyłączyć libvirt, jeśli go nie używasz - np. Zainstaluj konfigurację ręcznego nadpisywania (następnie uruchom ponownie):

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


1

Domyślnie nie ma żadnych, ale w najnowszych pochodnych Debiana (w tym Ubuntu) możesz zainstalować usługę do zarządzania iptables :

sudo apt install iptables-persistent

Następnie możesz załadować wcześniej zapisane reguły:

systemctl start netfilter-persistent

Sprawdź, co się stało:

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.

Lub zatrzymaj usługę:

systemctl stop netfilter-persistent

Zatrzymanie usługi domyślnie nie opróżni iptables (tj. Nie wyłączy zapory, patrz man netfilter-persistent).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.