Як запустити / зупинити iptables на Ubuntu?


86

Як я можу запустити / зупинити службу iptables на Ubuntu?

я намагався

 service iptables stop

але це надання "невизнаної послуги" .

Чому це робиться? Чи є якийсь інший метод?


Я думаю, що деяка плутанина походить з таких статей: cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux, яка стосується лише Fedora / Red Hat і стверджує, що ви знайдете її в /etc/init.d/ній (не) корисно - це верхнє посилання, яке ви отримуєте, коли googling 'вимкнути iptables ubuntu'.
icc97

Відповіді:


76

Я не знаю про "Ubuntu", але в Linux "iptables" - це не послуга - це команда маніпулювати брандмауером ядра netfilter. Ви можете "відключити" (або зупинити) брандмауер, встановивши політику за замовчуванням для всіх стандартних ланцюгів на "ACCEPT" та промивши правила.

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

(Можливо, вам доведеться промивати й інші таблиці, наприклад, "nat", якщо ви їх використовували)

Наступна стаття на веб-сайті Ubuntu описує налаштування iptables для використання з NetworkManager: https://help.ubuntu.com/community/IptablesHowTo


5
Чи не відкине це назавжди правила? Найкраще зберегти їх десь спочатку за допомогою sudo iptables-save> / tmp / правила
Jens Timmerman

8
Це не зупиняє послугу, а просто дозволяє все наскрізь.
Фредерік Нільсен

1
А, дякую. iptables -Fщо мені не вистачало :-)
Камерон

@JensTimmerman iptables-save > /tmp/rulesврятував мені день. Спасибі
blagus

46

Ви всі помиляєтесь :-)

Команда, яку ви шукаєте:

$ sudo ufw disable

29
звичайно, якщо ми говорили про ufw, але це повідомлення про iptables
webjay

1
Ну, я припустив, що це встановлення Ubuntu за замовчуванням, і що у нього немає iptables, але є ufw.
Фредерік Нільсен

22
ufw - це лише фронтенд для iptables: "Iptables - це брандмауер, встановлений за замовчуванням на всіх офіційних дистрибутивах Ubuntu (Ubuntu, Kubuntu, Xubuntu). Коли ви встановлюєте Ubuntu, iptables є, але він дозволяє весь трафік за замовчуванням. Ubuntu 8.04 приходить з ufw - програма для управління брандмауером iptables легко. " help.ubuntu.com/community/IptablesHowTo
benjaoming

2
Можливо, але як ufw == iptables (більше або менше) в Ubuntu, відключення ufw дорівнює вимкненню iptables.
Фредерік Нільсен

2
Швидше за все, ОП насправді була зацікавлена ​​у відключенні брандмауерів, замість того, щоб зрозуміти тонкощі служби iptables для управління брандмауерами, тож це хороша відповідь.
BobDoolittle

30

Я спершу перевіряю, чи встановлено він (мабуть, так):

dpkg -l | grep iptables

На Ubuntu iptables не є послугою. Для того, щоб зупинити це, вам потрібно зробити наступне:

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

Щоб відновити свої попередні правила:

iptables-restore < /root/firewall.rules

Це було взято з http://www.cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux/ і було протестовано на багатьох установках Ubuntu 8.X та 9.10.


Я не знаю, чому це так багато оновлень, iptables - це модуль ядра. Це ніколи не "послуга", яку можна "зупинити". Вони використовуються для того, щоб розповісти ядру, як обробляти з'єднання. Також у виробничих умовах ніколи не слід вимикати брандмауер. Якщо щось не працює, знайдіть правильне рішення, не найлегше.
Броко

17

Iptables - це команда, яка не є сервісом, тому, як правило, не можна використовувати такі команди

service iptables start

або

service iptables stop

щоб запустити і зупинити брандмауер, але деякі дистрибутиви, такі як centos, встановили службу під назвою iptables, щоб запустити і зупинити брандмауер та файл конфігурації для його налаштування. У будь-якому випадку можна створити службу для управління редагуванням ipotables або встановленням сценарію для цієї області. Усі сервіси в Linux, ubuntu не є винятком, - це виконувані сценарії всередині папки /etc/init.d, які реалізують стандартний інтерфейс (запуск, зупинка, перезапуск) Можливий сценарій виглядає так:

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

Цей скрипт є частиною цього підручника , всі команди для налаштування брандмауера повинні бути вставлені, відповідно до вищезазначеного сценарію, у файл /etc/iptables.conf. Цей скрипт повинен бути вставлений у файл під назвою iptables в /etc/init.d і зробити його виконуваним за допомогою

chmod+x *iptables* 

і додайте послугу до рівня запуску за допомогою

update-rc.d iptables defaults

Ви можете додати нові правила з оболонки, ці правила будуть негайно активними та будуть додані до /etc/iptables.conf, коли служба припиняється (це означає, що вони будуть збережені напевно при відключенні системи).

Я сподіваюся, що це буде корисно всім.


6

Оскільки iptables та ufw - це способи керування брандмауером netfilter в Linux, а тому, що обидва доступні за замовчуванням у Ubuntu, ви можете використовувати або для запуску та зупинки (і управління) правилами брандмауера.

iptables є більш гнучким, але, оскільки ufw забезпечує дуже просту мову інтерфейсу для простої та типової функції, ви можете використовувати:

sudo ufw disable # Відключення брандмауера

sudo ufw enable # Щоб увімкнути брандмауер

Щоб переглянути поточні налаштування брандмауера sudo ufw status verbose, або iptables -L.

На сторінках документів спільноти Ubuntu на iptables та UFW є набагато більше інформації.


3

Схоже, існує кілька способів управління брандмауером в Ubuntu, тому вам може бути цікаво прочитати це: https://help.ubuntu.com/community/IptablesHowTo#Configuration%20on%20startup

Щоб скинути всі поточні правила, ви можете скористатися цими командами (помістіть їх у якийсь сценарій):

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

У звичайному випадку правила брандмауера за замовчуванням зберігаються в якомусь файлі (наприклад, /etc/iptables.rules). Під час завантаження системи команда iptables-restore </etc/iptables.rulesвиконується для завантаження правил брандмауера. Отже, виконання тієї самої команди після того, як ви скинете всі правила, використовуючи вищезазначені команди, призведе до "перезавантаження брандмауера", про який ви просили.


2

Якщо я правильно пригадую, запропонований спосіб налаштування iptables в посібниках для ubuntu - це налаштування його як частини мережевих сценаріїв. що означає, що немає /etc/init.d/iptables сценарію, як у ОС BSD.


Був у Debian Woody (чи існував Ubuntu тоді?), Так чи інакше його сьогодні реалізовують sysadmins. Чому вони змінили цю ідею?

Я не знаю ... але, здається, я пам'ятаю, що це одна з тих дратівливих речей, які мені довелося з'ясувати, коли я налаштовував сервер ubuntu 9.10 чи щось таке ... так як я хотів дистрибутиву випуску, який мав нещодавні постгреси та був для серверів ... інакше я запускаю arch linux.
ксенотеррацид

2

Створіть файл на /etc/init.d/

touch fw.rc

Зробіть файл виконуваним chmod + x

Зробіть символьне посилання на цей файл на /etc/rc2.d/

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

Відредагуйте S80firewall та додайте наступне

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

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

Ви можете додати всі власні правила iptables у цей файл

Тепер ви можете перезапустити брандмауер (iptables), запустивши /etc/rc2.d/S80firewall (повинен бути root)


2

У мене було те саме питання. Насправді, в ньому не було стійких iptables/etc/init.d

Отже, я створив стійкий iptables файл в /etc/init.d

nano /etc/init.d/iptables-persistent

і написав всередині:

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

а потім дав chmod 755 дозвіл.

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

Зараз це працює чудово! Сподіваюся, це може комусь допомогти.


2

Якщо ви використовуєте сервер Ubuntu як гість ВМ (наприклад, у VirtualBox), тоді може бути включено libvirt . Якщо так, libvirt містить деякі вбудовані мережеві фільтри, які використовують iptables. Ці фільтри можуть бути налаштовані так, як описано в розділі брандмауера на nwfilters .

Щоб вимкнути правила iptables, вам потрібно буде видалити всі порушуючі правила з libvirt, або ви можете просто відключити libvirt, якщо ви його не використовуєте - наприклад, встановіть конфігурацію заміни вручну (потім перезавантажте):

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


1

За замовчуванням його немає, але в останніх похідних debian (включаючи Ubuntu) ви можете встановити службу для управління iptables :

sudo apt install iptables-persistent

Потім можна завантажити раніше збережені правила:

systemctl start netfilter-persistent

Перегляньте те, що сталося:

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.

Або зупиніть послугу:

systemctl stop netfilter-persistent

Припинення послуги за замовчуванням не змиває iptables (тобто не вимикає брандмауер, див. man netfilter-persistent).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.