web-dev-qa-db-ja.com

KVMホスト-iptables-persistentが無視されている上でIPTablesを設定する方法

いくつかのKVMゲストを実行するubuntu14.04.1ホストでいくつかの特定のIPTablesルールを設定しようとしています。

ボックスには複数のIPアドレスを持つ複数のNICがあり、ゲストは機能に基づいて異なるアドレスを使用します。

私は通常、これを実現するためにiptables-persistentを使用しますが、何らかの理由で、/ etc/iptables /rules.v4の下のルールが起動時にロードされていません。 iptables-persistentは、libvirtがインストールされていない場合に正しく機能します。

'/etc/init.d/iptables-persistent start'を実行すると、ルールが読み込まれ、セットアップは期待どおりになります。しかし、起動時にはそうではありません。これをデバッグするために非常に単純なrules.v4ファイルを作成しようとしましたが、まだロードされていません。

Iptables-persistentのinitシンボリックリンクは/etc/rc2.d/S37iptables-persistentにあります

Ufwが無効になっていることを確認しました。また、/ etc/libvirt/nwfilterからnwfilterルールを削除しましたが、virshnwfilter-listにエントリが表示されません。

他に何がこれらのルールを設定している可能性があり、どのようにカスタマイズするのか考えていますか?

fwステータス出力

# ufw status
Status: inactive

virsh nwfilter-list output

# virsh nwfilter-list
 UUID                                  Name                 
------------------------------------------------------------------

/ etc/iptables/rules.v4のコンテンツ

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:LOG_AND_DROP - [0:0]
-A INPUT -s 192.168.10.0/24 -i br0 -j ACCEPT
-A INPUT -s 192.168.11.0/24 -i br0 -j ACCEPT
-A LOG_AND_DROP -j LOG --log-prefix "iptables deny: " --log-level 7
-A LOG_AND_DROP -j DROP
COMMIT

起動後のiptables -L -nの出力(望ましくない結果)

# iptables -L -n -v
Chain INPUT (policy ACCEPT 12 packets, 912 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
    0     0 ACCEPT     udp  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
    0     0 ACCEPT     udp  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
  193 17300 ACCEPT     all  --  br0    *       192.168.10.0/24      0.0.0.0/0           
    0     0 ACCEPT     all  --  br0    *       192.168.11.0/24      0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0           
    0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 ACCEPT     all  --  tunnelbr0 tunnelbr0  0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      tunnelbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 ACCEPT     all  --  mgmtbr0 mgmtbr0  0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      mgmtbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 132 packets, 17456 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68
    0     0 ACCEPT     udp  --  *      tunnelbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68
    0     0 ACCEPT     udp  --  *      mgmtbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68

Chain LOG_AND_DROP (0 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 7 prefix "iptables deny: "
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0 

/ etc/init.d/iptablesを実行した後のiptables -L -n -vの出力-永続的な開始(期待される結果)

# iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   13   920 ACCEPT     all  --  br0    *       192.168.10.0/24      0.0.0.0/0           
    0     0 ACCEPT     all  --  br0    *       192.168.11.0/24      0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 8 packets, 1104 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain LOG_AND_DROP (0 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 7 prefix "iptables deny: "
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           
3

表示されているすべての「追加」ルールは、仮想マシンゲストの仮想ネットワークをサポート(および保護)するためにlibvirtデーモンによって追加されました。通常、これらのルールについて心配する必要はありません(また、次回の起動時に複製されるため、これらのルールを永続化しようとしないでください)。

また、すべての永続的なファイアウォールルールだったがファイアウォールに追加されたことも明らかです。

ʻiptablesコマンドの重要な-vスイッチがなければ、これらの事実のいずれかを識別することは困難と不可能の間でした。

2
Michael Hampton

/ etc/network/interfacesで「pre-up」ディレクティブをチェックインしましたか?これは次のようになります。

pre-up iptables-restore < /etc/iptables.rules

Ubuntu/Debianでのもう1つの可能性は、スクリプトが/etc/network/if-pre-up.d/ディレクトリにあるため、そのディレクトリの内容をリストする必要があることです。

# ls -al /etc/network/if-pre-up.d/

もう1つの可能性は、NetworkManagerがルールをロードすることです。これは、次のディレクトリでファイアウォール/ iptablesを検索することで確認できます。

/etc/NetworkManager/dispatcher.d/

また、/ etc/initおよび/etc/init.d内のすべてのスクリプトで「iptables」および「iptables-restore」を確認してください。

0
Jakov Sosic