ハマる前に理解する「Firewalld」の設定方法、「iptables」との違い:CentOS 7で始める最新Linux管理入門(4)(3/4 ページ)
システム管理に関する部分が前バージョンから大きく変更された「CentOS 7」は、Linuxに慣れていても「ハマる落とし穴」が幾つかあります。今回は、CentOS 7で採用されたパケットフィルタリングのための新たな仕組みである「Firewalld」の基礎と運用方法を解説します。
「firewall-cmd」を用いたパケットフィルタリングの設定方法
ここから、Firewalldのルール設定のための代表的なコマンドとその出力結果例を解説していきます。ルールの設定は、「firewall-cmd」コマンドで行います。
ちなみに、「firewall-cmd --get-services」以外のコマンドに共通するコマンドの作法として、「--zone」オプションを省略すると、初期設定ではpublicゾーンが対象になります。また、起動時に設定対象とするゾーンを変更するには「--permanent」オプションを追加します。
では、「public」ゾーンへルールを設定してみます。
定義されているサービスの一覧を表示する
# firewall-cmd --get-services
# firewall-cmd --get-services RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target 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 rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https
このように登録済みのサービス一覧が表示されます。上記は、CentOS 7.2を新規インストールしたときにあらかじめ設定されているサービスの一覧です。
許可されているサービスを表示する
# firewall-cmd --list-services --zone=public
# firewall-cmd --list-services --zone=public dhcpv6-client ssh
「public」ゾーンのINPUT通信は、「dhcpv6-client」と「ssh」の二つが許可されていることが分かります。
許可するサービスを追加する
# firewall-cmd --add-service=http --zone=public
# firewall-cmd --add-service=http --zone=public success
上記は「public」ゾーンへ、「http」サービスを追加した例です。設定に成功すると「success」と表示されます。
参考までに、同じ作業をiptablesで行うコマンドと比べてみましょう。ここでは、差異が分かりやすいよう「ssh接続を許可する」例を挙げます。
# firewall-cmd --add-service=ssh --zone=public
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
Firewalldでは、許可したいサービスを、どのゾーンに追加するか、という自然言語に近い記述で済みます。一方のiptablesのコマンドは、慣れていなければ、何を記述したのかも理解できないと思います。セッションの処理やプロトコル、ポート番号を把握した上で、具体的に記述する必要があるからです。「TCP/IPの仕組みを理解していないと難しい」「コマンドオプションが複雑」といったiptablesの幾つかの課題は、Firewalldで解消されることが分かります。
指定のサービスが許可されたかを確認する
# firewall-cmd --query-service=http --zone=public
# firewall-cmd --query-service=http --zone=public yes
先ほど追加した「http」が正しく許可ルールに設定されたかを、このコマンドで確認できます。許可されていたならば、「yes」と表示されます。
許可するサービスを削除する
# firewall-cmd --remove-service=http --zone=public
# firewall-cmd --remove-service=http --zone=public success
「http」を「public」ゾーンの許可ルールから削除しました。設定に成功すると「success」と表示されます。
インタフェースの「ゾーン」を変更して設定する
「public」ゾーン以外のゾーンを指定して設定することもできます。
# nmcli con mod [インタフェース名] connection.zone [ゾーン名]
例えば、NIC「enp3s0」を「internal」ゾーンに設定する場合は、以下のように記述します。
# nmcli con mod enp3s0 connection.zone internal (何も表示されない)
コマンドを実行して正常終了した場合は、特に何も表示されません。このため、設定が正しく反映されたか下記のコマンドで確認します。
# firewall-cmd --get-zone-of-interface=enp3s0 internal
enp3s0は「Internal」ゾーンに変更されていることが確認できました。
ワンポイント
ゾーンはfirewall-cmdコマンドでも変更できますが、ゾーンの変更に関してのみ、前述した--permanentオプションを付与しても永続的な設定になりません。そのため、永続的な設定にするには、nmcliコマンドを用いて変更します。
個別に「ゾーン」を作成する
先述した通り、Firewalldにはあらかじめ9種類のゾーンが用意されていますが、個別にゾーンを作成して、そこへ定義することも可能です。
例えば、「個別に接続元IPアドレスを制限したい」といった場合に有効です。既にあるゾーンを対象に設定を変更しても構いませんが、別のゾーンを用意することで、システム管理者がカスタマイズしたことを明示できます。今後の管理がしやすくなると思います。
では、追加ゾーン「custom」を作ってみましょう。
(1)publicゾーンの内容をコピーして、「custom」ゾーンとして使うためのひな型を作成する
# cp /usr/lib/firewalld/zones/public.xml /etc/firewalld/zones/custom.xml
(2)作成したゾーンファイルをコマンドで扱えるようにするために、リロードする
# firewall-cmd --reload
(3)新設した「custom」ゾーンへ、特定のIPアドレスにだけ「http」を許可するようルールを追加する
# firewall-cmd --permanent --add-source=192.168.0.0/24 --zone=custom # firewall-cmd --permanent --add-service=http --zone=custom # firewall-cmd --reload
ゾーンとインタフェースの定義は、前述の通りnmcliコマンドで行います。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- いまさら聞けないLinuxの基礎知識
Linuxを勉強してみたいけど、どこから手を付けてよいか分からない、何だかよく分からないまま使っている……そんな方々のための連載です。まずは、Linuxとはどんなものなのか確認しましょう。 - ステートフルパケットフィルタを使ったサービスの公開
初心者にとって、iptablesは設定が最も困難な機能の1つである。そこで、学習の第1歩としてテンプレートを自分の環境に合わせて修正することから始めよう。(編集部) - CentOS 7のシステム管理「systemd」をイチから理解する
「systemd」は、Linuxの起動処理やシステム管理を行う仕組みです。systemdはinitの限界を克服するために作られた新しいシステム管理アーキテクチャで、CentOS 7でも用います。では、何が違うのでしょう。これまで使われてきた「init」と比較しながら、基礎と課題を解説します。 - NetworkManagerをコマンドラインから操作するには? nmcliコマンド
従来Linuxでは、ネットワークの状態確認やデバイスの設定など機能ごとにコマンドを使い分けていましたが、Red Hat Enterprise LinuxおよびCentOSには、統合ツールとして「NetworkManager」およびCLI版の「nmcli」が用意されています。 - Linux起動の仕組みを理解しよう[init/inittab編]
カーネルが呼び出されてからログインプロンプトが表示されるまでの間に、一体どのような処理が行われているのか。これを理解するには、この部分の全般をつかさどるinitとその設定ファイルであるinittabがカギとなる。 - エンタープライズでもInfrastructure as Code――Chef 12/Chef-Zero/Knife-Zeroの基礎知識とインストール
エンタープライズ向け機能が充実してきたChefを使って高速かつ精度の高いサーバーインフラを構築/管理する方法について解説する連載。初回は、Chef 12、Chef Solo、Chef Server、Chef-Zero、Knife-Solo、Knife-Zeroの概要と、Chef-ZeroをKnife-Zero経由で利用するCookbook開発環境の構築について解説します。 - Linuxで作るファイアウォール[パケットフィルタリング設定編]
いよいよパケットフィルタリングの設定を始める。しっかりと不要なパケットをブロックできれば、ファイアウォールの内側の安全度はより向上する。パケットの性質やiptablesの動作をここでマスターしてほしい。 - アクセス制限の設定とCentOSのアップデート
前回はsshでVPSにログインして、一般ユーザーを作成しました。今回は、アクセス制限、パケットフィルタリングといった不正アクセス対策の設定をしてから、CentOSをアップデートします(編集部) - 環境構築自動化の手順と評価検証、Puppetの基礎知識
サーバー構築の自動化で利用される技術、自動化ツールとして「Kickstart」「Puppet」を紹介し、構築から運用まで、システムライフサイクル全体にわたる運用管理の自動化についても解説する連載。 - 無線LAN接続の設定を操作するには? iwconfigコマンドの使い方
無線LANインターフェースがカーネルまたはモジュールでサポートされていれば、アクセスポイントとIPアドレスを設定する程度で接続できます。「iwconfig」は、アクセスポイントへの接続に必要なESSIDおよび暗号化キーを登録するときに利用するコマンドです。 - NginxをWebサーバー“以外”でも徹底活用する
Nginxは高速化だけではありません。Webサーバー以外への応用事例として、ロードバランサー、HTTPS対応、WAFとしての利用を紹介します。