I-xinetd: (0.06) (potato) Instalar y asegurar xinetd, reemplazo mas seguro y flexible para inetd 0.05 11/11/2000 0.06 27/1/2002 añado Anexo-1 POR HACER: *FALTA PROBAR INTENSIVAMENTE, ahora todo parece funcionar...* VENTAJAS: - La característica de seguridad que más nos interesa de xinetd es la posibilidad de restringir los interfaces en los que escuchan los demonios - Es incluso posible tener en el mismo puerto diferentes servicios para cada interface (comprobado :-) - Mecanismos de control de acceso incluidos (hosts.allow / hosts.deny como tcpwrapper, su propio control de acceso con "only_from" y por la hora) - Posibilidad de "nice" de los servidores - Posibilidad de logging personalizado para cada servicio - Posibilidad de redirección de servicios INCONVENIENTES: - Archivo de configuración diferente (tipo named), se hace raro al principio - Cada vez que convertimos la config de inetd a xinetd perdemos nuestras customizaciones - Al instalar nuevos servidores que requieren ser lanzados por inetd no se añaden a xinetd.conf (aunque he leído que se nos avisará) - No hay configuración desde Linuxconf (para inetd si) PROCEDEMOS: 1) Instalar el paquete xinetd - Do you want to convert inetd to xinetd? YES Los scripts de arranque se modifican automáticamente para que xinetd reemplace a inetd, y xinetd queda funcionando tras la instalación 2) Limitar acceso a nuestra red y a interface de nuestra red - Añadir al inicio de xinetd.conf: *NOTA* Esta sección defaults no es estrictamente necesaria, ya que el xinetd de Potato respeta la configuración de tcpwrappers (lee POR DENTRO...) de /etc/hosts.allow y /etc/hosts.deny ---8<--- defaults { only_from = 192.168.0.0/24 # Nuestra red local } --->8--- - y a la sección de cada servicio añadir la opción ---8<--- interface = 192.168.0.1 # La IP de este servidor en el # interface de nuestra red local --->8--- por ejemplo: service smtp { socket_type = stream protocol = tcp wait = no user = mail server = /usr/sbin/exim server_args = -bs interface = 192.168.0.1 } esta misma linea en inetd.conf (sin limitación de interface) es: smtp stream tcp nowait mail /usr/sbin/tcpd /usr/sbin/exim -bs 3) Hacer que servidor de nombres netbios nmbd (samba) no finalice con el error: "netbios-ns service was deactivated because of looping" - Añadir a la sección de netbios-ns un "flags = REUSE" quedando así: - Añadir una sección de netbios-ns broadcast quedando así: ---8<--- # SERVIDOR DE NOMBRES NETBIOS port 137 (sin "flags = REUSE" peta) service netbios-ns { socket_type = dgram flags = REUSE protocol = udp wait = yes user = root server = /usr/sbin/nmbd server_args = -a interface = 192.168.0.1 } # SERVIDOR DE NOMBRES NETBIOS port 137 BROADCAST (sin "flags = REUSE" peta) # Si no hay servidor WINS (o falla) el servidor de nombres netbios nmbd debe # contestar mensajes broadcast, como mi red es 192.168.0.0/255.255.255.0 # la IP de broadcast de mi red es 192.168.0.255 service netbios-ns { socket_type = dgram flags = REUSE protocol = udp wait = yes user = root server = /usr/sbin/nmbd server_args = -a interface = 192.168.0.255 } --->8--- 4) Activar los cambios de xinetd a) /etc/init.d/xinetd stop b) /etc/init.d/xinetd start ATENCIÓN: "reload" no hace activas las limitaciones de interfaces, supongo que porque los sockets ya están abiertos... NOTA: Asegurarse de los puertos/interfaces que debe usar xinetd están libres antes de activar xinetd para evitar problemas con "netstat -tuna" PRUEBAS: comprobar que se escucha en el interface deseado (192.168.0.1) y no en todos (0.0.0.0) en "Local Address" haciendo netstat -tuna SUGERENCIA: Lee mi chuleta S-tcp-wrapper desconectar de Internet (el cable físico) desactivar cortafuegos nmap a IP alias 10.0.0.0, a 192.168.0.1 y a 127.0.0.1 (nmap -P0 -sT -sU -v -p 1-65535 10.0.0.0) telnet 10.0.0.0 smtp (y a 192.168.0.1 y a 127.0.0.1) activar cortafuegos conectar a Internet ARCHIVOS: config: /etc/xinetd.conf acceso: /etc/hosts.allow y /etc/hosts.deny log: /var/log/daemon.log POR DENTRO: hosts.allow / hosts.deny soportados xinetd de Potato ha sido compilada con la opción "--with-libwrap" así que cuando xinetd hace el chequeo de acceso primero pide a libwrap que compruebe /etc/hosts.allow y /etc/hosts.deny, entonces si libwrap acepta la conexión xinetd consultará su propio mecanismo de control de acceso Limitación de interfaces Si se limitan los interfaces a la red local eth0 un escaneo (nmap) desde Internet (ppp0, eth1, etc...) no encuentra ningún servicio activo. Además "netstat -tuna" muestra la IP del interface en vez 0.0.0.0 en la columna "Local address" LIMITACIONES: - No se puede poner la opción "interface" en la sección "defaults" (de ajustes globales) hay que escribirla en cada servicio - No se puede poner dos interfaces en el mismo servicio, hay que escribir la sección dos veces (comprobado) POR HACER: Añadir puerto a syslog (solo pone "refused connect from 10.0.0.0") Probar si es mas rápido que inetd + tcpwrappers MAS INFO: man xinetd.conf /usr/doc/xinetd/examples/sample.conf.gz # Ejemplo de configuración Anexo-1 archivo de configuración xinetd.conf de ejemplo: ---8<--- defaults { only_from = 192.168.0.0/24 } service time { socket_type = stream protocol = tcp wait = no user = root type = INTERNAL id = time-stream interface = 192.168.0.1 } #service ftp #{ # socket_type = stream # protocol = tcp # wait = no # user = root # server = /usr/sbin/in.ftpd # interface = 192.168.0.1 #} #service telnet #{ # socket_type = stream # protocol = tcp # wait = no # user = root # server = /usr/sbin/in.telnetd # interface = 192.168.0.1 #} #service pop-3 #{ # socket_type = stream # protocol = tcp # wait = no # user = root # server = /usr/sbin/ipop3d # interface = 192.168.0.1 #} #service imap2 #{ # socket_type = stream # protocol = tcp # wait = no # user = root # server = /usr/sbin/imapd # interface = 192.168.0.1 #} #service socks #{ # socket_type = stream # protocol = tcp # wait = no # user = nobody # server = /usr/sbin/sockd # interface = 192.168.0.1 #} service rsync { socket_type = stream protocol = tcp wait = no user = root server = /usr/bin/rsync server_args = --daemon interface = 192.168.0.1 } --->8---