MENU

必要なポートだけ外部に開放してサーバーへの不要な通信を遮断する手順

サーバーに余分なポートが開いたままになっていると、ポートスキャンや不正アクセスの標的になりやすくなります。用途が決まっているサーバーであれば、使うポートだけを外部に開放し、それ以外は遮断するのが基本的な構成です。このページでは、ファイアウォールを使ったポート制御の手順を、RHEL 系(firewalld)と Ubuntu 系(ufw)に分けて紹介します。

目次

現在どのポートが開いているかを確認する

設定を変更する前に、現状を把握しておくことが重要です。サーバー上でリッスンしているポートは次のコマンドで確認できます。

ss -tlnp

-t は TCP、-l はリッスン中のソケット、-n はポート番号を数字で表示、-p はプロセス名を表示するオプションです。LISTEN 状態のポートと、それを使っているプロセスが一覧で表示されます。

ここで表示されるのはサーバー内側からの情報です。ファイアウォール側で実際に外部へ開放しているポートは、後述の各ツールのコマンドで別途確認してください。

firewalld で必要なポートだけ開放する(RHEL 系)

RHEL・CentOS・Rocky Linux・AlmaLinux などでは、firewalld が標準のファイアウォール管理ツールです。

現在のゾーン設定を確認する

どのサービスやポートが開放されているかは次のコマンドで確認できます。

firewall-cmd --list-all

services: の行に登録済みのサービス名、ports: の行に直接指定したポート番号が表示されます。

不要なサービスをゾーンから削除する

使っていないサービスは削除します。たとえば dhcpv6-client がデフォルトで登録されていることがありますが、サーバー用途では不要な場合があります。

firewall-cmd --permanent --remove-service=dhcpv6-client

--permanent を付けることで、再起動後も設定が保持されます。

必要なポートだけ開放して設定を反映する

SSH・HTTP・HTTPS だけを外部に開放する場合の手順は次のとおりです。

firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

サービス名ではなくポート番号で指定することもできます。

firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

設定後に firewall-cmd --list-all を再度実行して、意図したサービスとポートだけが表示されているかを確かめてください。

ufw で必要なポートだけ開放する(Ubuntu 系)

Ubuntu では ufw(Uncomplicated Firewall)が標準で用意されています。初期状態では無効になっているため、有効化と合わせて設定します。

必ず SSH を許可してから有効化してください。順序を誤ると SSH が遮断されてリモートからログインできなくなります。

# デフォルトポリシーを設定する
ufw default deny incoming
ufw default allow outgoing

# 必要なポートを先に許可する
ufw allow ssh
ufw allow http
ufw allow https

# ufw を有効化する
ufw enable

# 状態を確認する
ufw status verbose

default deny incoming を設定することで、明示的に許可したポート以外の受信通信はすべて遮断されます。ufw status verbose の出力で、意図したルールだけが列挙されているかを確かめてください。

外部からポートの開閉を確認する

サーバー内からの確認だけでは、ファイアウォールの外側から見た状態は分かりません。別のホストから nc(netcat)や nmap を使って疎通を確認できます。

# 別ホストから実行する(nc の場合)
nc -zv <サーバーのIPアドレス> 22
nc -zv <サーバーのIPアドレス> 80
nc -zv <サーバーのIPアドレス> 3306

接続できれば succeeded、遮断されていれば refused またはタイムアウトが返ります。

# nmap を使う場合
nmap -p 22,80,443,3306 <サーバーのIPアドレス>

結果の STATE 列に open・closed・filtered のいずれかが表示されます。開放しているつもりのポートが遮断されていないか、逆に不要なポートが開いていないかを、外部の視点から確かめられます。

よくあるつまずきと注意点

  • SSH を閉じてリモートログインできなくなる:ファイアウォールを有効化する前に SSH を許可しておくのが基本です。ufw の場合は ufw enable より前に ufw allow ssh を実行してください。変更作業中は既存のセッションを切断せず、別ターミナルで接続を維持したまま作業するとリスクを減らせます。
  • --permanent を付け忘れて再起動後にルールが消える(firewalld):firewall-cmd はオプションなしだと実行時設定のみに反映されます。恒久的に設定するには --permanent を付けたうえで --reload してください。
  • クラウドのセキュリティグループと二重管理になっている:AWS・GCP・Azure などのクラウド環境では、OS のファイアウォールとは別にセキュリティグループやネットワーク ACL が存在します。OS 側でポートを開けても、クラウド側で閉じていれば外部からは届きません。両方を合わせて確認が必要です。
  • IPv6 を考慮し忘れる:IPv4 のルールだけ設定しても、IPv6 経由で通信が届く場合があります。firewalld と ufw はどちらも IPv4・IPv6 をまとめて管理しますが、iptables を直接操作している場合は ip6tables も別途設定が必要です。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次