LoginSignup
29
28

オンプレとクラウドにおけるLinuxのファイアウォール設定方法

Posted at

はじめに

Linux環境にファイアウォールを設定する(ポートの開放/閉塞)場合、オンプレミス環境のLinuxサーバとAWS等のパブリック・クラウド上に構築したLinuxサーバとでは、それぞれ設定方法が異なります。本記事では、RedHat Enterprise Linuxを題材として、それらの違いを簡単にまとめてみました。

オンプレミス環境のLinuxサーバの場合

firewalldデーモンの起動

RedHat Enterprise Linuxでは、firewalldというファイアウォールを司るデーモンが起動しています。起動していない場合には、下記のコマンドでデーモンを起動します。

[root@localhost testuser]# systemctl start firewalld

起動後は、systemctl status firewalldを実行してステータスを確認することもできますし、firewalldを制御するために提供されているfirewall-cmdを使った確認も可能です。

[root@localhost testuser]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor p>
   Active: active (running) since Mon 2024-03-18 20:35:52 JST; 4s ago
     Docs: man:firewalld(1)
 Main PID: 3529 (firewalld)
    Tasks: 2 (limit: 22809)
   Memory: 34.8M
   CGroup: /system.slice/firewalld.service
           mq3529 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork >

 3月 18 20:35:52 localhost.localdomain systemd[1]: Starting firewalld - dynamic>
 3月 18 20:35:52 localhost.localdomain systemd[1]: Started firewalld - dynamic
[root@localhost testuser]# firewall-cmd --state
running

firewall-cmdコマンドを使用したファイアウォール設定

まずは、firewall-cmd --list-allコマンドを実行し、現時点での設定状態を確認します。(下記はサンプル)

[root@localhost testuser]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: bridge0 ens192
  sources:
  services: cockpit dhcpv6-client ipsec ssh
  ports: 22/tcp 990/tcp 40000-50000/tcp
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

上記の出力において、services行に表示されているサービス、ports行に表示されているポート番号/プロトコルのもののみがファイアウォールとして許可(開放)されているものになります。現時点でいずれにも表示されていないFTP(21番ポート)をLinuxサーバーに対して実行すると、許可されていないため、FTPクライアント上は下記のように接続タイムアウトになります。

状態:	192.168.20.129:21 に接続中...
エラー:	非アクティブになってから 20 秒後に接続がタイムアウトになりました
エラー:	サーバーに接続できません

そこで、FTPが実行できるように、firewall-cmdを使って許可設定を実施します。サービス名を指定する、ポート番号を指定する、いずれかの方法を実行すればOKです。

  • サービス名を指定する場合
[root@localhost testuser]# firewall-cmd --permanent --add-service=ftp
success
  • ポート番号を指定する場合
[root@localhost testuser]# firewall-cmd --permanent --add-port=21/tcp
success

--permanentオプションを指定してコマンドを実行することにより、OS再起動後も設定を有効にすることができます。ここでは、下記のコマンドを実行して、firewalldデーモンを再起動します。

[root@localhost testuser]# firewall-cmd --reload
success

今回はポート番号(21)を追加する形で設定しました。設定後のステータスは下記のようになります。

[root@localhost testuser]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: bridge0 ens192
  sources:
  services: cockpit dhcpv6-client ipsec ssh
  ports: 22/tcp 990/tcp 40000-50000/tcp 21/tcp
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

ports行に「21/tcp」の表示が追加されました。これにより、再度FTPを実行すると問題なく実行できるようになります。(筆者の環境では、FTPSを使用することにしているため、下記のように出力されます。)

状態:	192.168.20.129:21 に接続中...
状態:	接続を確立しました。ウェルカム メッセージを待っています...
状態:	TLS を初期化しています...
状態:	TLS 接続が確立されました。
状態:	ログインしました
状態:	ディレクトリ リストを取得中...
状態:	"/home/testuser" のディレクトリ リストの表示成功

本記事では、RedHat Enterprise Linuxを例に紹介しましたが、Ubuntu Linuxの場合には「ufw」というUbuntu独自のファイアウォール設定コマンドがあります。

パブリック・クラウド上に構築したLinuxサーバの場合

パブリック・クラウド上のLinuxサーバの場合は、クラウドが提供しているセキュリティー・グループと呼ばれるサービスを使用して通信を許可するポート番号の設定を行います。その為、オンプレミス環境のように、Linux上でコマンドを色々実行してファイアウォールの設定をすることはありません。

以下は、Microsoft社のAzure上のLinuxサーバへSSH通信(ポート22番を開放)できるように設定した場合のサンプル画面になります。(赤枠部分を参照)
Azure terraform実行バージョン.jpg

セキュリティー・グループは、クラウド上のサーバへの着信アクセスは初期状態では拒否の状態であるため、必要なポート番号のみを明示指定して、ポート開放を行います。

さいごに

本記事では、オンプレミス環境とクラウド環境それぞれのLinuxサーバに対するファイアウォールの設定方法をご紹介しました。クラウド環境の場合は、クラウドが提供するサービスを使用してファイアウォールの設定を行う分、Linuxの細かいコマンドをマスターする必要は無く楽かなとは思います。
ですが、今の時代はクラウドだけではなく、クラウドとオンプレミスを接続したハイブリッド・クラウドを運用される形が多いかと思いますので、オンプレミス環境でのLinuxに対するファイアウォールの設定もできるようになるべく、関連するLinuxのコマンドは個人のテスト環境等を作成して、実機で練習されることをお奨めします。

29
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
28