Linuxサーバーで
- OS全体は通信できる
- 他のプロセスは問題ない
- 特定プロセスだけ外部通信できない
という現象は、現場で非常に頻出します。
本記事では、
- ありがちな原因
- 切り分けの順序
- 即使える調査コマンド
を実務目線で整理します。
目次
まず最初にやるべき切り分け
① OS全体で通信できるか
ping -c 3 8.8.8.8
curl https://www.google.com
ここで失敗する場合はNW全体の問題です。
② 問題のプロセスのみ通信不可か
別ユーザーや別プロセスで確認します。
sudo -u otheruser curl https://www.google.com
成功 → プロセス固有の問題 失敗 → システム設定寄り
原因① ファイアウォール(iptables / nftables)
症状
- root実行は通信できる
- 一般ユーザー実行は不可
確認コマンド
iptables -L -n -v
nft list ruleset
見るべきポイント
- OUTPUTチェーン
- uid-owner / gid-owner 制御
例
-A OUTPUT -m owner --uid-owner appuser -j DROP
原因② SELinuxによる通信ブロック
症状
- pingは通る
- アプリだけ通信不可
SELinux状態確認
getenforce
ログ確認
ausearch -m avc -ts recent
journalctl -t setroubleshoot
一時切り分け(※検証用途のみ)
setenforce 0
通信できるようになればSELinuxが原因。
原因③ 実行ユーザーの権限問題
症状
- rootでは通信可能
- サービスユーザーでは不可
確認点
- setcap 設定
- 権限分離(cap_net_raw等)
getcap /path/to/binary
原因④ DNS解決できていない
症状
- IP直指定はOK
- ドメイン指定はNG
確認
cat /etc/resolv.conf
getent hosts google.com
systemd-resolved使用時
resolvectl status
原因⑤ プロキシ設定の影響
症状
- curlはOK
- アプリはNG
確認
env | grep -i proxy
systemdサービスの場合:
systemctl show app.service | grep -i proxy
原因⑥ ソケット枯渇・ポート枯渇
症状
- 通信が断続的
- 再起動で一時復旧
確認
ss -s
cat /proc/sys/net/ipv4/ip_local_port_range
TIME_WAIT多発確認
ss -ant | grep TIME-WAIT | wc -l
原因⑦ cgroup / コンテナ制限
症状
- ホストではOK
- コンテナ内のみNG
確認
cat /proc/$$/cgroup
Dockerの場合:
docker inspect container_name
原因⑧ アプリ側のNW設定ミス
例
- IPv6のみ使用している
- bindアドレス誤り
確認
ss -lntup | grep app
調査フローまとめ
- OS全体で通信確認
- ユーザー差分確認
- iptables / nftables
- SELinux
- DNS / Proxy
- Socket / Port
- cgroup / コンテナ
よくあるNG対応
- いきなりiptables全開放
- SELinux無効化を恒久対応
- 原因未特定のまま再起動
まとめ
「特定プロセスだけ通信できない」問題は、
OS・NW・セキュリティ・アプリの境界問題
です。
本記事の切り分け順を使えば、
- 無駄な再起動
- 危険な全開放
を避けつつ、短時間で原因特定できます。
あわせて読みたい


SELinux によってファイル操作が拒否されるときの対処方法
概要 Linux サーバーでファイルの作成・移動・読み書きを行おうとした際、次のようなエラーが出ることがあります。 Permission denied mv: cannot move ‘file’ to ‘/var…
あわせて読みたい


iptables ルールが反映されない/他のルールで上書きされるときの修正
Linuxサーバで通信制御を行う際、iptables のルールを設定しても期待通り反映されない、または再起動や別ツールの影響で上書きされてしまうことがあります。この記事で…
