如何在Ubuntu上启动/停止iptables服务?

我尝试了

 service iptables stop


,但是它提供了“无法识别的服务”。 br />
为什么这样做?还有其他方法吗?

评论

我认为有些困惑来自这样的文章:cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux仅适用于Fedora / Red Hat,确实声称您可以在/中找到它etc / init.d /它是您在谷歌搜索“关闭iptables ubuntu”时获得的最重要的链接。

从Ubuntu 16.04开始,iptables-persistent似乎已被netfilter-persistent取代。安装它。 apt安装netfilter-persistent

#1 楼

我不知道“ 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

评论


这不会永远丢弃所有当前规则吗?最好先将它们保存在sudo iptables-save> / tmp / rules

–詹斯·蒂默曼(Jens Timmerman)
2012-09-21 13:07



这不会停止服务,而只是允许一切通过。

–弗雷德里克·尼尔森(Frederik Nielsen)
2012年10月26日下午6:27

嗯谢谢iptables -F是我所缺少的:-)

–卡梅伦
13年1月7日,下午1:52

@JensTimmerman iptables-save> / tmp / rules保存了我的一天。谢谢

– bla
18年7月12日在17:59

#2 楼

您全都错了:-)

您正在寻找的命令是:

$ sudo ufw disable


评论


确定我们是否在谈论ufw,但是这篇文章是关于iptables的

– webjay
2012年10月26日18:54

好吧,我以为这是Ubuntu的默认安装,并且没有iptables,但是有ufw。

–弗雷德里克·尼尔森(Frederik Nielsen)
2012年10月26日18:58

ufw只是iptables的前端:“ Iptables是防火墙,默认情况下已安装在所有正式的Ubuntu发行版(Ubuntu,Kubuntu,Xubuntu)上。安装Ubuntu时,iptables存在,但默认情况下允许所有流量。Ubuntu 8.04来了ufw-一种易于管理iptables防火墙的程序。” help.ubuntu.com/community/IptablesHowTo

–待命
2012-12-19 18:32



可能是这样,但是就像Ubuntu中的ufw == iptables(或多或少)一样,禁用ufw等同于禁用iptables。

–弗雷德里克·尼尔森(Frederik Nielsen)
2012-12-19 22:21

OP很可能实际上是对禁用防火墙感兴趣,而不是了解用于管理防火墙的iptables服务的复杂性,因此这是一个很好的答案。

–BobDoolittle
2015年10月21日在20:34

#3 楼

我首先检查它是否安装了(可能是):

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是一个内核模块。永远不会“停止”“服务”。它们用于告诉内核如何处理连接。同样,在生产环境中,您永远不要禁用防火墙。如果某些方法不起作用,请找到正确的解决方案,而不是简单的解决方案。

– Broco
16-10-21在17:51

#4 楼

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 "" 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文件中。
此脚本必须插入/etc/init.d中名为iptables的文件中,并使用

chmod+x *iptables* 

使其可执行。
并使用

update-rc.d iptables defaults


将服务添加到运行级别。您可以从shell添加新规则,这些规则将立即生效,并在以下情况下添加到/etc/iptables.conf中:服务停止(这意味着它们将在系统关闭时确保被保存)。

我希望这对每个人都有帮助。

#5 楼

因为iptables和ufw都是在Linux中管理netfilter防火墙的方法,并且由于在Ubuntu中默认都可用,所以您可以使用它们来启动和停止(和管理)防火墙规则。

iptables更加灵活,但是由于ufw提供了非常简单的界面语言来实现简单和典型的功能,因此您可以使用:

sudo ufw disable#禁用防火墙

sudo ufw enable#要启用防火墙

要查看当前的防火墙设置,请使用sudo ufw status verboseiptables -L

有关iptables和UFW的Ubuntu社区文档页面提供了更多信息。

#6 楼

看起来有几种方法可以在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时执行,以加载防火墙规则。因此,在使用上述命令删除所有规则后执行同一命令将导致您要求的“重新加载防火墙”。

#7 楼

如果我没有记错的话,ubuntu指南中建议的设置iptables的方法是将其设置为网络脚本的一部分。这意味着没有像BSD样式的OS那样的/etc/init.d/iptables脚本。

评论


在Debian Woody中(当时是否存在Ubuntu?),无论如何,它今天仍由系统管理员实施。他们为什么改变这个主意?

–user126330
10-4-4,0:50



我不知道...但是我似乎想起来这是我在设置ubuntu server 9.10时必须弄清楚的那些烦人的事情之一...因为我想要一个发布发行版,该发行版具有最新的postgres和是用于服务器...否则我将运行Arch Linux。

– xenoterracide
10-4-4在20:35

#8 楼

在/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规则

现在您可以通过运行/etc/rc2.d/S80firewall(必须是root用户)来重新启动防火墙(iptables)

#9 楼

我遇到了同样的问题。
实际上,/etc/init.d中没有iptables-persistent

因此,我在/etc/init.d中创建了iptables-persistent文件

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 "" 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: 
chmod 755 /etc/init.d/iptables-persistent
{start|restart|reload|force-reload|save|flush}" >&2 exit 1 ;; esac exit $rc


,然后授予chmod 755权限。

q4312078q

现在,它可以完美运行了!希望它能对某人有所帮助。

#10 楼

如果您将Ubuntu服务器作为VM来宾运行(例如在VirtualBox中),则可以启用libvirt。如果是这样,libvirt包含一些利用iptables的内置网络过滤器。可以按照nwfilters的防火墙部分中的说明配置这些过滤器。

要禁用iptables规则,您需要从libvirt中删除所有有问题的规则,或者您可以仅在需要时禁用libvirt不使用它-例如安装手动替代配置(然后重新启动):

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


#11 楼

您正在使用适用于RedHat和CentOS的命令,而不适用于Ubuntu或Debian。

http://www.cyberciti.biz/faq/ubuntu-server-disable-firewall/

#12 楼

默认情况下没有,但是在最近的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)。