Redhat系Linuxにはfirewalldというファイアウォールのサービスが標準であります。それを細かく設定するコマンドがfirewall-cmdで、ポートを開けたり閉めたりします。
サービス名(アプリケーション名)とポート番号で設定する方法があります。
今回の作業は、サーバーエンジニア、インフラエンジニアでないとほとんど使うことはありません。ファイアウォールの設定はインフラ構築のときだけ行なうからです。
だからこそ、かんたんな作業ほどすぐ忘れてしまいます。今回はそのための備忘録です。
firewall-cmdコマンドとは?
RedHat系Linuxは、バージョン7(RedHat7, CentOS7)からファイアウォールのアプリケーションがデフォルトでインストールされています。Firewalldです。
Firewalldのいろいろな設定を行なうコマンドがfirewall-cmdです。
Firewalldのインストール確認
systemctl status firewalld
Firewalldが起動していないかもしれません。その場合はfirewalldを起動します。
Firewalldの起動
systemctl enable firewalld
systemctl start firewalld
デフォルトのファイアウォールの設定を見ます。
firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Firewalldは、ゾーン(zone)という単位で管理します。デフォルトはpublicです。
いくつかのゾーンを用意して、ゾーンを切り替えることでファイアウォールの設定をかんたんに変えることもできます。
ゾーンははっきりした目的がないかぎりpublicを使ってかまいません。
ゾーンについてはべつの機会にまかせてこのくらいにします。
firewall-cmdには、ゾーン指定のオプションがあります。
--zone=***
これを省略すると、public指定になります。
--zone=public
とおなじです。
ポート開閉の方法
ポートの開閉は、
services
ports
の値を変更します。
Firewalldのデフォルトでは、サービスで
dhcpv6
ssh
しか開けていません。ポート番号はなにも開けてないです。
いまの状態は、リモートのログインができるだけです。ウェブサーバーを立ててもウェブページが見ることすらできません。
今回は、httpsを開放してウェブページが見れるようにします。
サービス名でポートを開閉する
サービス名の確認
firewall-cmd u002du002dget-services
サービス名のポート開放状態確認
firewall-cmd u002du002dlist-services
サービス名でポート開放
firewall-cmd u002du002dadd-service=u003cserviceu003e
サービス名でポート遮断
firewall-cmd u002du002dremove-service=u003cserviceu003e
<service> | サービス名。--get-servicesで表示するものを使う。 |
firewall-cmd u002du002dadd-service=https
--list-services
は、
--list-service
でもおなじ結果になります。
マニュアルにも書いてないことで、たまたまスペルをまちがったら気づきました。
--add-serviceなどは『s』がつかないので、かんちがいして入力した偶然です。
--get-serivces
↑
↓
--get-service
--list-ports
↑
↓
--list-port
もいけます。
ポート番号でポートを開閉する
ポート番号のポート開放状態確認
firewall-cmd u002du002dlist-ports
ポート番号でポート開放
firewall-cmd u002du002dadd-port=u003cportidu003eu003cprotocolu003e
ポート番号でポート遮断
firewall-cmd u002du002dremove-port=u003cportidu003eu003cprotocolu003e
<portid> | ポート番号 |
<protocol> | tcp, udp |
firewall-cmd u002du002dadd-port=443/tcp
番号の範囲を指定して、複数のポートを開閉することもできます。
firewall-cmd u002du002dadd-port=9000-9010/tcp
設定の恒久化
firewall-cmdで設定した内容は、Firewalldを再起動すると追加・変更したものが消えます。
OSの再起動をしたら消えてしまうんですね?
消えないようにするには、
--permanent
のオプションをつけます。
firewall-cmd u002du002dadd-service=https u002du002dpermanent
--permanentは、設定内容を変更するサブコマンドすべてで使えます。
まとめ
今回は、アプリケーション層でのポートの開閉だけをご紹介しました。
Firewalldには、トランスポート層(TCP, UDP)、インターネット層(IP, ICMP)での開閉もできます。
このあたりは、高度なセキュリティをつくるときに使われるので割愛しました。
単純なポートの開閉ならこれでいけます。
Redhat公式ドキュメント