El problema
Una aplicación está recibiendo "conexión rechazada" de otros servidores. Se puede acceder a la aplicación desde localhost y también escucha el puerto esperado.
La solución
Este puede ser un caso de Firewall en el servidor local que descarta los intentos de conexión entrante de otros servidores. De manera predeterminada, CentOS/RHEL 7 usa el servicio FIREWALLD para administrar las reglas de IPTABLES. El subsistema IPTABLES anterior todavía está disponible y se puede usar directamente si el servicio FIREWALLD está deshabilitado.
Determinar si se está utilizando el servicio FIREWALLD
Para ver si el objetivo de firewalld está activo en el sistema, use el siguiente comando:
# 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.
Como puede ver en el resultado anterior, el servicio firewalld está activo y en ejecución.
Determinar si se está utilizando el servicio IPTABLES
Para determinar si el servicio iptables se está ejecutando en el sistema, use el siguiente comando.
# 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.
Como se ve en el resultado anterior, el destino de iptables está en estado deshabilitado.
Precaución :verificar el firewall usando "iptables -L" no es suficiente.Antes de CentOS/RHEL 7, bastaba con comprobar el cortafuegos del sistema mediante el comando iptables para saber si se estaba utilizando un cortafuegos. Por ejemplo, verificar con el siguiente comando fue suficiente para determinar cómo controlar las reglas del firewall:
# 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
Con CentOS/RHEL 7, el servicio FIREWALLD más reciente o el SERVICIO IPTABLES más antiguo podrían controlar las reglas del firewall.