Linuxで特定プロセスだけ通信できない原因と調査手順

  • URLをコピーしました!

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

調査フローまとめ

  1. OS全体で通信確認
  2. ユーザー差分確認
  3. iptables / nftables
  4. SELinux
  5. DNS / Proxy
  6. Socket / Port
  7. cgroup / コンテナ

よくあるNG対応

  • いきなりiptables全開放
  • SELinux無効化を恒久対応
  • 原因未特定のまま再起動

まとめ

「特定プロセスだけ通信できない」問題は、

OS・NW・セキュリティ・アプリの境界問題

です。

本記事の切り分け順を使えば、

  • 無駄な再起動
  • 危険な全開放

を避けつつ、短時間で原因特定できます。

目次