Ubuntuでiptablesを起動/停止する方法は?


86

Ubuntuでiptablesサービスを開始/停止するにはどうすればよいですか?

私が試してみました

 service iptables stop

しかし、それは「認識されないサービス」を提供しています

なぜそうするのですか?他の方法はありますか?


:私は混乱のいくつかは、このような記事から来ていると思いますcyberciti.biz/faq/turn-on-turn-off-firewall-in-linuxのみのFedora / Red Hatのに適用され、あなたがそれを見つけるだろうと主張しない/etc/init.d/こと(un)helpfulは、「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 Webサイトの次の記事では、NetworkManagerで使用するためのiptablesの設定について説明しています。https//help.ubuntu.com/community/IptablesHowTo


5
これにより、現在のすべてのルールが永遠に破棄されることはありませんか?sudo iptablesの保存>を/ tmp /ルールで最初にどこかに保存するのが最適
イェンスTimmerman

8
これはサービスを停止するのではなく、すべてを通過させるだけです。
フレデリックニールセン

1
ああ、ありがとう。iptables -F私が行方不明だったものでした:
キャメロン

@JensTimmerman iptables-save > /tmp/rulesは私の一日を救った。ありがとう
ブラガス

46

あなたはすべて間違っています:-)

探しているコマンドは次のとおりです。

$ sudo ufw disable

29
我々はUFW話していたが、このポストはiptablesの程度であれば確認してください
webjay

1
まあ、私はそれがUbuntuのデフォルトのインストールであり、それはiptablesを持っていませんが、ufwを持っていると仮定しました。
フレデリックニールセン

22
ufwはiptablesの単なるフロントエンドです。「Iptablesはファイアウォールであり、すべての公式Ubuntuディストリビューション(Ubuntu、Kubuntu、Xubuntu)にデフォルトでインストールされます。Ubuntuをインストールすると、iptablesがありますが、デフォルトではすべてのトラフィックが許可されます。 ufwで-iptablesファイアウォールを簡単に管理するためのプログラム。」 help.ubuntu.com/community/IptablesHowTo
benjaoming

2
かもしれませんが、Ubuntuでufw == iptables(ほぼ)であるため、ufwを無効にすることはiptablesを無効にすることと同じです。
フレデリックニールセン

2
おそらく、OPは、ファイアウォールを管理するためのiptablesサービスの複雑さを理解するのではなく、実際にファイアウォールを無効にすることに興味があったので、これは良い答えです。
ボブドゥーリトル

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フォルダー内の実行可能スクリプトであり、標準インターフェース(start、stop、restart)を実装します。可能なスクリプトは次のようになります。

 #!/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ファイルに挿入する必要があります。このスクリプトは、/ etc / init.dのiptablesというファイルに挿入し、次を使用して実行可能にする必要があります。

chmod+x *iptables* 

を使用してランレベルにサービスを追加します

update-rc.d iptables defaults

シェルから新しいルールを追加できます。これらのルールはすぐにアクティブになり、サービスが停止すると/etc/iptables.confに追加されます(システムのシャットダウン時に確実に保存されます)。

これが皆さんの役に立つことを願っています。


6

iptablesとufwはどちらもLinuxでnetfilterファイアウォールを管理する方法であり、Ubuntuでは両方ともデフォルトで利用可能であるため、ファイアウォールルールを開始および停止(および管理)するために使用できます。

iptablesはより柔軟性がありますが、ufwはシンプルで典型的な機能のための非常にシンプルなインターフェース言語を提供するため、以下を使用できます。

sudo ufw disable #ファイアウォールを無効にするには

sudo ufw enable #ファイアウォールを有効にするには

現在のファイアウォール設定を表示するにはsudo ufw status verbose、またはを使用しますiptables -L

iptablesUFWに関するUbuntu Community docsページには、さらに多くの情報があります。


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

私が正しく思い出せば、ubuntuガイドでiptablesをセットアップするための推奨される方法は、ネットワークスクリプトの一部としてセットアップすることです。つまり、BSDスタイルのOSにあるような/etc/init.d/iptablesスクリプトはありません。


Debian Woodyには(当時Ubuntuは存在していましたか?)、とにかく今日でもシステム管理者によって実装されています。なぜ彼らはそのアイデアを変えたのですか?

私は手がかりを持っていません...しかし、ubuntu server 9.10または何かをセットアップしたときに理解しなければならなかったそれらの迷惑なものの1つであることを思い出すようです...最近のpostgresとサーバー用でした...それ以外の場合は、arch linuxを実行します。
xenoterracide

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ルールを追加できます

これで、/ etc / rc2.d / S80firewallを実行してファイアウォール(iptables)を再起動できます(rootである必要があります)


2

同じ問題がありました。実際、iptables-persistentはありませんでした/etc/init.d

そこで、iptables-persistentファイルを作成しました /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サーバーをVMゲスト(VirtualBoxなど)として実行している場合、libvirtが有効になっている可能性があります。その場合、libvirtにはiptablesを利用するいくつかの組み込みネットワークフィルターが含まれています。これらのフィルターは、nwfiltersのファイアウォールセクションで説明されているように構成できます。

iptablesルールを無効にするには、libvirtからすべての問題のあるルールを削除する必要があります。または、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)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.