【Firewalld講座 第9回】TCPとは違うのだよ!DNS・NTP・HTTP/3で必須となる「UDP」通信の完全制御

「繋がっているか分からない」アイツを攻略せよ

こんにちは!「リナックス先生」です。
Firewalld講座、いよいよ第9回です。

これまでは、Web(HTTP)やメール(SMTP)、データベース(MySQL)など、いわゆる「TCP」と呼ばれる通信方式を扱ってきました。
TCPは「もしもし、聞こえますか?」「はい、聞こえます」という確認(ハンドシェイク)を行ってから通信するため、信頼性が高く、Firewalldでも管理しやすいのが特徴です。

しかし、ネットワークの世界にはもう一人、「UDP」というあばれ馬がいます。
DNS、時刻合わせ(NTP)、そして最近話題の爆速プロトコル「HTTP/3(QUIC)」は、このUDPを使います。

今回は、初心者泣かせのUDP通信をFirewalldで完璧に制御する方法を学びましょう。

コウ君

先生、UDPって「投げっぱなしジャーマン」みたいなやつですよね?
確認応答がないから速いって聞いたことがあります。
でも、ポートを開けるコマンドはTCPの時と同じじゃないんですか?

リナックス先生

ふふ、例えが古いけど合ってるわ(笑)。
コマンド自体は似ているけど、オプションで明確に /udp を指定しないと、FirewalldはデフォルトでTCPを開けちゃうの。
「53番を開けたのにDNSが動かない!」って泣くエンジニアは大体そこでミスしてるのよ。

1. TCPとUDP、Firewalldでの扱いの違い

まず、Firewalldの設定において最も重要な違いを理解しましょう。

ポート指定時の罠

以下のコマンドを見てください。

# パターンA:プロトコル省略
sudo firewall-cmd --add-port=53

これはエラーになります(または意図しない挙動になります)。
ポート番号で指定する場合、「プロトコル(/tcp または /udp)」の指定は必須です。

# パターンB:正解
sudo firewall-cmd --add-port=53/udp

このように、UDPを開けるときは明示的に指定する必要があります。

サービス定義の賢さ

一方で、--add-service=dns のようにサービス名で指定する場合、Firewalldがあらかじめ持っている定義ファイル(XML)の中に「TCPの53番と、UDPの53番、両方開ける」と書いてあれば、一発で両方開きます。
基本はサービス名指定が楽ですが、中身がどうなっているかを知っておくことは重要です。

2. 【実践】DNSサーバー (53番) の設定

自分でドメインを管理するDNSサーバー(BINDやUnbound)を立てる場合の設定です。
DNSは少し特殊で、「基本はUDPを使うが、データサイズが大きい時はTCPを使う」という二刀流の仕様になっています。

設定方法(サービス名指定)

Firewalldの dns サービスを使えば、TCP/UDPの両方が適切に開放されます。

sudo firewall-cmd --permanent --add-service=dns
sudo firewall-cmd --reload

中身の確認

実際にどう定義されているか確認してみましょう。

cat /usr/lib/firewalld/services/dns.xml

▼実行結果

<service>
  <short>DNS</short>
  <description>The Domain Name System...</description>
  <port protocol="tcp" port="53"/>
  <port protocol="udp" port="53"/>
</service>

ちゃんと tcpudp の両方が定義されていますね。
これにより、名前解決(UDP)もゾーン転送(TCP)も問題なく動作します。

3. 【実践】NTPサーバー (123番) の設定

社内システムの時刻を同期するためのNTPサーバー(Chronyなど)を構築する場合です。
NTPは基本的に UDPの123番 だけを使います。

設定方法

sudo firewall-cmd --permanent --add-service=ntp

【重要】NTPのセキュリティリスク

NTP(UDP)は、「送信元を偽装しやすい」という特性を悪用され、「NTPリフレクション攻撃(DDoS)」の踏み台にされるリスクが非常に高いプロトコルです。
インターネットに公開する必要がない(社内LAN向けだけの)サーバーなら、第6回で学んだ「Source制限」を必ずかけてください。

# 例:社内LAN (192.168.1.0/24) からだけ許可する
sudo firewall-cmd --permanent --new-zone=ntp_zone
sudo firewall-cmd --permanent --zone=ntp_zone --add-source=192.168.1.0/24
sudo firewall-cmd --permanent --zone=ntp_zone --add-service=ntp
sudo firewall-cmd --reload

4. 【実践】HTTP/3 (QUIC) の設定

これが今、最もホットなUDP設定です。
次世代のWebプロトコル「HTTP/3」は、TCPではなく、UDPベースの「QUIC」という技術を使います。

NginxなどでHTTP/3を有効にしても、FirewalldでUDPポートを開けていなければ、ブラウザは従来の遅いHTTP/2(TCP)でしか繋がりません。

注意:httpsサービスでは足りない!

標準の https サービス定義を見てみましょう。

cat /usr/lib/firewalld/services/https.xml

▼実行結果

  <port protocol="tcp" port="443"/>

お気づきでしょうか? TCPの443番しか開いていません。
つまり、--add-service=https だけでは、HTTP/3はブロックされてしまうのです。

設定方法:UDPの443番を追加する

既存のhttps許可に加えて、ポート番号指定でUDPの443番を開ける必要があります。

sudo firewall-cmd --permanent --add-port=443/udp
sudo firewall-cmd --reload

これで、あなたのWebサーバーは最新の高速通信に対応できます。
Google Chromeのデベロッパーツールでプロトコルが「h3」になれば成功です!

コウ君

知らなかった…!
WebサーバーだからTCPだけ開けておけばいいと思ってました。
なんか最近サイトの表示が爆速にならないなぁと思ってたら、FirewalldがQUICを止めてたんですね。

5. トラブルシューティング:UDPはTelnetできない!

ポート開放の確認によく使われる telnet コマンドですが、これはTCP専用です。
UDPポートが開いているか確認しようとして telnet サーバーIP 53 と打っても、永遠に応答がなく失敗します。

UDPの疎通確認には、nc (netcat) コマンドを使います。

Step 1: ncコマンドのインストール

AlmaLinux 9には標準で入っていない場合があるため、インストールします。

sudo dnf install nc -y

Step 2: UDPポートの確認

-u (UDPモード) と -z (スキャンモード) オプションを使います。
例えば、DNS(53番)が開いているか確認するには:

nc -zu 192.168.1.10 53

▼成功時の表示

Ncat: Connected to 192.168.1.10:53.

Connected と出れば、FirewalldのUDPポートは正常に開いています。

※UDPの性質上(コネクションレス)、アプリケーションが起動していないと反応が返ってこない場合があります。必ずサーバー側でサービス(namedやchronyd)を起動してからテストしてください。

6. VPNサーバー (WireGuard) の場合

最近流行りのVPN「WireGuard」もUDPを使用します。
デフォルトでは 51820番ポートを使用しますが、これもTCPではなくUDPで開ける必要があります。

sudo firewall-cmd --permanent --add-port=51820/udp

これを /tcp で開けてしまって「VPNが繋がらない!」と悩むケースが非常に多いため、注意してください。

まとめ:プロトコルを意識するエンジニアになろう

第9回では、TCPとは一味違う「UDP通信」の制御について学びました。

  • ポート番号指定の時は、必ず /udp を明記する。
  • DNS は TCP/53 と UDP/53 の両方が必要(dnsサービスなら自動)。
  • HTTP/3 (QUIC) を使うには、追加で UDP/443 の開放が必須。
  • UDPの疎通確認には telnet ではなく nc -zu を使う。
  • NTPなどは踏み台にされやすいため、公開範囲(Source)を絞るのが定石。

これで、TCPもUDPも自在に操れるようになりました。
しかし、これまでの設定は「通すか、通さないか(All or Nothing)」の単純なルールでした。

「1分間に10回以上接続してきたらブロックしたい」
「ログを取りながら拒否したい」
そんな高度な要望に応えるのが、次回(第10回)で解説する「リッチルール(Rich Rules)」です。

Firewalldの真の力を引き出すリッチルールの世界。難易度は上がりますが、使いこなせば最強のセキュリティを構築できます。お楽しみに!

▼UDP通信の検証に最適なVPS

HTTP/3やVPNサーバーの構築実験には、ネットワーク設定の自由度が高いVPSが必要です。AlmaLinux 9が使えて、UDP通信も安定しているおすすめVPSはこちら。

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント