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.