問題
アプリケーションが他のサーバーから「接続拒否」を受けています。アプリケーションは localhost からアクセスでき、予期されるポートをリッスンします。
解決策
これは、ローカル サーバー上のファイアウォールが、他のサーバーからのインバウンド接続試行を破棄する場合に発生する可能性があります。デフォルトでは、CentOS/RHEL 7 は FIREWALLD サービスを使用して IPTABLES ルールを管理します。古い IPTABLES サブシステムは引き続き利用可能で、FIREWALLD サービスが無効になっている場合は直接使用できます。
FIREWALLD サービスが使用されているかどうかを確認する
システムで firewalld ターゲットがアクティブかどうかを確認するには、次のコマンドを使用します:
# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2017-12-21 15:03:59 EST; 4s ago Docs: man:firewalld(1) Main PID: 18880 (firewalld) CGroup: /system.slice/firewalld.service └─18880 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid Dec 21 15:03:58 testserver systemd[1]: Starting firewalld - dynamic firewall daemon... Dec 21 15:03:59 testserver systemd[1]: Started firewalld - dynamic firewall daemon. Dec 21 15:04:01 testserver firewalld[18880]: WARNING: ICMP type 'beyond-scope' is not supported by the kernel for ipv6. Dec 21 15:04:01 testserver firewalld[18880]: WARNING: beyond-scope: INVALID_ICMPTYPE: No supported ICMP type., ignoring for run-time. Dec 21 15:04:01 testserver firewalld[18880]: WARNING: ICMP type 'failed-policy' is not supported by the kernel for ipv6. Dec 21 15:04:01 testserver firewalld[18880]: WARNING: failed-policy: INVALID_ICMPTYPE: No supported ICMP type., ignoring for run-time. Dec 21 15:04:01 testserver firewalld[18880]: WARNING: ICMP type 'reject-route' is not supported by the kernel for ipv6. Dec 21 15:04:01 testserver firewalld[18880]: WARNING: reject-route: INVALID_ICMPTYPE: No supported ICMP type., ignoring for run-time.
上記の出力からわかるように、firewalld サービスはアクティブで実行中です。
IPTABLES サービスが使用されているかどうかを確認する
システムで iptables サービスが実行されているかどうかを確認するには、次のコマンドを使用します。
# systemctl status iptables.service * iptables.service - IPv4 firewall with iptables Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled) Active: active (exited) since Thu 2017-12-21 17:51:12 UTC; 26min ago Process: 440 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS) Main PID: 440 (code=exited, status=0/SUCCESS) CGroup: /system.slice/iptables.service Dec 21 17:51:12 testserver systemd[1]: Starting IPv4 firewall with iptables... Dec 21 17:51:12 testserver iptables.init[440]: iptables: Applying firewall rules: [ OK ] Dec 21 17:51:12 testserver systemd[1]: Started IPv4 firewall with iptables.
上記の出力からわかるように、iptables ターゲットは無効な状態です。
注意 :「iptables -L」を使用してファイアウォールを確認するだけでは十分ではありません。CentOS/RHEL 7 より前では、iptables コマンドを使用してシステム ファイアウォールをチェックするだけで、ファイアウォールが使用されているかどうかを知ることができました。たとえば、次のコマンドで確認するだけで、ファイアウォール ルールを制御する方法を判断できます:
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- anywhere anywhere udp dpt:domain ACCEPT tcp -- anywhere anywhere tcp dpt:domain ... INPUT_direct all -- anywhere anywhere INPUT_ZONES_SOURCE all -- anywhere anywhere INPUT_ZONES all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
CentOS/RHEL 7 では、新しい FIREWALLD サービスまたは古い IPTABLES-SERVICE がファイアウォール ルールを制御できます。
カーネル ログの警告メッセージ「カーネル:ポート X で SYN フラッドが発生している可能性があります。Cookie の送信がログに記録されています」
「/var/log/messages」が Martian パケットを報告する理由