【Ubuntu】不要なポートを閉じる方法(ufwコマンド)を徹底解説!

Ubuntuで不要なポートを開けっぱなしにしていませんか。

サイバー攻撃者はネットワークスキャンなどの手法を使い、開いているポートを特定して攻撃の足掛かりにします。

サイバー攻撃の脅威が高まる現代、Ubuntu環境を安全に運用するためには、不要なポートを閉じる方法を理解し、適切な対策を講じることが欠かせません。不要なポートを閉じることで、攻撃者の侵入経路を減らし、システムの安全性を確保する第一歩となります。

そこで本記事では、Ubuntuで不要なポートを閉じる方法を、具体的なコマンドを使って解説します。さらに、攻撃者の視点で見たサーバーの状態についても、分かりやすく解説しています。

初心者から中級者まで役立つ情報満載ですので、ぜひご覧ください!

目次

この記事で使用した検証環境

システム構成

Nmap実行マシンターゲットマシン
OSKali Linux 2025.1Ubuntu Server 24.04.1 LTS
IPアドレス192.168.10.11192.168.21.102
ミドルウェアNmap 7.95ufw 0.36.2

Kali Linuxやポートスキャンについて、詳しく知りたい方は、下記の記事もあわせてご覧ください。

本記事の検証では、ローカルマシンに構築した仮想ネットワーク内にて、ポートスキャンを実施しています。管理下にないサーバーへのポートスキャンは、法律に反する場合があります。倫理的な問題だけでなく、法的リスクを伴うため、正当な許可を得た環境内でのみ実施してください。

サイバー攻撃者が見る「開いているポート」とは?

サイバー攻撃者にとって、ネットワーク侵入の第一歩は開いているポートの調査です。この調査はポートスキャンと呼ばれ、攻撃の準備段階として非常に重要な工程です。ポートスキャンは、攻撃者がターゲットとするサーバーやネットワーク上で利用可能なサービスを特定するために行われます。

では何故、攻撃者にとって「開いているポート」が重要なのでしょうか?

それは、ポートが開いているということは、そのポートが関連付けられたアプリケーションやサービスが稼働している可能性を示すからです。例えば、22番ポートが開いていればSSHが利用可能であると推測され、80番ポートであればHTTPサービスが動作していると考えられます。これらの情報を得ることで、攻撃者はサーバーに侵入するための最適な攻撃手法を選択できるのです。

特に危険なのは、不要なポートが意図せず開いたままになっている場合です。例えば、テスト用に一時的に開放した管理ツールのポートが開いたままになっており、そこに既知の脆弱性が存在する場合、攻撃者にとって格好の標的となります。このような不要ポートは、セキュリティパッチの適用が漏れることが多く、既知の脆弱性を狙った攻撃に対して無防備であることが少なくありません。

攻撃に利用されやすいポートの例

ポート番号プロトコル/サービス主なリスクと攻撃例
21FTPパスワードスニッフィング、ディレクトリトラバーサル
22SSHブルートフォース攻撃
445SMBランサムウェア感染、EternalBlue攻撃
1433SQL Serverデータベース漏洩、権限昇格攻撃
3389RDPリモートデスクトップの不正アクセス

あなたのサーバーは攻撃者にどう見えるのか?

Nmap実行マシンからターゲットマシンに対してポートスキャンを実施すると、以下のような実行結果が得られます。

$ nmap 192.168.21.102
〜 省略 〜
PORT   STATE SERVICE
22/tcp open  ssh
〜 省略 〜

上記の実行結果より、22番ポート(ssh)が稼働していることが分かります。

また、オプションを組み合わせることで、そのポートで稼働しているサービス名やバージョンなど、より詳細情報も得ることができます。

$ nmap -sV 192.168.21.102
〜 省略 〜
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
〜 省略 〜

稼働中のSSHのバージョンが攻撃者に知られることになり、既知の脆弱性が含まれていれば、攻撃の足掛かりとして利用される可能性があります。

Ubuntuで不要なポートを閉じる方法

Ubuntu標準のファイアウォールであるufw(Uncomplicated Firewall)を用いて、不要なポートを閉じます。

ufwの状態確認

ufwサービスの状態確認

systemctlコマンドで、ufwサービスが起動しているかを確認できます。

$ sudo systemctl status ufw
● ufw.service - Uncomplicated firewall
     Loaded: loaded (/usr/lib/systemd/system/ufw.service; enabled; preset: enabled)
     Active: active (exited) since Wed 2025-03-05 22:17:01 UTC; 8min ago

ufwサービスが起動している場合、Active: active (exited)と表示されます。

  • ufwサービスが起動している場合、Active: active (exited)
  • ufwサービスが停止している場合、Active: inactive (dead)

Active: inactive (dead)と表示される場合、ufwサービスは起動していません。誤って停止させてしまったのか、理由があって停止しているのか、状況を正確に把握する必要があります。

Active: active (running) ではない理由

ufwサービスはシステム起動時に設定を読み込むと、その後はバックグラウンドで必要な監視を行います。そのため、アクティブな処理が不要な場合、プロセスは終了状態("exited")となります。しかし、この状態であってもufwは正常に動作しており、外部からの不正アクセスを防いでいます。

ufwルールの状態確認

ufwルールが有効になっているかは、ufwコマンドで確認できます。

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
22 (v6)                    ALLOW IN    Anywhere (v6)

ufwルールが有効の場合、Status: activeとなり、ルールも一緒に表示されます。ufwルールが無効の場合、Status: inactiveと表示されます。

  • ufwルールが有効の場合、Status: active
  • ufwルールが無効の場合、Status: inactive

ufwルールは、設定ファイルでも確認することができます。

IPv4の設定

$ sudo cat /etc/ufw/user.rules
〜 省略 〜
-A ufw-user-input -p tcp --dport 22 -j ACCEPT
-A ufw-user-input -p udp --dport 22 -j ACCEPT
〜 省略 〜

IPv6の設定

$ sudo cat /etc/ufw/user6.rules
〜 省略 〜
-A ufw6-user-input -p tcp --dport 22 -j ACCEPT
-A ufw6-user-input -p udp --dport 22 -j ACCEPT
〜 省略 〜

ポートを閉じる具体的なコマンド

許可ルールを削除する場合

$ sudo ufw delete allow 22
Rule deleted
Rule deleted (v6)

ufwは、外部から内部への受信トラフィック(incoming)をデフォルトで拒否する設定になっています。そのため、許可ルールを削除するだけで、該当する通信を遮断することができます。

また、下記のように、ルール番号を指定して、ルールを削除することもできます。

$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 22 (v6)                    ALLOW IN    Anywhere (v6)

$sudo ufw delete 1
Deleting:
 allow 22
Proceed with operation (y|n)? y
Rule deleted

ufwコマンドにてルールを削除すると、設定ファイルに自動反映されます。

  • /etc/ufw/user.rules
  • /etc/ufw/user6.rules

拒否ルールを追加する場合

$ sudo ufw deny 22
Rule updated
Rule updated (v6)

拒否ルールに22番ポートを追加します。

設定ファイルを確認すると、22番ポートの許可ルールが削除され、拒否ルールが追加されたことが確認できます。

  • /etc/ufw/user.rules
    • 【削除】 -A ufw-user-input -p tcp --dport 22 -j ACCEPT
    • 【削除】 -A ufw-user-input -p udp --dport 22 -j ACCEPT
    • 【追加】 -A ufw-user-input -p tcp --dport 22 -j DROP
    • 【追加】 -A ufw-user-input -p udp --dport 22 -j DROP
  • /etc/ufw/user6.rules
    • 【削除】 -A ufw6-user-input -p tcp --dport 22 -j ACCEPT
    • 【削除】 -A ufw6-user-input -p udp --dport 22 -j ACCEPT
    • 【追加】 -A ufw6-user-input -p tcp --dport 22 -j DROP
    • 【追加】 -A ufw6-user-input -p udp --dport 22 -j DROP
22番ポート(SSH)を閉じることができない場合

SSH接続が利用できなくなることでメンテナンス作業に影響を及ぼす可能性があるため、22番ポートを閉じる対応が困難な場合もあります。その場合には、下記の対策を実施することでセキュリティリスクを軽減することができます。

  • 特定のIPアドレスからの接続のみ許可する。
  • sshの受付ポートを22番ポートから別ポートに変更する。
  • パスワード認証から鍵認証に変更する。
  • rootユーザーのログインを禁止する。
  • Fail2banでブルートフォース攻撃を防止する。

ポートを閉じると攻撃者にはどう見えるのか?

$ nmap 192.168.21.102
〜 省略 〜
All 1000 scanned ports on 192.168.21.102 are in ignored states.
Not shown: 1000 filtered tcp ports (no-response)
〜 省略 〜

$ nmap -p 22 -sV 192.168.21.102
〜 省略 〜
PORT   STATE    SERVICE VERSION
22/tcp filtered ssh
〜 省略 〜

STATE(状態)がopenからfilteredに切り替わり、ポートスキャンをブロックしていることが分かります。バージョン情報も出力されなくなり、サイバー攻撃のリスクを軽減することができます。

不要なポートを閉じるだけでは不十分!総合的な対策が必要

不要なポートを閉じることはサーバーのセキュリティを強化する上で重要なステップですが、それだけでは万全とは言えません。他のセキュリティ対策と併用し、総合的な防御体制を築く必要があります。

定期的なポートスキャン

自分が管理するサーバーに対してポートスキャンを行うことで、予期せず開いてしまったポートや、不要なサービスが稼働していないかを確認できます。

  • OSやアプリケーションのアップデートで新たに開放されたポート
  • デバッグ用に一時的に開けたポート
  • 試験的に稼働させたサービスのポートがそのまま放置されている

これらのポートを放置してしまうと、攻撃者に新たな侵入経路を提供してしまう危険性があります。

ポートスキャンを実施する際、ローカルネットワーク内のスキャンだけでなく、インターネット越しに外部からの視点でスキャンすることも推奨されます。これにより、攻撃者が実際にどのポートにアクセスできるのかを確認できます。

ICMPを無効にする

ICMP(Internet Control Message Protocol)は、ネットワークデバイス間の通信状態を確認するための重要なプロトコルです。ICMPエコーリクエスト(いわゆる「ping」)は、特にネットワークの疎通確認に使われますが、その特性を悪用され、攻撃の起点として利用されるリスクも存在します。そのため、不要な場合はICMPを無効にすることがセキュリティ向上につながります。

ICMPを無効にすることには、メリットとデメリットがある点を理解する必要があります。攻撃者がサーバーを特定しにくくなるメリットがある反面、運用者がトラブルシューティングを行う際にpingコマンドを使用できなくなるなど、運用面での利便性が低下します。そのため、ICMPを無効化するかどうかは、サーバーの用途や運用ポリシーに応じて慎重に判断する必要があります。

他のセキュリティサービスとの併用

ファイアウォール(ufwなど)の設定を最適化するだけでなく、侵入検知システム(IDS)や侵入防止システム(IPS)を導入することで、潜在的な攻撃を早期に検出できます。これにより、開いているポートやサービスを狙った攻撃が試みられた際に警告を受け取り、迅速に対応することが可能です。

デフォラボ

この記事が気に入ったら
フォローしてね!

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