Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
INTRODUCCIN.................................................................................................................................................4 SERVIDOR WEB APACHE................................................................................................................................5 FICHERO DE CONFIGURACIN : HTTPD.CONF................................................................................................................5 Opciones del fichero de configuracin:........................................................................................................6
MaxClients n..........................................................................................................................................................6 Port n......................................................................................................................................................................6 User nobody & Group nobody................................................................................................................................6 DocumentRoot directorio........................................................................................................................................6 UserDir disabled/enabled usuario............................................................................................................................6 TimeOut seg............................................................................................................................................................7 DirectoryIndex index.html......................................................................................................................................7 ServerName dns:puerto: .........................................................................................................................................7 FollowSymLinks.....................................................................................................................................................7 IncludesNoExec.......................................................................................................................................................7
FICHEROS DE CONFIGURACIN DISTRIBUIDOS : HTACSESS.CONF........................................................................................7 AUTENTIFICACIN...................................................................................................................................................8 Limitar el acceso de un usuario a un directorio...........................................................................................8 OPCIN -C PARA CREAR UN NUEVO ARCHIVO DE PASSWORDS..........................................................................................9 OPCIN -B PARA SUMINISTRAR EL PASSWORD EN LA LNEA DE LA ORDEN (MODO BATCH). SI NO SE INDICA ESTA OPCIN, SE
SOLICITA EL PASSWORD A CONTINUACIN.....................................................................................................................9 HTTPASSWD -C -B
Limitando el acceso dependiendo del mtodo HTTP utilizado...................................................................10 Autentificacin de grupos............................................................................................................................10 Un nico administrador?..........................................................................................................................11 RESTRINGIR EL ACCESO A UNA MQUINA, RED, DOMINIO, ETC.......................................................................................12 FICHEROS LOGS.....................................................................................................................................................13 Registro de Errores (Error Log).................................................................................................................13 Registro de Acceso (Access Log).................................................................................................................14 APACHE Y SSL....................................................................................................................................................15 Certificados digitales y firmas....................................................................................................................15 Instalar SSL.................................................................................................................................................15 Crear un certificado....................................................................................................................................15 Configurar el Apache para SSL..................................................................................................................16 SEGURIDAD EN FTP- VSFTPD......................................................................................................................17 FICHERO DE CONFIGURACIN /ETC/VSFTPD/VSFTPD.CONF..............................................................................................17
Pancarta de saludo..................................................................................................................................................17
Acceso de usuarios annimos.................................................................................................................................17 Acceso a directorios...............................................................................................................................................17 Cuentas de usuarios................................................................................................................................................17 Restringir cuentas de usuarios................................................................................................................................18 Limitar el nmero mximo de clientes...................................................................................................................18 Escritura en el servidor..........................................................................................................................................18 Conexiones utilizando SSL....................................................................................................................................18 Listar directorios....................................................................................................................................................19 Descarga de ficheros..............................................................................................................................................19 Listar los comandos que acepta el servidor............................................................................................................19
ANEXO ...............................................................................................................................................................25 20 COSAS PARA HACER MAS SEGURA LA CONFIGURACIN APCHE..................................................................................25 RESUMEN DE OPCIONES DE CONFIGURACIN FTP.........................................................................................................31 EJEMPLO DE FICHERO DE CONFIGURACIN POSFIX.......................................................................................................33 BIBLIOGRAFA.................................................................................................................................................40
Introduccin
En este la siguiente documentacin se introduce al lector en la seguirdad de servidores web (Apache), y en los servicios ftp y smtp. Cuando un sistema es usado como un servidor en una red pblica, se convierte en un objetivo para ataques. Por esta razn, es de suma importancia para el administrador fortalecer el sistema y bloquear servicios. Independientemente de la seguridad a problemas particulares, es de vital importancia revisar algunas opciones generales para mejorar la seguridad en el servido. Estas soluciones son bsicamente mantener los servicios actualizados para as protegerse de las ltimas amenzas, utilizar siempre protocolos seguros siempre que sea posible, proporcionar slo un tipo de servicio de red por mquina en la medida de nuestras posibilidades y supervisar todos los servidores cuidadosamente por actividad sospechosa.
desprotegido. Por ejemplo, alguien podra remplazar el httpd binario para que la prxima vez que se inicie ejecute un cdigo arbitrario. Si el directorio donde se guardan los ficheros log o de eventos es modificable por otros distintos a root, alguien podra remplazar un fichero log por un enlace simblico a cualquier otro archivo de sistema, y entonces root podra sobrescribir ese fichero con datos arbitrarios. Si otros usuarios fuera de root pueden modificar ficheros log, se posibilita entonces la sobrescritura del propio log con datos falsos.
UserDir disabled root Estas directivas activan la navegacin del directorio del usuario para todos los directorios de usuarios excepto /root. Si desea aadir usuarios a la lista de cuentas deshabilitadas, aada una lista de usuarios delimitada por espacios en la lnea UserDir disabled TimeOut seg Tiempo mximo para una conexin activa, evita bloqueos DirectoryIndex index.html Si no existe la pgina de inicio indicada por defecto se mostrar el contenido del directorio y eso es peligroso. ServerName dns:puerto: No especificar el nombre de la mquina donde est el servidor para evitar dar ms informacin de la necesaria al exterior. FollowSymLinks Esta directiva est activada por defecto, por lo tanto tenga cuidado al crear enlaces simblicos al documento raz del servidor Web. Por ejemplo, es una mala idea proporcionar un enlace simblico a /. IncludesNoExec Por defecto, el servidor contiene mdulos que no pueden ejecutar comandos. No se recomienda modificar esta configuracin a menos que tenga la necesidad real de hacerlo, puesto que potencialmente habilita a que un atacante pueda ejecutar comandos en el sistema.
configuracin de httpd.conf. Para evitar esto hacemos, en httpd.conf: <Directory /> AllowOverride None </Directory> Si se necesitan sobreescrituras, hay que asegurarse que no puedan ser descargadas o simplemente le modificamos el nombre a algn otro que no sea htaccess. Por ejemplo, lo podramos cambiar por .httpdoverride y bloquear la descarga de todos los archivos que comiencen con .ht de la siguiente forma: <Directory directorio > AccessFileName .httpdoverride Order allow,deny Deny from all Satisfy All </Directory>
Autentificacin
Limitar el acceso de un usuario a un directorio
Lo primero pensar que directorio vamos a usar, por ejemplo /var/www/pruebas. Una vez tengamos decidido que directorio editamos /etc/apache/http.conf y aadimos esto al final por ejemplo: <Directory /var/www/pruebas> AllowOverride All </Directory> Muy bien una vez tengamos esto, nos dirigimos a ese directorio cd /var/www/pruebas Ahora lo primero tenemos que crear el archivo de password de la gente que se puede autentificar en este directorio. Para ello usaremos este comando con las siguientes opciones y sintaxis:
Opcin -c para crear un nuevo archivo de passwords. Opcin -b para suministrar el password en la lnea de la orden (modo batch). Si no se indica esta opcin, se solicita el password a continuacin. httpasswd -c -b {path}/passwords usuario contrasea
En nuestro ejemplos sera: htpasswd -c /var/www/pruebas/.htpasswd nombre_de_usuario Esto creara un directorio con un contenido parecido a este user:QDD6nJvzHZzeM El -c es para que cree un archivo de passwords nuevo, si queremos aadir usuarios a ese archivo debemos omitirle. Una vez tengamos los passwords crearemos el archivo /var/www/pruebas/.htaccess y aadimos algo tal que as AuthName "Autorizacin requerida" AuthType Basic AuthUserFile /var/www/pruebas/.htpasswd require valid-user La sentencia AuthType Basic indica el mtodo de autentificacin que deseamos usar. En nuestro caso el mtodo de autentificacin bsico. AuthUserFile debe indicar la ubicacin completa del fichero que contiene los datos de los usuarios (nombre de usuario y contrasea). No es vlido indicar una ubicacin relativa. El fichero que contiene los datos de autentificacin de los usuarios, aunque habitualmente se le llame .htpasswd, puedes usar cualquier nombre. AuthName indica el nombre que deseas darle al recurso. Este nombre aparecer en la ventanita de autentificacin donde el usuario tiene que introducir su nombre de usuario y contrasea, por lo que es recomendable darle un nombre descriptivo. La sentencia Require valid-user indica que se limitar todo acceso ya sea de tipo GET, POST o HEAD y que solo se permitir el acceso a los usuarios que aparezcan en el fichero .htpasswd.
Una vez echo esto le damos los permisos correspondientes al directorio /var/www/pruebas y a sus archivos. Pues bien, solo nos queda reiniciar el apache y probamos nuestro engendro.
Esto podra ser til, si por ejemplo, el el directorio en cuestin tienes algn formulario para subir ficheros al servidor. Usando la configuracin sugerida, solos los usuarios autentificados podran hacerlo.
Autentificacin de grupos
Supongamos que disponemos de algunos documentos ultra secretos que solo el grupo de administradores puede ver. Siempre podras crear un nuevo directorio donde ubicar estos documentos y duplicar el procedimiento descrito anteriormente. Esto supondra la necesidad de mantener varios ficheros .htpasswd, lo cual resultara bastante incomodo. Por esto existe una forma alternativa y mucho ms sencilla. Suponiendo que nuestro nuevo directorio ultra secreto es /var/www/dir/secreto, creamos un .htaccess con el siguiente contenido y lo ubicamos en el nuevo directorio: AuthType Basic AuthName Directorio secreto
Como puedes ver, en AuthUserFile se indica el mismo fichero .htpasswd, no es necesario crear uno adicional. AuthGroupFile indica la ubicacin completa del fichero que relaciona los grupos y los usuarios pertenecientes a cada grupo. El fichero AuthGroupFile se edita manualmente, usando tu editor de texto preferido, y su formato es el siguiente: nombre_del_grupo: usuario1 usuario2 usuario3
Es decir, que suponiendo un grupo administradores y que solos los usuarios pepito y jaimito pertenecen al mismo, nuestro fichero .htgroup tendra el siguiente aspecto: administradores: pepito jaimito lola juanmi pedrito
La sentencia require group administradores permitira el acceso nicamente a los usuarios que pertenezcan al grupo administradores y que se autentifiquen correctamente segn los datos del fichero .htpasswd.
Un nico administrador?
Continuando con lo anterior... y si nicamente el usuario pepito fuera administrador? En vez de crear el fichero .htgroup indicando que pepito pertenece al grupo administradores e incluir la directiva AuthGroupFile en nuestro fichero .htaccess, crearamos un .htaccess con el siguiente contenido: AuthType Basic AuthName Directorio Protegido
De esta forma, solo pepito podra acceder a nuestro directorio ultra secreto. Si en algn momento decidisemos dar acceso al usuario lola a nuestro directorio ultra secreto, solo tendramos que modificar el fichero .htaccess anterior de la siguiente forma: AuthType Basic AuthName Directorio Protegido AuthUserFile /var/www/dir/.htpasswd require user pepito lola
Deny: controla los servidores a los que se denegar el acceso, por ejemplo:
Deny from desarrolloweb.com Deny from 192.168.0.1 Deny from 192.168 Deniega el acceso desde desarrolloweb.com Deniega el acceso desde 192.168.0.1 Deniega el acceso desde todas las direcciones Ip que comienzan por 192.168
Denegar todas
Order: determina el orden en el que se leern los permisos, por ejemplo para leer primero los permitidos y luego los no permitidos se pondr "Allow,Deny" en este caso si un servidor esta en la lista de permitidos, y en la de denegados, el acceso al mismo ser denegado, ya que la entrada dentro de la opcin Deny sobrescribir la de la entrada Allow. Hay que tener en cuenta que el uso de order junto con Allow from all Deny from all, permite especificar configuraciones como, permitir desde una mquina x y denegar del resto, de una forma muy sencilla.
Ficheros logs
Apache tiene una alta configurabilidad en la creacin y gestin de logs. Apache permite la creacin de ficheros de log a medida del administrador, de este modo puedes tener un mayor control sobre lo que sucede en tu servidor .
Apache y SSL
Netscape desarroll el protocolo abierto no propietario llamado Secured Socket Layer (SSL) para proporcionar encriptacin de datos, autentificacin del servidor, integridad de datos y autentificacin de clientes para comunicacin basada en TCP/IP. HTTPS es la versin segura de HTTP que utiliza SSL para crear un canal de cifrado ms apropiado para el trfico de informacin sensible. Juntos Apache y mod_ssl da un sistema de seguridad con certificados digitales que te permite ofrecer conecciones a tu servidor de web en forma encodificado y seguro. mod_ssl es un modulo de Apache que da soporte al "secure sockets layer" (ssl) y "transport layer security" (tls) entre un servidor de Web y clientes (Web browsers).
Instalar SSL
El mdulo mod_ssl provee una interfaz para OpenSSL. OpenSSL es una implementacin de cdigo abierto de los protocolos SSL v2/v3 y TLS v1 (Transport Layer Security). Para establecer SSL para apache necesitamos instalar OpenSSL en el sistema. Se puede descargar el paquete OpenSSL desde http://www.openssl.org. Para instalar este paquete solo tenemos que descomprimirlo y desempaquetarlo e instalarlo mediante las herramientas configure y make. En la instalacin de Apache se deben pasar los siguientes argumentos a configure: --with-ssl={Directorio de OpenSSL} --enable-ssl
Crear un certificado
Una vez instalado OpenSSL y Apache con el mdulo mod_ssl debemos obtener un certificado. - A travs de una CA comercial (VeriSign). - A travs de una CA privada de autocertificacin.
Para crear un certificado de prueba utilizamos la utilidad openssl. openssl req new x509 nodes out server.crt keyout server.key Una vez creado, establecemos una password para server.key. openssl rsa des3 in server.key out server.key.new mv server.key.new server.key
local_enable=NO
Restringir cuentas de usuarios La forma ms fcil de restringir un grupo especfico de cuentas de usuarios, tales como el usuario root y aquellos con privilegios sudo, de acceder a un servidor FTP, es usando un archivo de lista PAM. El archivo de configuracin PAM para vsftpd es /etc/pam.d/vsftpd. Ejemplo: archivo de configuracin PAM /etc/pam.d/vsftpd auth required /lib/security/pam_listfile.so item=user \ sense=deny file=/etc/vsftpd.ftpusers onerr=succeed Esto le dice a PAM que consulte el archivo /etc/vsftpd.ftpusers y que niegue el acceso al servicio a cualquier usuario que est listado all. Tambin es posible desactivar las cuentas de usuario dentro de cada servicio directamente. Para deshabilitar una cuenta de usuario especfica en vsftpd, aada el nombre de usuario a /etc/vsftpd.ftpusers Limitar el nmero mximo de clientes. Indirectamente soporta un mximo nmero de clientes debido a que es un servicio basado en inetd. Si se utiliza xinetd, se puede establecer un lmite de conexiones por servicio y por IP. Si se ejecuta vsftpd en solitario (standalone) se puede restringir el nmero mximo de usuarios con la directiva: max_clients=nmero_mximo max_per_ip=nmero mximo. Escritura en el servidor Al instalar vsftpd, por defecto no se permite la escritura y adems ningn usaurio podr escribir en el directorio raz del servidor. Si se desea activar la escritura, es necesario incluir en el fichero de configuracin la directivas: #Permitir el modo de escritura write_enable=YES anon_upload_enable=YES
Conexiones utilizando SSL Para permitir que los usuarios annimos realicen conexiones utilizando SSL, ponemos
la siguiente derectiva a YES. Por defecto est a NO. Adems slo se aplica se est activa la ocin ssl_enable. allow_anon_ssl Listar directorios Si se pone a NO, a todos los comandos para listar el directorio se les denegar el permiso de ejecucin. Por defecto: YES dirlist_enable Descarga de ficheros Si se pone a NO, a todas las peticiones de descarga de ficheros se les denegar el permiso. Por defecto: YES download_enable Listar los comandos que acepta el servidor La siguiente opcin permite especificar una lista de comandos separados por comas, que sern los comandos FTP que se permitan utilizar (tras login, USER, PASS y QUIT, que son comandos previos al login, siempre son permitidos). Los dems comandos no sern aceptados. Ejemplo: cmds_allowed=PASV,RETR,QUIT
Instalacin
Para obtener los paquetes de postfix podemos obtenerlos de la pgina de postfix http://www.postfix.eu.org/. Con la opcin make, se intalarn los paquetes una vez hayan sido descomprimidos. Es necesario desactivar el sendmail y crear los usuarios postfix y el grupo postdrop bajo el cual Postfiz corre. La cuenta postfix ser tal, que no se le permitir loguearse al sistema ni necesita un shell. Aunque lo que nos atae en este tema son la opciones de seguridad para este servidor de correo.
Privilegios Default_privs indica los privilegios por defecto del agente de entrega de correo para ejecutar un comando o abrir un archivo. Generalmente se usa nobody ya que no se debe especificar un usuario con privilegios o el usuario postfix: default_privs = nobody Acceso de mquinas Para indicar que mquinas pueden y no (precedidas de !) enviar correo. mynetworks = 192.168.10.0/28, 127.0.0.0, !192.168.10.29
Indicar el tamao mximo de un mensaje Para indicar el tamao mximo que puede tener un mensaje. Por defecto: 10 MB. message_size_limit = tamao (en bytes) Indicar el tamao mximo del buzn Para ndicar el tamao mximo que puede tener un buzn de correo. Por defecto: 50 MB mailbox_size_limit = tamao (en bytes) Para especificar las mquinas destino Para especificar a las mquinas que se les puede enviar el correo: relay_domains = <direccin_de _mquina> Notificar incidencias automticamente Mediante la directiva notify_classes el administrador indica a Postfix qu tipo de incidencias debe notificar automticamente , mediante un mensaje al usuario Postmaster. notify_classes=<bounce, 2bounce, delay, policy, protocol, resource, software> 1. Bounce: Si un mensaje no puede ser encaminado, se enva otro mensaje al remitente y una copia al Postmater incluyendo el mensaje original. En el caso del Postmaster slo se incluyen por razones de privacidad las cabeceras. 2. 2bounce: En el caso en que la notificacin de un mensaje de error de encaminamiento genere tambin un error de encaminamiento, se enva notificacin a Postmaster. 3. Delay: Se informa a Postmaster de que hay mensajes pospuestos por problemas en su encaminamiento. 4. Policy: Se informa sobre peticiones rechazadas de entrega de mensajes. Normalmente se debe a que el interlocutor o el propio mensaje incumple la poltica definida para la aceptacin de correo. Muy til para conocer intentos fallidos de uso de la estafeta como relay. 5. Protocol: Se informa sobre incidentes de protocolo. 6. Resource: Se comunica a Postmaster que un mensaje no ha sido encaminado por problemas de recursos en el sistema. 7. Software: Se comunica a Postmaster que un mensaje no ha sido encaminado por problemas de software.
Rechazar conexiones Los siguientes ejemplos de la directiva smtpd_client_restrictions permite rechazar determinados tipos de conexiones o clientes, por ejemplo: Para rechazar las conexiones desde clientes cuya direccin IP no disponga de resolucin inversa en el DNS: smtpd_client_restrictions = reject_unknown_client Para verificar que el cliente que ha establecido la conexin SMTP o el remitente del mensaje no est inscrito en alguna de las listas negras que se designen smtpd_client_restrictions = reject_rbl_client relays.ordb.org Sesiones con directiva HELO EHLO. Dndole el valor yes a la siguiente directiva, se obliga a que el sistema remoto inicie la sesin con la directiva HELO o EHLO. Por defecto: NO. Obligar a iniciar la sesin con HELO/EHLO ya en s inutiliza algunas herramientas utilizadas para SPAM y algn que otro virus. smtpd_helo_required Para establecer criterios que permitan continuar o no con la sesin, en conjuncin don la anterior directiva podemos encontrar: smtpd_helo_restrictions Ejemplo de configuracin ms usada: smtpd_helo_restrictions reject_non_fqdn_hostname = reject_invalid_hostname reject_unknown_hostname
Las restricciones posibles son: - reject_invalid_hostname : rechaza la peticion cuando HELO es enviado con una mala sintaxis de host. Retorna el error 501 por defecto. - permit_naked_ip_address : permite que la peticion contenga un numero ip sin uso de corchetes en vez de un hostname. Desafortunadamente, muchos programas UCE funcionan con este procedimiento - reject_unknown_hostname : equivalente a reject_unknown_client reject_non_fqdn_hostname : rechaza cuando el hostname en el comando HELO no esta de la forma especificada en el RFC821 - check_helo_access maptype:mapname : exactamente igual a check_client_access - reject_maps_rbl reject_unknown_client : ya explicado - permit_mynetworks : ya explicado
- check_client_access maptype:mapname : ya explicado - permit - reject - reject_unauth_pipelining Filtrado por cabeceras Un mecanismo que proporciona Postfix, y que se est utilizando ampliamente contra la propagacin de virus, es la posibilidad de filtrar los mensajes en base a las cabeceras de los mismos y a patrones definidos mediante expresiones regulares. De esta manera, todo mensaje que contenga una cabecera que cumpla un determinado patrn ser rechazado automticamente. Suponiendo que el fichero de definicin de cabeceras est en /etc/postfix/headers_checks, para activar el filtrado por cabeceras ser necesario incluir en el fichero main.cf la siguiente directiva: header_checks = egexp:/etc/postfix/header_checks # Headers Checks # Virus: W32.SirCam [20/SEP/01] /^date:.*/i REJECT /^Content-Disposition: Multipart message/ REJECT # Virus Nimda (attach readme.exe) [20/SEP/01] /^X-Unsent: 1/ REJECT # Virus Badtrans [30/NOV/01] /^From: ".*" <_/ REJECT # Virus W32.Myparty.B@mm [29/ENE/02] /^Subject: new photos from my party!/ REJECT #Virus W32/Frethem.K/J [15/JUL/02] /^Subject: Re: Your password!/ REJECT
Filtrado por contenidos De igual manera que pueden filtrarse mensajes en base a patrones que se definen sobre las cabeceras de los mensajes, tambin se pueden definir patrones que se aplicarn al contenido de los mensajes Suponiendo que el fichero de definicin de contenidos es /etc/postfix/body_checks,
para activar el filtrado por contenidos en el mensaje ser necesario incluir en el fichero main.cf la directiva: body_checks = regexp:/etc/postfix/body_checks # Body Checks # /Accept Credit Cards/ REJECT /Nude Celebrities/ REJECT /PRODUCT or SERVICE/ REJECT /GUARANTEED!/ REJECT /Amateur Girls/ REJECT /FREE MEMBERSHIP/ REJECT /bizinfo/ REJECT Postfix puede ejecutar la mayora de sus procesos en modo chroot, es decir, los procesos slo disponen de privilegios para acceder al directorio /var/spool/postfix, y todas las referencias a ficheros se resuelven tomando este directorio como raz. No pueden ejecutarse en modo chroot el proceso local, virtual y todos los procesos pipe. Aunque este no es un mecanismo que garantice la inviolabilidad, s que representa una barrera ms, y por tanto es recomendable su adopcin en instalaciones que requieran un nivel adicional de seguridad. Dado que para cambiar a modo chroot es necesario copiar algunos ficheros, que cambiarn segn el sistema operativo que se est utilizando, Postfix proporciona en su distribucin una coleccin de scripts para realizar esta labor. A efectos de configuracin, slo es necesario modificar el fichero master.cf para indicar qu procesos deben ejecutarse en modo chroot.
Si eres sper-paranoico se puede cambiar este texto a otra cosa que no sea Apache modificando el cdigo fuente, o utilizando el mdulo mod_security (ver ms adelante). Asegurarse que corre bajo su propio usuario y grupo Muchas instalaciones de Apache corren como el usuario nobody (nadie). En caso de que otra aplicacin (como un servidor de mails) est corriendo tambin como dicho usuario, cualquier ataque a travs de Apache podra comprometer tambin esta otra aplicacin, y viceversa. User apache Group apache Asegurarse que archivos fuera de la raz web no sean accesibles No queremos que Apache sea capaz de acceder a ningn archivo ms all de su raz web. Por lo que, asumiendo que todos los sitios alojados se encuentran bajo slo un directorio (al que llamaremos /web), se configurara de la siguiente forma: Order Deny,Allow Deny from all Options None AllowOverride None
Order Allow,Deny Allow from all Ntese que, al activar Options None y AllowOverride None se desactivarn todas las opciones y sobreescrituras del servidor. Lo que significa que habra que agregarlas explcitamente para todos y cada uno de los directorios que necesiten una opcin o sobreescritura. Desactivar la exploracin de directorios Se puede hacer esto con una directiva Options dentro de la etiqueta Directory. Habra que configurar Options como None -Indexes
Options -Indexes Desactivar inclusiones del lado del servidor Esto tambin se logra mediante el parmetro Options de la etiqueta Directory. Habra que configurar Options a None -Includes. Options -Includes Desactivar ejecucin CGI Si no se est utilizando CGI, se lo desactiva tambin mediante el parmetro Options. Habra que configurarlo a None o -ExecCGI. Options -ExecCGI No permitirle a Apache utilizar enlaces simblicos Con el parmetro Options dentro de la etiqueta Directory. Habra que configurarlo a None -FollowSymLinks Options -FollowSymLinks Desactivando varias opciones Si se quieren desactivar todas las opcines se utiliza: Options None Si slo se quieren desactivar unas pocas, se las separa con espacios en el parmetro Options: Options -ExecCGI -FollowSymLinks -Indexes Desactivar el soporte para archivos .htaccess Esto se realiza mediante la etiqueta Directory, pero con el parmetro AlowOverride a None. AllowOverride None
Si se necesitan sobreescrituras, hay que asegurarse que no puedan ser descargadas o simplemente le modificamos el nombre a algn otro que no sea htaccess. Por ejemplo, lo podramos cambiar por .httpdoverride y bloquear la descarga de todos los archivos que comiencen con .ht de la siguiente forma: AccessFileName .httpdoverride Order allow,deny Deny from all Satisfy All Utilizar mod_security mod_security es un mdulo de Apache muy til escrito por Ivan Ristic, el autor de Apache Security de OReilly Press. Con l podrs hacer lo siguiente: * Filtrado simple * Filtrado basado en expresiones regulares * Validacin de codificacin Unicode de URLs * Auditoras * Prevencin de ataques por byte nulo * Lmites de memoria para escritura de informacin * Enmascaramiento de identidad del servidor * Soporte para chroot includo * Y ms
Desactivar los mdulos no necesarios Apache incluye varios mdulos instalados por defecto. Revisa la documentacin de los mdulos de Apache y aprende qu es lo que realmente hace cada uno de los mdulos activos. Muchas veces encontrars que no necesitars algunos de ellos. Busca las lneas del archivo httpd.conf que contengan LoadModule. Para desactivar el mdulo, tpicamente agregaras # al principio de la lnea. Para buscar los mdulos, puedes ejecutar: grep LoadModule httpd.conf
He aqu algunos mdulos comnmente activos pero frecuentemente innecesarios: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex. Asegurarse que slo el sper-usuario tenga acceso a la configuracin de Apache y sus ejecutables Esto se puede hacer (asumiendo que la instalacin de Apache se ecuentre en /usr/local/apache) de la siguiente forma: chown -R root:root /usr/local/apache chmod -R o-rwx /usr/local/apache Disminuir el valor de Timeout Por defecto, el valor del parmetro Timeout es de 300 segundos. Se puede disminuirlo para reducir los posibles efectos de un ataque de denegacin de servicio. Timeout 45 Limitar grandes pedidos Apache tiene varios parmetros que permiten limitar el tamao de un pedido, lo que puede ser tambin til para minimizar los efectos de un ataque de denegacin de servicio. Un buen lugar para comenzar es el parmetro LimitRequestBody que, por defecto, est configurado a ilimitado. Si se van a permitir subidas de no ms de 1Mb se lo podra configurar como: LimitRequestBody 1048576 Si no se permitirn subida de archivos se lo puede configurar an ms pequeo. Otros parmetros a controlar son LimitRequestFields, LimitRequestFieldSize y LimitRequestLine. stas estn configuradas por defecto a valores razonables en la mayora de los servidores, pero podras llegar a querer persnalizarlas a tus necesidades. En la documentacin sobre las mismas hay ms informacin que puedes consultar. Limitar el tamao de un cuerpo XML
Si se est utilizando mod_dav (tpicamente utilizado por subversion) entonces podras llegar a querer limitar el tamao mximo del cuerpo de un pedido XML. El parmetro LimitXMLRequestBody est slo disponible en Apache 2 y su valor por defecto es 1 milln de bytes (aproximadamente 1mb). Muchos tutoriales indicarn modificar este valor a 0, lo que implica que archivos de cualquier tamao podrn ser subidos, lo que puede ser necesario si se est utilizando WebDAV para subir grandes archivos, pero si slamente se lo est utilizando para control de versiones, probablemente un lmite de 10Mb ser suficiente. LimitXMLRequestBody 10485760 Limitar la concurrencia Apache posee varios parmetros de configuracn que pueden ser utilizados para ajustar el manejo de pedidos simultneos. MaxClients es el mximo nmero de procesos que sern creados para atender pedidos. El valor por defecto puede ser demasiado alto si el servidor no tiene memoria suficiente para manejar un alto nmero de pedidos concurrentes. Otros parmetros como MaxSpareServers, MaxRequestsPerChild y, en Apache 2, ThreadsPerChild, ServerLimit y MaxSpareThreads son importantes para ajustar la configuracin al sistema operativo y hardware. Restringir el acceso por IP Si se posee un recurso que slo debera de ser accesible para una red o IPs determinada se puede asegurar esto en la configuracin de Apache. Por ejemplo, si se quiere restringir el acceso a la red interna slo para la red 176.16: Order Deny,Allow Deny from all Allow from 176.16.0.0/16 O por IP: Order Deny,Allow Deny from all Allow from 127.0.0.1
Ajustar configuracin de vida de conexin (KeepAlive) Segn la documentacin de Apache, el utilizar HTTP KeepAlives puede mejorar la performance de los clientes hasta en un 50%, por lo que hay que tener cuidado al modificar estos parmetros, se estar intercambiando performance por una pequea denegacin de servicio. La persistencia de las conexiones est activada por defecto y se la debera mantener activada. Sin embargo, se podra considerar el cambio del parmetro MaxKeepAliveRequests (100 por defecto) y KeepAliveTimeout (15 por defecto). El analizar los archivos de log ayudan a determinar los valores apropiados. Ejecutar apache en un entorno chroot chroot permite ejecutar un programa en su propia jaula completamente aislada. Esto previene que una ruptura en un servicio afecte cualquier otra cosa en el servidor. Esto puede ser relativamente complicado de configurar en chroot debido a dependecias de libreras. Se mencion antes que el mdulo mod_security posee soporte para chroot. Esto hace el proceso tan simple como agregar una directiva a la configuracin: SecChrootDir /chroot/apache Existen algunos inconvenientes sin embargo, es recomendable revisar la documentacin para ms informacin. Crditos Encontr al libro Apache Security como un recurso muy valioso para asegurar un servidor web Apache. Algunas de las sugerencias anteriores fueron inspiradas por ese libro.
local_enable. Con esta opcin permitiremos que los usuarios locales puedan hacer login en el servidor. Esto nos servir para tener un usuario virtual que pueda autenticarse. max_clients, max_per_ip. Estas opciones nos servirn para establecer el nmero mximo de clientes, totales y por direccin IP. pam_service_name. Se iguala al nombre con el que hemos guardado nuestro fichero de configuracin de PAM dentro de /etc/pam.d . guest_enable. Igualado a YES, permite el login de usuarios virtuales. guest_username. Si se incluye, este parmetro ha de igualarse a un nombre de usuario real hacia el cual se mapearn todos los usuarios virtuales creados. Al crear el usuario, tendremos que igualar su directorio personal (home) al directorio por defecto que queramos usar como contenedor de archivos. Por ejemplo, para crear un usuario llamado virtual con un directorio en /var/ftp/pub, teclearamos en la consola lo siguiente (El directorio /var/ftp/pub ya est creado en algunas distribuciones, as que tendremos que cambiarlo de propietario con el comando chown): # useradd -d /var/ftp/pub virtual virtual_use_local_privs. Igualar este parmetro a YES supone indicar que los usuarios virtuales tendrn los mismos privilegios que los usuarios locales. user_config_dir. Igualaremos este parmetro al directorio que contendr los permisos de cada usuario en un fichero por separado. El formato de cada fichero ser el de un fichero de texto plano que contendr, de todos los parmetros de vsftpd a nuestra disposicin, slo aquellos que queramos que sean aplicados al usuario en concreto. Por ejemplo, dado el fichero /etc/vsftpd/users/user_001 correspondiente a la configuracin de user_001, escribiremos las lneas siguientes, donde extendemos los permisos bsicos, permitimos la escritura y la subida de archivos y establecemos la raz a partir de la cul tendr acceso dicho usuario: dirlist_enable=YES download_enable=YES local_root=/var/ftp/pub/user_001 write_enable=YES anon_upload_enable=YES virtual_use_local_privs=YES chroot_local_user. Esta opcin se iguala a YES para "enjaular" a los usuarios locales en sus respectivos directorios. El usuario "enjaulado" no podr acceder a nada que est por encima de su directorio principal. En nuestro ejemplo, el directorio personal del usuario virtual es /var/ftp/pub por lo que colgaremos de esa ruta todos los
directorios de usuarios virtuales que queramos, ya que no tendrn acceso a ninguna otra parte del disco, ni tan siquiera mediante el uso de enlaces simblicos. local_umask. Con esta opcin establecemos el valor de umask de los ficheros que se creen mediante el servidor de ftp. Si no utilizamos el parmetro, su valor por defecto ser 077. xferlog_enable, xferlog_file. Estas opciones activan el log del servidor y lo establecen a un archivo determinado. idle_session_timeout, data_connection_timeout. Con estas opciones establecemos los tiempos de conexin sin actividad y con ella, respectivamente. Los valores por defecto si no se especifica nada, son de 300 en ambos casos. ftpd_banner. Mediante esta opcin estableceremos un saludo del servidor cuando se produzca una conexin al mismo.
# IMGate: agreguen sus redes ip ac, con el formato "a.b.c.d/n," # una por lnea, comenzando con un espacio o TAB en la primer # columna, y una ',' ( coma ) al final de cada lnea, excepto la ltima # mynetworks = 127.0.0.0/8, *****, *****
smtpd_recipient_restrictions = reject_unauth_pipelining, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_recipient_domain, hash:/etc/postfix/to_recipients_bw.map, reject_unknown_sender_domain, permit_mynetworks, reject_unauth_destination, check_client_access hash:/etc/postfix/mta_clients_bw.map, check_sender_access regexp:/etc/postfix/from_senders.regexp, check_sender_access hash:/etc/postfix/from_senders_bw.map, check_helo_access hash:/etc/postfix/helo_hostnames.map, check_sender_access hash:/etc/postfix/from_senders_slet.map, check_sender_access hash:/etc/postfix/from_senders_clueless.map, check_sender_access hash:/etc/postfix/from_senders_bogus.map, check_sender_access hash:/etc/postfix/from_senders_mybogus.map, reject_rbl_client blackholes.wirehub.net, reject_rbl_client bl.spamcop.net, reject_rbl_client list.dsbl.org,
reject_rbl_client dnsbl.njabl.org, reject_rbl_client relays.ordb.org, reject_rbl_client dynablock.wirehub.net, reject_rbl_client proxies.relays.monkeys.com, reject_rbl_client dialups.relays.osirusoft.com, reject_rbl_client spamhaus.relays.osirusoft.com, reject_rbl_client orbs.dorkslayers.com, reject_rbl_client socks.relays.osirusoft.com, reject_rbl_client inputs.relays.osirusoft.com, reject_rbl_client relays.visi.com, reject_rbl_client opm.blitzed.org, reject_unverified_sender, permit
header_checks = pcre:/etc/postfix/header_checks.regexp #header_checks = regexp:/etc/postfix/header_checks.regexp si no compilamos Postfix con PCRE body_checks = pcre:/etc/postfix/body_checks.regexp #body_checks = regexp:/etc/postfix/body_checks.regexp
smtpd_banner = $myhostname - ESMTP - $mail_name - Attn: el correo SPAM no se permite y ser castigado.
double_bounce_sender = double-bounce
# # IMGate: Reemplazar ***** con la direccin de email correspondiente, como mx1admin@midominio.com. # bounce_notice_recipient = ***** delay_notice_recipient = ***** error_notice_recipient = *****
empty_address_recipient = MAILER-DAEMON
debug_peer_level = 2 readme_directory = /etc/postfix/README sample_directory = /etc/postfix/samples sendmail_path = /usr/sbin/sendmail setgid_group = postdrop manpage_directory = /usr/local/man newaliases_path = /usr/bin/newaliases mailq_path = /usr/bin/mailq
# Valores de IMGate que sobrescriben los del postfix por defecto # disable_vrfy_command = yes smtpd_helo_required = yes smtp_always_send_ehlo = yes biff = no maximal_queue_lifetime = 7200s delay_warning_time = 1 smtpd_hard_error_limit = 2 strict_rfc821_envelopes = yes
strict_7bit_headers = yes
ignore_mx_lookup_error = yes queue_minfree = 20480000 smtpd_timeout = 20s smtp_connect_timeout = 60s smtp_data_done_timeout = 60s smtp_data_init_timeout = 60s smtp_data_xfer_timeout = 60s smtp_helo_timeout = 60s smtp_mail_timeout = 60s smtp_quit_timeout = 60s smtp_rcpt_timeout = 60s
address_verify_map = hash:/var/log/address_verify.map address_verify_positive_expire_time = 31d address_verify_positive_refresh_time = 7d address_verify_negative_cache = yes address_verify_negative_expire_time = 3d address_verify_negative_refresh_time = 3h unverified_sender_reject_code = 554
En el ejemplo anterior hay que hacer destacar algunos detalles importantes para su compresin: - El archivo transport.map posee las IPs para las cuales se 'transporta' el correo. Este y todos los archivos '.map' deben ser luego de editados, 'postmapeados', utilizando el comando 'postmap archivo.map'. ####### transport.map ##### # midominio.com smtp:[ip.ad.re.ss]
# - La lnea relay_domains apunta tambin al transport.map, simplificando la configuracin y mantenimiento de archivos. Previamente, exista el archivo relay_domains.map. - Alias database y alias_map indican los alias de correo para utilizar como receptores de los mensajes del sistema. - Smtpd_recipient_restrictions es donde se definen las polticas Anti-SPAM, y merece un captulo aparte aqu. - Header_checks es otro de los controles Anti-SPAM y lo tenemos detallado aqu. - Body_checks es similar al anterior, y se explica aqu. - Smtpd_helo_required es para requerir HELO/EHLO en el dilogo SMTP. - Strict_rfc821_envelope es el cumplimiento estricto de la RFC 821. - Notify_classes indica cul de los mensajes de error generados por el Postfix es enviado al alias.
Bibliografa
Nociones bsicas de seguirdad en servidores ftp http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/es/security-guide/s1server-ftp.html Para instalar y concer las opciones de configuracion de un servidor ftp: http://informatica.uv.es/it3guia/AGR/apuntes/teoria/FTP.pdf. Configuracin completa de postfix http://linuxsilo.net/articles/postfix.html Pgina dedicada a la instalacin, configuracin sobre postix http://www.cotel.com.ar/postfix/maincf.htm Gua de configuracin postfix http://www.tux.cl/articulos:correo:postfix_-_guia_de_configuracion