Firewall-cmd は、アクティブなファイアウォール領域がないことを示します。なぜ?

Firewall-cmd は、アクティブなファイアウォール領域がないことを示します。なぜ?

firewalldDebian 9に(バージョン)をインストールしました0.4.4.2-1

sudo firewall-cmd --get-active-zones出力は表示されません。echo $?終了ステータスは0()で表示されますEXIT_SUCCESS。なぜ?

ループバックインターフェイスとともに表示されるネットワークインターフェイスがありますeth0ip linklo


私のファイアウォール構成を話す必要があります。現れるほとんどの時間を働いています。 FWIW、基本領域を でpublicMyZoneのように定義して変更しました。

$ sudo cat /etc/firewalld/zones/MyZone.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>My Zone</short>
  <service name="ssh"/>
  <service name="https"/>
  <!-- ... --> 
</zone>

別のコンピュータを使用して接続しようとすると、SSHおよびHTTPSサービスにアクセスできます。ncat -l -p 8000サーバーで実行して接続しようとすると、ncat my-server 8000接続が正しくブロックされます。 (Ncat: No route to host. そして、tcpdumpICMP到達不能応答が生成されたことを示します。「Admin Forbidden」と入力してください)。

firewall-cmd --get-active-zonesMyZoneがアクティブで表示されないのはなぜですか?

$ sudo firewall-cmd --state                                                                                                         
running
$ sudo firewall-cmd --get-active-zones
$ echo $?
0
$ sudo firewall-cmd --get-default-zone
MyZone
$ ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:43:01:c0:ab brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.8/24 brd 172.16.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fd5e:fcf3:b885:0:250:43ff:fe01:c0ab/64 scope global mngtmpaddr dynamic
       valid_lft forever preferred_lft forever
    inet6 fe80::250:43ff:fe01:c0ab/64 scope link
       valid_lft forever preferred_lft forever

firewalld.service警告は記録されません。

$ sudo systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-01-30 13:17:31 GMT; 56min ago
     Docs: man:firewalld(1)
 Main PID: 509 (firewalld)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/firewalld.service
           └─509 /usr/bin/python3 -Es /usr/sbin/firewalld --nofork --nopid

Jan 30 13:17:21 brick systemd[1]: Starting firewalld - dynamic firewall daemon...
Jan 30 13:17:31 brick systemd[1]: Started firewalld - dynamic firewall daemon.

firewalldNetworkManagerで使用することがより望ましいと思います。現在NetworkManagerを実行していません。これはやや脆弱なようです。

https://firewalld.org/documentation/concepts.html

NetworkManagerを使用しない場合は、いくつかの制限があります。ネットワークがすでに起動してからファイアウォールを起動すると、接続および手動で作成されたインターフェイスはそのゾーンにバインドされません。

ところで、インストール後に1回以上再起動してみましたfirewalldsystemdサービスを確認してみました。firewalld.service開始されましたBefore=network-pre.targetnetworking.service開始されましたAfter=network-pre.targetfirewalld以前に開始されたことを確認しましたnetworking.service

$ sudo journalctl -b -u networking -u firewalld
-- Logs begin at Sat 2019-01-26 04:15:01 GMT, end at Wed 2019-01-30 14:15:33 GMT. --
Jan 30 13:17:21 brick systemd[1]: Starting firewalld - dynamic firewall daemon...
Jan 30 13:17:31 brick systemd[1]: Started firewalld - dynamic firewall daemon.
Jan 30 13:17:31 brick systemd[1]: Starting Raise network interfaces...
Jan 30 13:17:37 brick systemd[1]: Started Raise network interfaces.

ifdown手動でネットワークを再起動したり、/を実行したりしないifupでくださいifplugd。カーネルログ(下)は、イーサネットリンクが稼働しており、IPv6が起動後に継続的に実行されていることを示します。

$ sudo dmesg|grep eth0
[    4.082350] mv643xx_eth_port mv643xx_eth_port.0 eth0: port 0 with MAC address 00:50:43:01:c0:ab
[   47.577570] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   49.981569] mv643xx_eth_port mv643xx_eth_port.0 eth0: link up, 1000 Mb/s, full duplex, flow control disabled
[   49.991543] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

DHCPも使用しません。eth0inの構成は/etc/network/interfaces次のとおりです。

auto eth0
iface eth0 inet static
    address 172.16.1.8
    netmask 255.255.255.0
    gateway 172.16.1.1
    dns-nameservers 172.16.1.1

答え1

Firewalld は NetworkManager に依存しません。しかし、使用することをお勧めします

冗談ではありません。

NetworkManagerがない場合、Web文書は2つの異なる場所の構成間の一貫性を複製/維持する必要があると言います。

また、これら2つのうちの1つは、ifcfgDebianには存在しないネットワーク構成システムです。暗黙的にネットワーク管理者ははいDebian では必須です:-).

(すべての情報をまとめてみると、/etc/firewalld/ネットワークインタフェースをインポートしてから手動で起動する場合にのみ繰り返し構成が必要であることが明らかになりました。これには再起動が含まれますが、通常は望ましくありません。)firewalldfirewalldfirewalld

一方では、問題で観察された特定の「主な職業」行動を期待することは公平です。他の文書と追加の観察に基づいて、ベース領域がインターフェイスに適用されると合理的に期待できます。

NetworkManagerを持たないDebianでは、インターフェイスを別のゾーンに割り当てることは実行中のシステムで動作しますが、再起動時には機能しません。

おそらく、ファイアウォールについて「合理的な期待」以上を望んでいるでしょう。firewalldこのような混乱した動作に頼らずに、変更時にテストすることができる「推奨」構成を使用できる場合は、より安心できます。

私はまだRed Hatシステムを含むこれがどのように影響するかについてはまだ混乱しています。ゾーン構成が正しく保存されていないと、firewall-cmd --permanent --add-interface=...文字通り「」結果が表示される可能性があり、非常に混乱しています。success


関連する引用は次のとおりですman firewalld

NetworkManagerを使用せずにネットワーク起動後にファイアウォールを起動すると、接続および手動で作成されたインターフェイスはifcfgファイルで指定された領域にバインドされません。インターフェイスはデフォルト領域で自動的に処理されます。また、ファイアウォールはネットワークデバイス名の変更に関する通知を受け取りません。設定されている場合、NM_CONTROLLED=noこれらの内容はすべてNetworkManagerによって制御されないインターフェイスにも適用されます。

次のコマンドを使用して、これらのインターフェイスをゾーンに追加できます。

firewall-cmd [--permanent] --zone=zone --add-interface=interface

/etc/sysconfig/network-scripts/ifcfg-interfaceファイルが存在する場合、Firewalld はZONE=zoneファイルの設定を変更しようとします。

Firewalldが再ロードされると、NetworkManagerによって制御されないインターフェイスの場合は、インターフェイスバインディングを確実に維持するために、再ロードする前にインターフェイスバインディングを復元します。ファイアウォールサービスを再起動すると、このメカニズムは不可能です。

ZONE=NetworkManagerによって制御されないインターフェイスの場合は、ifcfgファイルの設定をファイアウォールのバインディングと一貫して維持する必要があります。

実験として、私は言及されたコマンドを試しました。

$ sudo firewall-cmd --zone=MyZone --add-interface=eth0
$ sudo firewall-cmd --get-active-zones
MyZone:
  interfaces: eth0

この動作は私のネットワークインターフェイスですfirewalld。しかし、ネットワークインターフェイスがfirewalld

ページは、ネットワークインターフェイスの起動時にコールバックの受信に依存しているmanように聞こえます。それはRed Hatのネットワーキングシステムです。私のDebianシステムにはインストールされていません。 Debianパッケージはそれに対応する機能を提供していないようです。そのため、「インターフェースはデフォルト領域で自動的に処理されます」にダウングレードします。firewalldifcfgifcfgfirewalld

sudo iptables-save.iptablesによって生成されたiptables(IPv4のみ)ルールを表示するために実行されましたfirewalld。手動で実行しなかった場合はfirewall-cmd --add-interface...言及されていませんeth0。ただし、正しく読み取ると、ルールはデフォルト領域のルールを使用してこれらのパケットをフォールバックとして扱います。

答え2

構成ファイルを入れていない/usr/lib/firewalld/zonesか、/etc/firewalld/zones構成された領域がない場合。あなたが持っているのは一般的なファイアウォールだけです。持っているルールに応じてまだ機能しますが、パブリックゾーンからプライベートゾーンまたは他の設定したゾーンに切り替えることはできず、ルールは自動的に変更されます。

また、GUIを使用してファイアウォールを構成する場合は、これらのディレクトリを確認して、設定した設定が実際に正しいことを確認してください。

設定ファイルを手動でここに配置した場合、またはGUI設定マネージャが設定した領域のファイルを正常に配置した場合は不明です。

Firewalldは、Linuxオペレーティングシステム用のファイアウォール管理ツールです。これは、iptablesコマンドを介してLinuxカーネルのnetfilterフレームワークのフロントエンドとして機能し、iptablesサービスの代替として機能し、ファイアウォール機能を提供します。

確認: iptables -S、そこに何がありますか?ルールがリストされている場合は、ユニバーサルファイアウォールです!ファイアウォールを持つためにファイアウォールは必要なく、iptablesを手動で編集するだけです。

iptables-persistentその後、編集するたびにルールをインストールして保存します。netfilter-persistent save

ほとんどのシステムのデフォルトポリシーは(PUBLIC)です。

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

その後、チェーンの形でルールを洗練させることができます。

  • 通事論:

    iptables -A INPUT/FORWARD/OUTPUT <interface> <port type> <state> <port> <what to do if match>
    

例:(デフォルトポートからのすべての着信SSHを許可するのは安全ではありません。)

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

関連情報