firewalldが原因でSSH接続できない場合|接続拒否の原因調査と対処方法を解説

目次
firewalldが原因でSSH接続できない場合の確認方法を理解しよう
LinuxサーバへSSH接続できない場合、多くの人はまずsshdの設定を確認します。
しかし実際の現場では、SSHサービス自体は正常に動作しているにもかかわらず、firewalldが通信を遮断しているケースが少なくありません。
特にAlmaLinux、Rocky Linux、RHELなどのRed Hat系Linuxではfirewalldが標準で有効になっています。
そのためSSH接続トラブルでは必ず確認すべきポイントの一つです。
本記事ではfirewalldが原因でSSH接続できない場合の調査方法や対処方法について解説します。
firewalldとは何か
firewalldはLinuxで利用されるファイアウォール管理ツールです。
通信の許可・拒否を制御する役割を持っています。
現在のRed Hat系Linuxでは標準採用されています。
SSH接続に与える影響
SSHサーバ(sshd)が正常に起動していても、firewalldが22番ポートへの通信を拒否していれば接続できません。
つまり以下の状態です。
sshd → 起動中
firewalld → 通信拒否
この場合SSH接続は失敗します。
よくある症状
- SSH接続できない
- Connection timed out
- 接続が応答しない
- ポートスキャンで22番が閉じている
firewalldが原因の可能性があります。
まずsshdを確認する
最初にSSHサービスの状態を確認します。
# systemctl status sshdactive (running)であればSSHサービスは起動しています。
ポート待受確認
SSHが待受中か確認します。
# ss -antlp | grep sshd
例です。
LISTEN 0 128 *:22表示されれば待受しています。
firewalld状態確認
現在の状態を確認します。
# systemctl status firewalld
または
# firewall-cmd --staterunningなら有効です。
現在許可されているサービス確認
# firewall-cmd --list-services
例です。
dhcpv6-client sshsshが表示されていれば許可されています。
SSHが許可されていない例
dhcpv6-clientsshがありません。
この場合は接続できません。
SSHサービスを許可する
最も基本的な対処方法です。
# firewall-cmd --permanent --add-service=ssh
設定反映します。
# firewall-cmd --reloadポート番号変更時の確認
SSHポートを変更した場合です。
Port 2222sshd_configだけ変更しても接続できません。
変更後ポートを許可する
# firewall-cmd --permanent --add-port=2222/tcp
反映します。
# firewall-cmd --reload現在のポート許可状況確認
# firewall-cmd --list-ports開放ポートが表示されます。
ゾーン設定確認
firewalldにはゾーンという概念があります。
現在のゾーンを確認します。
# firewall-cmd --get-active-zonesどのゾーンへルールが適用されているか確認できます。
全体設定確認
設定をまとめて確認します。
# firewall-cmd --list-allトラブル時によく利用します。
接続元制限の確認
Rich Ruleによる制限がある場合です。
# firewall-cmd --list-rich-rules接続元IP制限を確認できます。
許可IPが限定されている例
source address="192.168.1.10"
service name="ssh"
accept指定IP以外は接続できません。
実際の通信確認
クライアントから確認します。
# nc -zv server 22ポート到達性を確認できます。
nmapで確認する
# nmap -p 22 serverSSHポートの状態を確認できます。
タイムアウトする場合
以下のような場合です。
Connection timed out
firewalldやネットワーク機器が通信を遮断している可能性があります。
Connection refusedの場合
Connection refusedこちらはsshd停止やポート待受なしの可能性が高いです。
原因が異なります。
一時的にfirewalldを停止する
切り分け目的で実施します。
# systemctl stop firewalldこれで接続できればfirewalldが原因です。
注意事項
本番環境で長時間停止することは推奨されません。
原因調査後は再度有効化しましょう。
# systemctl start firewalldクラウド環境の注意点
AWSやAzureではOS側だけではありません。
クラウド側の設定も確認します。
- AWS Security Group
- Azure NSG
- GCP Firewall Rule
非常に多いトラブルです。
AWSでよくあるケース
firewalldは許可済みでも、Security Groupが22番を拒否している場合があります。
両方を確認しましょう。
ログ確認方法
firewalldのログを確認します。
# journalctl -u firewalld起動状況や設定変更履歴が確認できます。
実務で最も多い原因
- sshサービス未許可
- ポート変更後の設定忘れ
- Rich Rule制限
- クラウドFW設定ミス
- ゾーン設定ミス
まずここを確認しましょう。
実務での切り分け手順
- sshd起動確認
- ss確認
- firewalld状態確認
- list-services確認
- list-all確認
- ncで通信確認
- 一時停止で切り分け
ほとんどの問題はこの流れで解決できます。
SSH接続できない場合の確認順序
効率的な確認順序です。
- ネットワーク疎通
- sshd起動確認
- ポート待受確認
- firewalld確認
- SELinux確認
- SSHログ確認
実務ではこの順番が効率的です。
まとめ
firewalldはSSH接続トラブルの代表的な原因の一つです。
sshdが正常でもfirewalldが通信を遮断していればSSH接続はできません。
特にポート変更後やクラウド環境では設定漏れが発生しやすいため注意が必要です。
トラブル発生時はsshd、firewalld、クラウド側ファイアウォールを順番に確認し、効率よく切り分けを行いましょう。






