Como sabreis, gran parte de la comunicación entre Controladores de Dominio (DC), se realiza a través de RPC (técnica para la comunicación entre procesos en una o más computadoras conectadas a una red). Este tráfico RPC puede ser motivado por distintos servicios que se ejecuten en nuestros DC, como pueden ser:
- DHCP.
- Replicación de Directorio Activo.
- Replicación FRS.
- WINS.
- Promoción de un Controlador de Dominio,
- etc.
¿Cómo funciona RPC?
Para empezar una comunicación RPC, el cliente se conecta al puerto TCP 135 del servidor y solicita un puerto al End Point Mapper (EPM). El EPM del servidor reserva un puerto, denominado puerto dinámico, para este cliente y se lo envía. A partir de este punto, el cliente abre una nueva conexión TCP a dicho puerto del servidor y comienza la comunicación. Aqui os dejo un gráfico sobre un proceso Cliente/Servidor de RPC:
Estos puertos dinámicos RPC, también conocidos como puertos efímeros se distribuyen de la siguiente manera, dependiendo del sistema operativo:
- Hasta Windows 2003/XP (del 1025 al 5000) = 3976 puertos en total.
- Desde Windows 2008/Vista (del 49152 al 65535) = 16.384 puertos en total.
Hasta aqui todo correcto, pero ¿qué ocurre en zonas desmilitarizadas o DMZ dónde tenemos restringidos determinado tráfico y puertos?
Los puertos que generalmente utilizan los Controladores de Dominio en los servicios básicos son los siguientes:
Service | Port/protocol |
RPC endpoint mapper | 135/tcp, 135/udp |
Network basic input/output system (NetBIOS) name service | 137/tcp, 137/udp |
NetBIOS datagram service | 138/udp |
NetBIOS session service | 139/tcp |
RPC dynamic assignment | Win 2k/2003:1024-65535/tcp Win 2008+:49152-65535/tcp |
Server message block (SMB) over IP (Microsoft-DS) | 445/tcp, 445/udp |
Lightweight Directory Access Protocol (LDAP) | 389/tcp |
LDAP ping | 389/udp |
LDAP over SSL | 636/tcp |
Global catalog LDAP | 3268/tcp |
Global catalog LDAP over SSL | 3269/tcp |
Kerberos | 88/tcp, 88/udp |
Domain Name Service (DNS) | 53/tcp1, 53/udp |
Asi que nuestros Firewalls tendrán que tener abierto estos puertos para la comunicación entre DCs y clientes pero ¿qué ocurre con el tráfico RPC si hemos dicho que es dinámico? El hecho de tener que abrir un rango tan grande de puertos en el Firewall implica aumentar el riesgo de ataque ya que son 16384 puertos los que se exponen. Posible solución: restringir dicho tráfico a un número fijo de puerto o puertos.
Nosotros, por ejemplo, lo que queremos es forzar el tráfico RPC entre los puertos 5000-5100. Recordar, que es necesario y como mínimo, dejar un rango de 100 puertos consecutivos para un mejor funcionamiento y evitar cuellos de botella.
Tenemos tres métodos de realizarlo, dependerá de los servicios que queramos restringir:
Método 1 – Entradas en el registro sobre la configuración de los servicios de replicación de Directorio Activo.
- HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNTDSParameters y añadimos la clave DWORD TCP/IP Port con el valor del puerto que queremos utilizar (incluyendo los espacios en blanco).
- HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNetlogonParameters y añadimos la clave DWORD DCTcpipPort con el valor del puerto que queremos utilizar (incluyendo los espacios en blanco).
Método 2 – Para configurar en el Servicio Firewall de Windows el rango de puertos (para Windows 2008/Vista en adelante):
- netsh int ipv4 set dynamicport tcp start=5000 num=1000
- netsh int ipv4 set dynamicport udp start=5000 num=1000
- netsh int ipv6 set dynamicport tcp start=5000 num=1000
- netsh int ipv6 set dynamicport udp start=5000 num=1000
Y para verificar que está configurado:
- netsh int ipv4 show dynamicport tcp
- netsh int ipv4 show dynamicport udp
- netsh int ipv6 show dynamicport tcp
- netsh int ipv6 show dynamicport udp
Método 3 – Para los servicios de comunicaciones de Windows. También afecta a las comunicaciones de Directorio Activo. Volvemos a trabajar en el Registro:
HKEY_LOCAL_MACHINESoftwareMicrosoftRpc
-
REG_MULTI_SZ: 5000-5100
PortsInternetAvailable: REG_SZ: Y
UseInternetPorts: REG_SZ: Y
Espero que os sea util. En un próximo post utilizaremos la herramienta «PortQuery» para verificar el tráfico RPC entre controladores de dominio.
Bibliografia:
- Entender Directorio Activo, RPC, fuertos efímeros y firewalls (muy recomendado).
- Cómo configurar la asignación dinámica de puertos para trabajar con Firewalls.
- Listado de todos los puertos que necesita un equipo Windows.
- Restringir el tráfico de replicación de Ad a un puerto específico.
- Troubleshooting del tráfico RPC.