●Firewalldの起動
Firewalldを利用するには、サービスを起動しておく必要があります。
●ファイアーウォールゾーンの設定
firewalldは内部的にiptablesを利用しているのですが、firewalldとiptablesを併用することはできません。iptablesを利用する場合はfirewalldを停止しておく必要があり、firewalldを利用する場合はiptablesを停止しておく必要があります。
firewalldは事前にゾーンというものを定義し、そのゾーンに対して許可するサービスを定義していきます。そして定義したゾーンをLinuxサーバ上のNICと紐付けを行います。このゾーンに関してデフォルトで以下のものが定義されています。
デフォルトでは以下のように「public」ゾーンがデフォルトゾーンとしてネットワークインターフェースに適用され、dhcpv6-client、ssh サービスが許可されています。「firewall-cmd」コマンドで様々な操作を行う際に、適用先のゾーン指定(--zone=***)を省略した場合は、このデフォルトゾーンに対して設定が適用されます。
●iptables停止・無効化
FirewallDとiptables は(サービスとしては)併用できないので、起動している場合は停止します。。そして、起動できないように無効化します(自動起動しないdisableにより起動自体できないようにするmaskを使用)。
●定義されているサービスの一覧
定義されているサービスの一覧を表示させます。
●サービスの追加・削除
恒久的に変更する場合は「--permanent」オプションを指定します。「--permanent」を指定しない場合、システムを再起動すると設定は元に戻ってしまいます。下記では、上記でデフォルトのゾーンをexternalにしていることに注意してください。
●ポートの追加・削除
●ICMPパケットのタイプ指定
サービスのみならず許可・拒否するICMPパケットのタイプを指定することもできます。こちらも同様にゾーンを指定しておりますが、デフォルトゾーンの場合は省略可能です。下記の場合、指定するソーンはpublicとなります。
●IPマスカレードの設定
恒久的に設定するには--permanentオプションを使用する。ゾーンを明示的に指定しなければデフォルトゾーンとなります。
●ポートフォワードの設定
恒久的に設定するには--permanentオプションを使用する。ゾーンを明示的に指定しなければデフォルトゾーンとなります。
●特定サービスに接続できるネットワークの設定
FTP及びSSHに接続できるネットワークを設定します。
●その他
参照URL:ダイレクトルールを使ったFirewallの強化
起動時の設定を再読み込みする場合は以下のようにする。
Firewalldを利用するには、サービスを起動しておく必要があります。
# systemctl start firewalld # systemctl enable firewalld
●ファイアーウォールゾーンの設定
firewalldは内部的にiptablesを利用しているのですが、firewalldとiptablesを併用することはできません。iptablesを利用する場合はfirewalldを停止しておく必要があり、firewalldを利用する場合はiptablesを停止しておく必要があります。
firewalldは事前にゾーンというものを定義し、そのゾーンに対して許可するサービスを定義していきます。そして定義したゾーンをLinuxサーバ上のNICと紐付けを行います。このゾーンに関してデフォルトで以下のものが定義されています。
ゾーン | 説明 |
---|---|
block(変更不可) | 全てのパケットを破棄しますが、内部から外部への戻りパケットは許可されます。 |
dmz | デフォルトで「ssh」のみ許可されています。 |
drop(変更不可) | 全てのパケットを破棄します。現実的に使用されることはありません。 |
external | デフォルトで「ssh」のみ許可されています。IPマスカレードが有効になっています。 |
home | デフォルトで「dhcpv6-client」、「ipp-client」、「mdns」、「samba-client」、「ssh」が許可されています。 |
internal | デフォルトで「dhcpv6-client」、「ipp-client」、「mdns」、「samba-client」、「ssh」が許可されています。 |
public | デフォルトゾーンです。デフォルトで「ssh」と「dhcpv6-client」のみ許可されています。 |
trusted(変更不可) | 全てのパケットが許可されます。 |
work | デフォルトで「dhcpv6-client」、「ipp-client」、「 ssh」が許可されています。 |
デフォルトでは以下のように「public」ゾーンがデフォルトゾーンとしてネットワークインターフェースに適用され、dhcpv6-client、ssh サービスが許可されています。「firewall-cmd」コマンドで様々な操作を行う際に、適用先のゾーン指定(--zone=***)を省略した場合は、このデフォルトゾーンに対して設定が適用されます。
デフォルトゾーンを表示 # firewall-cmd --get-default-zone public 現在の設定を表示 # firewall-cmd --list-all public (default, active) interfaces: enp0s25 sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules: 定義されている全てのゾーンを表示 # firewall-cmd --list-all-zones block interfaces: sources: services: ports: masquerade: no forward-ports: icmp-blocks: rich rules: ..... ..... ゾーンを指定して許可されているサービスを表示 # firewall-cmd --list-service --zone=external ssh デフォルトゾーンを変更 # firewall-cmd --set-default-zone=external success
●iptables停止・無効化
FirewallDとiptables は(サービスとしては)併用できないので、起動している場合は停止します。。そして、起動できないように無効化します(自動起動しないdisableにより起動自体できないようにするmaskを使用)。
# systemctl stop iptables # systemctl stop ip6tables # systemctl stop ebtables # systemctl mask iptables Created symlink from /etc/systemd/system/iptables.service to /dev/null. # systemctl mask ip6tables Created symlink from /etc/systemd/system/ip6tables.service to /dev/null. # systemctl mask ebtables Created symlink from /etc/systemd/system/ebtables.service to /dev/null. # systemctl list-unit-files -t service | grep iptables iptables.service masked ← masked であることを確認 # systemctl list-unit-files -t service | grep ip6tables ip6tables.service masked ← masked であることを確認 # systemctl list-unit-files -t service | grep ebtables ebtables.service masked ← masked であることを確認
●定義されているサービスの一覧
定義されているサービスの一覧を表示させます。
# firewall-cmd --get-services RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https 定義されているサービスの定義ファイルは以下のフォルダ内に保管されています 独自に定義を追加する場合は、該当フォルダ内にXMLファイルを追する必要があります # ls /usr/lib/firewalld/services RH-Satellite-6.xml http.xml libvirt-tls.xml pmproxy.xml samba.xml amanda-client.xml https.xml libvirt.xml pmwebapi.xml smtp.xml bacula-client.xml imaps.xml mdns.xml pmwebapis.xml ssh.xml bacula.xml ipp-client.xml mountd.xml pop3s.xml telnet.xml dhcp.xml ipp.xml ms-wbt.xml postgresql.xml tftp-client.xml dhcpv6-client.xml ipsec.xml mysql.xml proxy-dhcp.xml tftp.xml dhcpv6.xml kerberos.xml nfs.xml radius.xml transmission-client.xml dns.xml kpasswd.xml ntp.xml rpc-bind.xml vnc-server.xml ftp.xml ldap.xml openvpn.xml wbem-https.xml high-availability.xml ldaps.xml pmcd.xml samba-client.xml
●サービスの追加・削除
恒久的に変更する場合は「--permanent」オプションを指定します。「--permanent」を指定しない場合、システムを再起動すると設定は元に戻ってしまいます。下記では、上記でデフォルトのゾーンをexternalにしていることに注意してください。
httpを追加する場合の例(設定はすぐに有効となります) # firewall-cmd --add-service=http success # firewall-cmd --list-service dhcpv6-client http ssh httpを削除する場合の例 # firewall-cmd --remove-service=http success # firewall-cmd --list-service dhcpv6-client ssh httpを恒久的に追加する (設定を反映させるためにリロードが必要) # firewall-cmd --add-service=http --permanent success # firewall-cmd --reload success # firewall-cmd --list-service dhcpv6-client http ssh
●ポートの追加・削除
TCP 465を追加する場合の例 # firewall-cmd --add-port=465/tcp success # firewall-cmd --list-port 465/tcp TCP 465を削除する場合の例 # firewall-cmd --remove-port=22/tcp success # firewall-cmd --list-port TCP 465を恒久的に追加する場合の例 (設定を反映させるためにリロードが必要) # firewall-cmd --add-port=465/tcp --permanent success # firewall-cmd --reload success # firewall-cmd --list-port 465/tcp
●ICMPパケットのタイプ指定
サービスのみならず許可・拒否するICMPパケットのタイプを指定することもできます。こちらも同様にゾーンを指定しておりますが、デフォルトゾーンの場合は省略可能です。下記の場合、指定するソーンはpublicとなります。
ICMPタイプの一覧表示 # firewall-cmd --get-icmptypes destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded 禁止されているICMPタイプを表示 # firewall-cmd --list-icmp-blocks --zone=public 禁止されているICMPタイプに追加 # firewall-cmd --add-icmp-block=echo-request --zone=public 恒久的に禁止されているICMPタイプに追加 # firewall-cmd --add-icmp-block=echo-request --zone=public --permanent 禁止されるICMPタイプから削除 # firewall-cmd --remove-icmp-block=echo-request 恒久的に禁止されるICMPタイプから削除 # firewall-cmd --remove-icmp-block=echo-request --permanent
●IPマスカレードの設定
恒久的に設定するには--permanentオプションを使用する。ゾーンを明示的に指定しなければデフォルトゾーンとなります。
publicゾーンでのIPマスカレードの設定を確認する場合 # firewall-cmd --zone=public --list-icmp-blocks publicゾーンでIPマスカレードを有効にする場合 # firewall-cmd --zone=public --add-masquerade publicゾーンでIPマスカレードを無効にする場合 # firewall-cmd --zone=public --remove-masquerade
●ポートフォワードの設定
恒久的に設定するには--permanentオプションを使用する。ゾーンを明示的に指定しなければデフォルトゾーンとなります。
publicゾーンでのポートフォワードの設定を確認する場合 # firewall-cmd --zone=public --list-forward-ports publicゾーンでTCP:80宛のパケットをTCP:8080宛に変更する設定を追加する場合 # firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 publicゾーンにTCP:80宛のパケットをTCP:8080宛に変更する設定が適用されているか確認する場合 # firewall-cmd --zone=public --query-forward-port=port=80:proto=tcp:toport=8080 publicゾーンでTCP:80宛のパケットをTCP:8080宛に変更する設定を削除する場合 # firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080toport=8080の部分はtoaddr=AAA.BBB.CCC.DDDのようにIPアドレスで指定することも可能です。
●特定サービスに接続できるネットワークの設定
FTP及びSSHに接続できるネットワークを設定します。
# firewall-cmd --remove-service=ssh --permanent # firewall-cmd --remove-service=ssh --reload # firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="10.0.0.0/8" service name="ftp" accept" # firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="172.16.0.0/12 " service name="ftp" accept" # firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.0/16" service name="ftp" accept" # firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="10.0.0.0/8" service name="ssh" accept" # firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="172.16.0.0/12 " service name="ssh" accept" # firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.0/16" service name="ssh" accept" # firewall-cmd --reloadFTP及びSSHは設定したネットワーク以外からアクセスできなくなります。
●その他
参照URL:ダイレクトルールを使ったFirewallの強化
起動時の設定を再読み込みする場合は以下のようにする。
コネクショントラッキングのステート情報は初期化しない場合 # firewall-cmd --reload コネクショントラッキングのステート情報も初期化する場合 # firewall-cmd --complete-reloadFirewallの設定を一定時間だけ適用させる場合は以下のようなオプションを使用する。
--timeout=全てのネットワーク通信を遮断するパニックモードの有効・無効化は以下のようにする。
パニックモード有効化 # firewall-cmd --panic-on パニックモード無効化 # firewall-cmd --panic-off