
mk-mode.com
Linux, Debian, IT, Server, PG, Ruby, Rails, Python, C++, Fortran, PC, MariaDB, math, GIS, etc...
- Ruby City MATSUE
- mk-mode SITE
- mk-mode BLOG (clone)
- mk-mode TUMBLR
- mk-mode EPHEMERIS
- GitHub
CentOS 7.0 - ファイアウォール設定!
Updated:
「CentOS 7.0 - ファイアウォール設定」についての記録です。
(旧バージョンでの作業記録を更新しました。興味がなければスルーしてください)
0. 前提条件
- CentOS 7.0-1406(x86_64) を NetInstall で最小限インストールしている。
- サーバ用途なので、作業は基本的に全て一般ユーザから root になって行う。
- 主に「FirewallD/jp - FedoraProject」を参照。
1. FirewallD 概要
- iptables の設定をフィルタリング機能で管理する。
- iptables の存在を意識する必要がない。
- NIC ポートごとに仮想的なファイアウォールを設置して、それぞれについて受信を許可するポートを指定する形式である。
- 予め用意されているゾーンの中から1つを選択して NIC ポートに適用する。
予め用意はされているが設定変更は可能である。 - 予め用意されているゾーンは以下の9つ
- drop(設定変更してはならない)
外部からのあらゆるパケットを破棄し、返信もしない。外部への接続は可能。 - block(設定変更してはならない)
外部からのあらゆる接続を拒否し、ICMP Prohibited メッセージを返す。内部から開始した接続は可能。 - public
デフォルトのゾーン。指定した外部から接続のみアクセス可能。
デフォルト:dhcpv6-client, ssh - external
外部用。指定した外部から接続のみアクセス可能。IP マスカレードが有効。
デフォルト:ssh - dmz
非武装セグメント用。指定した外部から接続のみアクセス可能。
デフォルト:ssh - work
作業用。指定した外部から接続のみアクセス可能。
デフォルト:dhcpv6-client, ipp-client, ssh - home
ホーム用。指定した外部から接続のみアクセス可能。
デフォルト:dhcpv6-client, ipp-client, mdns, samba-client, ssh - internal
内部用。指定した外部から接続のみアクセス可能。
デフォルト:dhcpv6-client, ipp-client, mdns, samba-client, ssh - trusted(設定変更してはならない)
全ての接続が許可される。
- drop(設定変更してはならない)
- バックエンドで iptables を使用しているとは言っても、サービスとして FirewallD との併用は不可。
1. iptables 停止・無効化
FirewallD と iptables は(サービスとしては)併用できないので、起動している場合は停止する。そして、起動できないように無効化する。
(自動起動しないdisable より起動自体できないようにするmask を使用)
# systemctl stop iptables# systemctl stop ip6tables# systemctl stop ebtables# systemctl mask iptablesln -s '/dev/null' '/etc/systemd/system/iptables.service'# systemctl mask ip6tablesln -s '/dev/null' '/etc/systemd/system/ip6tables.service'# systemctl mask ebtablesln -s '/dev/null' '/etc/systemd/system/ebtables.service'# systemctl list-unit-files -t service | grep iptablesiptables.service masked # <= masked であることを確認# systemctl list-unit-files -t service | grep ip6tablesip6tables.service masked # <= masked であることを確認# systemctl list-unit-files -t service | grep ebtablesebtables.service masked # <= masked であることを確認2. FirewallD 起動
FirewallD が起動していない場合は起動し、マシン起動時に自動起動する設定も行う。
# systemctl start firewalld# systemctl enable firewalldln -s '/usr/lib/systemd/system/firewalld.service' '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'ln -s '/usr/lib/systemd/system/firewalld.service' '/etc/systemd/system/basic.target.wants/firewalld.service'# systemctl list-unit-files -t service | grep firewalldfirewalld.service enabled # <= enabled であることを確認3. FirewallD 稼働状況確認
Loaded: loaded,Active: active (running) であることを確認する。
# systemctl status firewalldfirewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled) Active: active (running) since 火 2014-07-29 21:36:33 JST; 19min ago Main PID: 558 (firewalld) CGroup: /system.slice/firewalld.service └─558 /usr/bin/python -Es /usr/sbin/firewalld --nofork -... 7月 29 21:36:19 vbox.mk-mode.com systemd[1]: Starting firewalld -... 7月 29 21:36:33 vbox.mk-mode.com systemd[1]: Started firewalld - ...Hint: Some lines were ellipsized, use -l to show in full.以下のコマンドでも確認可能。この場合はrunning であることを確認する。
# firewall-cmd --staterunning4. ゾーン設定確認
ゾーンごとの設定を一覧で確認する。
# firewall-cmd --list-all-zonesblock interfaces: sources: services: ports: masquerade: no forward-ports: icmp-blocks: rich rules:dmz interfaces: sources: services: ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:drop interfaces: sources: services: ports: masquerade: no forward-ports: icmp-blocks: rich rules:external interfaces: sources: services: ssh ports: masquerade: yes forward-ports: icmp-blocks: rich rules:home interfaces: sources: services: dhcpv6-client ipp-client mdns samba-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:internal interfaces: sources: services: dhcpv6-client ipp-client mdns samba-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:public (default) interfaces: sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:trusted (active) interfaces: enp0s3 sources: services: ports: masquerade: no forward-ports: icmp-blocks: rich rules:work interfaces: sources: services: dhcpv6-client ipp-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:5. 定義済みサービス名確認
定義済みのサービス名を確認する。
# firewall-cmd --get-servicesamanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftphigh-availability http https imaps ipp ipp-client ipsec kerberos kpasswdldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpnpmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radiusrpc-bind samba samba-client smtp ssh telnet tftp tftp-clienttransmission-client vnc-server wbem-https定義を追加・編集したい場合は “/usr/lib/firewalld/services/” 内の XML ファイルを編集する。(詳細は割愛)
6. 定義済み ICMP 確認
定義済みの ICMP(インターネット制御通知プロトコル)を確認する。
# firewall-cmd --get-icmptypesdestination-unreachable echo-reply echo-request parameter-problemredirect router-advertisement router-solicitation source-quench time-exceeded定義を追加・編集したい場合は “/usr/lib/firewalld/icmptypes/” 内の XML ファイルを編集する。(詳細は割愛)
7. デフォルトゾーンの確認・変更
明示的に指定しない場合は、デフォルトゾーンが自動適用される。
デフォルトゾーンを確認するには以下のようにする。
# firewall-cmd --get-default-zonepublicデフォルトゾーンを変更するには以下のようにする。
# firewall-cmd --set-default-zone=trustedsuccessちなみに、アクティブなゾーンの確認は以下のようにする。
# firewall-cmd --get-active-zonepublic interfaces: enp3s08. ゾーンの明示的な指定
デフォルトゾーン以外を明示的に指定するには以下のようなコマンドを使用する。
(以下は一時的な設定。恒久的に設定するには--permanent オプションを使用する。)
# ** eth1 に適用されているゾーンを除去する場合# firewall-cmd --remove-interface=eth1success# ** eth1 に trusted ゾーンを適用する場合# firewall-cmd --zone=trusted --add-interface=eth1success# ** eth1 に public ゾーンを変更する場合# firewall-cmd --zone=public --change-interface=eth1success# ** eth1 に trusted ゾーンが適用されているか確認する場合# firewall-cmd --zone=trusted --query-interface=eth1yes# ** eth1 に適用されているゾーンを確認する場合# firewall-cmd --get-zone-of-interface=eth1eth1# ** trusted ゾーンが適用されている NIC を確認する場合# firewall-cmd --zone=trusted --list-interfaceseth1さらに、サブネットを指定して適用することも可能である。
# ** 192.168.11.0/24 に適用されているゾーンを除去する場合# firewall-cmd --remove-source=192.168.11.0/24success# ** 192.168.11.0/24 に trusted ゾーンを適用する場合# firewall-cmd --zone=trusted --add-source=192.168.11.0/24success# ** 192.168.11.0/24 に public ゾーンを変更する場合# firewall-cmd --zone=public --change-source=192.168.11.0/24success# ** 192.168.11.0/24 に trusted ゾーンが適用されているか確認する場合# firewall-cmd --zone=trusted --query-source=192.168.11.0/24yes# ** 192.168.11.0/24 に適用されているゾーンを確認する場合# firewall-cmd --get-zone-of-source=192.168.11.0/24eth1# ** trusted ゾーンが適用されているサブネットを確認する場合# firewall-cmd --zone=trusted --list-sourceseth19. サービスの許可
以下は一時的な設定。恒久的に設定するには--permanent オプションを使用する。
また、ゾーンを明示的に指定しなければデフォルトゾーンとなる。
# ** public ゾーンで許可されているサービスの一覧を確認する場合# firewall-cmd --zone=public --list-services# ** public ゾーンに ftp サービスの許可を追加する場合# firewall-cmd --zone=public --add-service=ftp# ** public ゾーンで ftp サービスが許可されているか確認する場合# firewall-cmd --zone=public --query-service=ftp# ** public ゾーンから ftp サービスの許可を削除する場合# firewall-cmd --zone=public --remove-service=ftp10. ポートの許可
以下は一時的な設定。恒久的に設定するには--permanent オプションを使用する。
また、ゾーンを明示的に指定しなければデフォルトゾーンとなる。
# ** public ゾーンで許可されているサービスの一覧を確認する場合# firewall-cmd --zone=public --list-ports# ** public ゾーンにポート TCP:4000 の許可を追加する場合# firewall-cmd --zone=public --add-port=4000/tcpsuccess# ** public ゾーンにポート TCP:4000 〜 4005 の許可を追加する場合# firewall-cmd --zone=public --add-port=4000-4005/tcpsuccess# ** public ゾーンでポート TCP:4000 が許可されているか確認する場合# firewall-cmd --zone=public --query-port=4000/tcpyes# ** public ゾーンからポート TCP:4000 の許可を削除する場合# firewall-cmd --zone=public --remove-port=4000/tcpsuccess11. ICMP の禁止
以下は一時的な設定。恒久的に設定するには--permanent オプションを使用する。
また、ゾーンを明示的に指定しなければデフォルトゾーンとなる。
# ** public ゾーンで禁止されている ICMP の一覧を確認する場合# firewall-cmd --zone=public --list-icmp-blocks# ** public ゾーンに echo-request の禁止を追加する場合# firewall-cmd --zone=public --add-icmp-block=echo-request# ** public ゾーンで echo-request が禁止されているか確認する場合# firewall-cmd --zone=public --query-icmp-block=echo-request# ** public ゾーンから echo-request の禁止を削除する場合# firewall-cmd --zone=public --remove-icmp-block=echo-request12. 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-masquerade13. ポートフォワードの設定
以下は一時的な設定。恒久的に設定するには--permanent オプションを使用する。
また、ゾーンを明示的に指定しなければデフォルトゾーンとなる。
# ** public ゾーンでのポートフォワードの設定を確認する場合# firewall-cmd --zone=public --list-forward-ports# ** public ゾーンで TCP:99 宛のパケットを TCP:8888 宛に変更する設定を追加する場合# firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=8888# ** public ゾーンに TCP:99 宛のパケットを TCP:8888 宛に変更する設定が適用されているか確認する場合# firewall-cmd --zone=public --query-forward-port=port=22:proto=tcp:toport=8888# ** public ゾーンで TCP:99 宛のパケットを TCP:8888 宛に変更する設定を削除する場合# firewall-cmd --zone=public --remove-forward-port=port=22:proto=tcp:toport=8888toport=8888 の部分はtoaddr=AAA.BBB.CCC.DDD のように IP アドレスで指定することも可能。
14. その他
起動時の設定を再読み込みする場合は以下のようにする。
# ** コネクショントラッキングのステート情報は初期化しない場合# firewall-cmd --reload# ** コネクショントラッキングのステート情報も初期化する場合# firewall-cmd --complete-reloadFirewallD の設定を一定時間だけ適用させる場合は以下のようなオプションを使用する。
--timeout=<seconds>全てのネットワーク通信を遮断するパニックモードの有効・無効化は以下のようにする。
# ** パニックモード有効化# firewall-cmd --panic-on# ** パニックモード無効化# firewall-cmd --panic-off以上。
Sponsored Link
Comments
You May Also Enjoy
Debian 13 (trixie) - Windows ファイルサーバ Samba 構築! (2025-11-13)
Debian GNU/Linux 13 (trixie) に Windows 用ファイルサーバ Samba を構築する方法についての記録です。以前古いバージョンでの作業時に残していた記録を参考に作業を行い、今回更新した作業記録を貼付する形式の内容となっています。(当然ながら、興味がなければスルーしてください)
Debian 13 (trixie) - NFS サーバのポート固定! (2025-11-12)
Debian GNU/Linux 13 (trixie) に NFS サーバで使用するポートを固定化する方法についての記録です。以前古いバージョンでの作業時に残していた記録を参考に作業を行い、今回更新した作業記録を貼付する形式の内容となっています。(当然ながら、興味がなければスルーしてください)