Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
Linuxサーバーを運用する上で、外部からの不正アクセスを防ぐためのファイアウォール設定は非常に重要です。この記事では、Ubuntuなどで使われるUFW (Uncomplicated Firewall) と、RHEL系(CentOS, Fedoraなど)で使われるFirewalldという代表的なファイアウォール管理ツールについて、その基本的な設定方法を解説します。これらのツールを使いこなすことで、必要な通信だけを許可し、サーバーのセキュリティを強化できます。
「Webサーバーを立ち上げたのに、外部からアクセスできない!」「なぜか特定のサービスに繋がらない…」といった状況に遭遇したことはありませんか?多くの場合、これはファイアウォールの設定が原因です。Linuxサーバーには標準でファイアウォール機能が備わっており、デフォルトでは多くの通信が遮断されています。これを適切に設定することで、サーバーのセキュリティを保ちつつ、必要なサービスを提供できるようになります。
UFWはUbuntuをはじめとするDebian系のディストリビューションで利用される、シンプルなファイアウォール管理ツールです。コマンドが直感的で分かりやすいため、初心者にも扱いやすいのが特徴です。
UFWが現在有効になっているか、どのようなルールが適用されているかを確認するには、以下のコマンドを実行します。
sudo ufw status verbose
sudo
: 管理者権限でコマンドを実行します。ufw status
: UFWの現在の状態を表示します。verbose
: より詳細な情報を表示します(例: デフォルトのポリシーなど)。実行例:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
Webサーバー(HTTP)の80番ポートやSSHの22番ポートなど、特定のポートへのアクセスを許可する場合に使います。
sudo ufw allow 80/tcp
sudo ufw allow 22/tcp
ufw allow
: 指定したポートまたはサービスへのアクセスを許可します。80/tcp
: TCPプロトコルの80番ポートを指定します。特定の信頼できるIPアドレスからのアクセスをすべて許可したい場合に利用します。例えば、社内ネットワークや特定のVPNからのアクセスのみを許可する際に便利です。
sudo ufw allow from 192.168.1.100
from 192.168.1.100
: 192.168.1.100
というIPアドレスからのすべての通信を許可します。特定のIPアドレスから、特定のサービス(ポート)へのアクセスのみを許可したい場合に利用します。これにより、セキュリティを確保しつつ、必要な通信のみを通すことができます。
sudo ufw allow from 192.168.1.100 to any port 22 proto tcp
sudo ufw allow from 192.168.1.100 to any port 80 proto tcp
from 192.168.1.100
: 192.168.1.100
というIPアドレスからのアクセスを対象とします。to any port 22 proto tcp
: 任意の宛先IPアドレスのTCP 22番ポート(SSH)へのアクセスを許可します。不要になったポートの開放ルールを削除して、アクセスを拒否します。
sudo ufw deny 22/tcp
sudo ufw delete allow from 192.168.1.100
sudo ufw delete allow from 192.168.1.100 to any port 80 proto tcp
ufw deny
: 指定したポートまたはサービスへのアクセスを拒否します。設定を適用したり、一時的にファイアウォールを無効にしたい場合に使用します。
sudo ufw enable
sudo ufw disable
ufw enable
: UFWを有効化し、設定を適用します。ufw disable
: UFWを無効化します。すべてのファイアウォールルールを初期状態に戻したい場合に利用します。実行するとすべてのルールが削除されるため、注意して使用してください。
sudo ufw reset
ufw reset
: UFWの設定を初期状態に戻します。FirewalldはRHEL系(CentOS, Fedora, AlmaLinuxなど)のディストリビューションで標準的に利用される、ゾーンベースのファイアウォール管理ツールです。サービス名での設定や、ランタイムとパーマネントの設定分離が特徴です。
Firewalldが稼働しているか、どのゾーンがアクティブになっているかを確認します。
sudo systemctl status firewalld
sudo firewall-cmd --get-active-zones
sudo systemctl status firewalld
: systemd経由でFirewalldサービスの稼働状況を確認します。sudo firewall-cmd --get-active-zones
: 現在アクティブなゾーンを表示します。Firewalldの設定には「ランタイム(一時的)」と「パーマネント(永続)」の2種類があります。--permanent
オプションを付けずに設定したルールは、サーバー再起動やFirewalldのリロードで消えてしまうため、永続化したい場合は必ず--permanent
を付けましょう。
設定方法 | 設定の持続性 | 用途例 |
---|---|---|
--permanent あり |
永続 | サーバー運用時の本番ルール |
--permanent なし |
一時的 | 動作確認や一時的なテスト |
SSHやHTTPなど、Firewalldにあらかじめ定義されているサービスを開放する場合に便利です。
sudo firewall-cmd --add-service=ssh --zone=public --permanent
sudo firewall-cmd --add-service=http --zone=public --permanent
sudo firewall-cmd --reload
--add-service=ssh
: SSHサービスを許可します。--zone=public
: public
ゾーンにルールを追加します。--permanent
: 設定を永続化します。--reload
: Firewalldの設定を再読み込みし、変更を適用します。サービスとして定義されていないポートを開放する場合に使用します。
sudo firewall-cmd --add-port=8080/tcp --zone=public --permanent
sudo firewall-cmd --reload
--add-port=8080/tcp
: TCPプロトコルの8080番ポートを許可します。特定のIPアドレスからのすべての接続を許可する場合に利用します。これにより、特定の信頼されたホストからのアクセスを制限なく許可できます。
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept' --zone=public --permanent
sudo firewall-cmd --reload
--add-source=192.168.1.100
: 192.168.1.100
というIPアドレスからのすべての通信を許可します。--zone=public
: public
ゾーンにルールを追加します。特定のIPアドレスから、指定したポートへのアクセスのみを許可したい場合に利用します。例えば、特定のマシンからのSSH接続のみを許可するといった場合に有効です。
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' --zone=public --permanent
sudo firewall-cmd --reload
--add-rich-rule
: 複雑なルールを設定するためのオプションです。rule family="ipv4" source address="192.168.1.100"
: IPv4アドレス192.168.1.100
を送信元とするルールを指定します。port protocol="tcp" port="22" accept
: TCPプロトコルの22番ポートへのアクセスを許可します。現在のファイアウォールルールの一覧を確認できます。
sudo firewall-cmd --list-all --zone=public
--list-all
: 指定したゾーンのすべての設定を表示します。開放したサービスやポートのルールを削除します。
sudo firewall-cmd --remove-service=ftp --zone=public --permanent
sudo firewall-cmd --remove-port=8080/tcp --zone=public --permanent
sudo firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' --zone=public --permanent
sudo firewall-cmd --reload
--remove-service=ftp
: FTPサービスへのアクセスを拒否します。--remove-port=8080/tcp
: TCPプロトコルの8080番ポートへのアクセスを拒否します。ファイアウォールでSSH (22番ポート) を閉じてしまうと、リモートでサーバー管理ができなくなります。設定を変更する前にsudo ufw allow 22/tcp
やsudo firewall-cmd --add-service=ssh --permanent
を必ず追加してから他の設定を行うようにしましょう。
もしSSHで接続できなくなった場合は、物理的にサーバーにアクセスするか、クラウドサービスの場合はコンソールから操作できる機能(例: AWS EC2のインスタンスコンソール)を利用して、SSHポートを再度開く必要があります。
Linuxには複数のファイアウォール管理ツールが存在し、どのツールを使うべきか迷うことがあるかもしれません。
どちらか一方のみ有効化し、同時には使わないよう注意しましょう。両ツールとも内部的にLinuxカーネルのiptablesを利用していますが、直接iptables
コマンドを併用すると設定の競合や管理の複雑化を招くため、非推奨です。
選び方に迷った場合は、「そのディストリビューションで標準のものを素直に使う」のが最も安全で推奨されます。
この記事では、Linuxのファイアウォール管理ツールであるUFWとFirewalldの基本的な使い方について解説しました。どちらのツールも、サーバーのセキュリティを維持する上で不可欠なものです。サーバーの用途に合わせて適切なポートを開放し、不要なポートは閉じることで、より安全なシステム運用が可能になります。
ファイアウォールの設定変更後は、必ずステータス確認コマンドで意図したルールが有効になっているか確認しましょう。
この記事が、ファイアウォール設定の理解を深める一助となれば幸いです。
ご覧いただきありがとうございました。
次回は、rootパスワードを忘れたときの対応方法について解説します。