Le problème
Une application reçoit une "connexion refusée" d'autres serveurs. L'application est accessible depuis localhost et écoute également le port attendu.
La solution
Il peut s'agir d'un cas où le pare-feu sur le serveur local abandonne les tentatives de connexion entrantes à partir d'autres serveurs. Par défaut, CentOS/RHEL 7 utilise le service FIREWALLD pour gérer les règles IPTABLES. L'ancien sous-système IPTABLES est toujours disponible et peut être utilisé directement si le service FIREWALLD est désactivé.
Déterminer si le service FIREWALLD est utilisé
Pour voir si la cible firewalld est active sur le système, utilisez la commande ci-dessous :
# 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.
Comme vous pouvez le voir dans la sortie ci-dessus, le service firewalld est actif et en cours d'exécution.
Déterminer si le service IPTABLES est utilisé
Pour déterminer si le service iptables est en cours d'exécution sur le système, utilisez la commande ci-dessous.
# 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.
Comme le montre la sortie ci-dessus, la cible iptables est à l'état désactivé.
Attention :vérifier le pare-feu avec « iptables -L » n'est pas suffisant.Avant CentOS/RHEL 7, il suffisait de vérifier le pare-feu du système à l'aide de la commande iptables pour savoir si un pare-feu était utilisé. Par exemple, vérifier avec la commande ci-dessous était suffisant pour déterminer comment contrôler les règles du pare-feu :
# 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
Avec CentOS/RHEL 7, le nouveau service FIREWALLD ou l'ancien IPTABLES-SERVICE peut contrôler les règles de pare-feu.