En el punto 13.4 hablábamos de los servicios ofrecidos desde nuestra
máquina; allí comentamos que cualquiera de ellos es una potencial puerta
de entrada para un atacante, por lo que es muy recomendable cerrar todos los
que no necesitemos; vimos un esquema todo o nada: u ofrecíamos un servicio
a toda la red o lo denegábamos, pero no había término medio.
Hay una serie de servicios como telnet o ftp que habitualmente no
vamos a poder cerrar, ya que los usuarios necesitarán conectar al servidor
para trabajar en él o para transferir ficheros; en estos casos es peligroso
permitir que cualquier máquina de Internet tenga la posibilidad de acceder
a nuestros recursos, por lo que se suele utilizar un programa denominado
TCP Wrappers ([Ven92]) para definir una serie de redes o
máquinas autorizados a
conectar con nosotros. Aquí veremos como instalar este software
- en su versión 7.6 - y su configuración básica para que no todo el
mundo pueda contactar con nosotros. Actualmente, cualquier administrador que
desee un mínimo de seguridad ha de instalar TCP Wrappers en sus
equipos; incluso algunos Unices como Linux o BSDI lo ofrecen por defecto al
instalar el operativo. Cabe decir que la configuración del programa puede
ser muy elaborada y con muchas opciones; aquí veremos la forma más
básica, que suele ser automática mediante make install
22.2.
Para configuraciones más avanzadas se recomienda consultar los ficheros de
ayuda.
En nuestro caso vamos a instalar TCP Wrappers sobre una máquina
Silicon Graphics corriendo IRIX 6.2:
llegona_(/) # uname -a
IRIX64 llegona 6.2 06101031 IP28
llegona_(/) #
No vamos a entrar aquí en como compilar el software (para ello se puede
consultar el fichero README); asumiremos que ya lo tenemos compilado y
el resultado está, por ejemplo, en el directorio /tmp/tcp_wrappers_7.6/.
Tras compilar el software se habrán generado una serie de ficheros
ejecutables que hemos de copiar a un destino definitivo, por ejemplo a
/etc/usr/sbin/:
llegona_(/tmp/tcp_wrappers_7.6) # cp `find . -type f -perm -700` /usr/sbin/
llegona_(/tmp/tcp_wrappers_7.6) #
Una vez en su destino definitivo, hemos de modificar el fichero /etc/inetd.conf para indicarle a inetd que ha de utilizar el demonio
tcpd (la parte más importante de TCP Wrappers) a la hora de
servir peticiones; para ello, una entrada de la forma
telnet stream tcp nowait root /usr/etc/telnetd
se convertirá en una como
telnet stream tcp nowait root /usr/sbin/tcpd /usr/etc/telnetd
Como vemos, en lugar de que inetd ejecute directamente el demonio
correspondiente a cada servicio, ejecuta el wrapper, y es éste el
encargado de controlar la ejecución del demonio real.
Tras haber modificado convenientemente /etc/inetd.conf hemos de
configurar
los servicios que vamos a ofrecer a diferentes máquinas o redes; seguiremos
una política restrictiva: todo lo no explícitamente permitido, está
negado. Para ello, en el archivo /etc/hosts.allow indicamos que servicios
ofrecemos y a dónde lo hacemos22.3, de
la siguiente forma:
demonio: maquinas
Donde `demonio' es el nombre del demonio encargado de atender el servicio
correspondiente
(sendmail, telnetd, fingerd...), y `maquinas' es la especificación de los hosts a los que les está
permitida la conexión a cada servicio; se trata de una lista separada por
espacios donde podemos incluir desde nombres de sistemas o direcciones IP hasta
subdominios, pasando por palabras reservadas como ALL.
Así, si por ejemplo queremos ofrecer todo a las
máquinas .dsic.upv.es, telnet a andercheran.aiind.upv.es y
luisvive.euiti.upv.es, y
ftp a toda la UPV, tendremos un /etc/hosts.allow de la forma
siguiente:
llegona_(/) # cat /etc/hosts.allow
ALL: .dsic.upv.es
telnetd: andercheran.aiind.upv.es luisvive.euiti.upv.es
ftpd: .upv.es
llegona_(/) #
Acabamos de configurar los sistemas con acceso a ciertos demonios; para indicar
a TCP Wrappers que nuestros servicios no van a ser ofertados a nadie
más, creamos el fichero /etc/hosts.deny y denegamos todo a todos:
llegona_(/) # cat /etc/hosts.deny
ALL: ALL
llegona_(/) #
Una vez hemos configurado todo, hemos de hacer que inetd relea su fichero
de configuración enviándole la señal SIGHUP, por ejemplo con
la orden killall -HUP inetd22.4. A partir de ese
momento los cambios han tenido efecto; en función de nuestro /etc/syslog.conf, pero generalmente en archivos como /var/adm/SYSLOG o
/var/adm/messages vamos a poder ver las conexiones aceptadas y las
rehusadas:
Dec 2 02:16:47 llegona ftpd[18234]: refused connect from bill.microsoft.com
Dec 2 02:45:23 llegona telnetd[18234]: connect from corbella.dsic.upv.es
Cuando alguien desde una máquina que tiene permiso para acceder a cierto
servicio conecte a él no notará nada raro, pero si lo hace desde un equipo
no autorizado, la conexión se cerrará:
anita:~# telnet llegona.dsic.upv.es
Trying 158.42.49.37...
Connected to llegona.dsic.upv.es
Escape character is '^]'.
llegona login: Connection closed by foreign host.
anita:~#
© 2002 Antonio Villalón Huerta