ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

Linux firewall-cmd, ファイアウォールのポートを開け閉めする

programing image

Redhat系Linuxにはfirewalldというファイアウォールのサービスが標準であります。それを細かく設定するコマンドがfirewall-cmdで、ポートを開けたり閉めたりします。

サービス名(アプリケーション名)とポート番号で設定する方法があります。

今回の作業は、サーバーエンジニア、インフラエンジニアでないとほとんど使うことはありません。ファイアウォールの設定はインフラ構築のときだけ行なうからです。

だからこそ、かんたんな作業ほどすぐ忘れてしまいます。今回はそのための備忘録です。

firewall-cmdコマンドとは?

RedHat系Linuxは、バージョン7(RedHat7, CentOS7)からファイアウォールのアプリケーションがデフォルトでインストールされています。Firewalldです。

Firewalldのいろいろな設定を行なうコマンドがfirewall-cmdです。

Firewalldのインストール確認

systemctl status firewalld

Firewalldが起動していないかもしれません。その場合はfirewalldを起動します。

Firewalldの起動

自動起動 ON
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で表示するものを使う。
httpsを開放
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
httpsを開放
firewall-cmd u002du002dadd-port=443/tcp

番号の範囲を指定して、複数のポートを開閉することもできます。

9000~9010番を開放
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公式ドキュメント

ファイアウォールの使用

前の投稿
Linux systemctl, サービスの自動起動 / 解除を行なう
Linux time, プログラム全体の実行時間を計測する
次の投稿
コメントを残す

*