「繋がっているか分からない」アイツを攻略せよ
こんにちは!「リナックス先生」です。
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>
ちゃんと tcp と udp の両方が定義されていますね。
これにより、名前解決(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はこちら。


コメント