Instalar un Servidor Web Seguro (Linux + Apache + PHP + Joomla + Tomcat/JBOSS) : P4 – Securizando Joomla
Hoy vamos a dar una serie de consejillos para securizar nuestro Joomla. Es seguro todos sabéis que se trata de un gestor de contenidos (evolución de Mambo) programado sobre PHP, que nos va a permitir de una forma sencilla generar arquitecturas Web adaptadas a nuestras necesidades.
Se trata de un entorno con mucho potencial a la hora de dotar a nuestra web de nuevas funcionalidades a través de sus complementos , módulos y plugins… que nos permitirán instalar miles de extensiones, disponiendo así de una plataforma rápida en su puesta en marcha y sencilla en su mantenimiento.
Generalmente se tratará de una instalación sobre maquinas Linux, junto con Apache y Mysql como repositorio de datos, aunque ya sabemos que esto no tiene por que ser siempre asi:).
Al basarse principalmente en PHP, vamos a dar alguna recomendación a la hora de configurarlo.
Procedemos a editar el fichero de configuración. Al trabajar sobre la versión 5:
# vi /etc/php5/apache2/php.ini
Algunos parámetros a tener en cuenta deberían deberían de ser los siguientes :
expose_php = Off
safe_mode = On
safe_mode_gid = On
display_errors = Off
display_startup_errors = Off
register_globals = Off
magic_quotes_gpc = On
allow_url_fopen = Off
allow_url_include = Off
open_basedir = /var/www/html
disable_funcions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec, system,passthru,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show
max_execution_time = 30
max_input_time = 60
;max_input_nesting_level = 64
memory_limit = 16
Hay que tener cuidadin con lo que desactivamos ya que determinadas aplicaciones podrían dejar de funcionar.
Ahora si vamos a proceder a dar algunas recomendaciones sobre la configuración de nuestro querido Joomla.
- Empezaremos por renombrar la cuenta por defecto Admin con algún otro nombre, lo que nos va a servir para evitar ataques automatizados o ataques de fuerza bruta.
- Deberemos borrar todos los ficheros de ayuda y archivos por defecto que no sean necesarios. También podemos modificar las imágenes (/imágenes/) en las que aparezcan referencias a la versión de Joomla que tenemos instalada. Puede ser una forma de entretener un poquito más a nuestros atacantes.
- Restringimos el acceso a la zona de administración (/administrador/) con las técnicas que hemos visto a la hora de configurar el apache (.htaccess…)
- Resulta interesante mover el archivo de configuración fuera del directorio raíz.
- No permitir que se puedan instalar componentes, módulos… sin autorización del administrador.
- Renombrar la carpeta administrador, teniendo cuidado con los enlaces, para que esta no pueda ser descubierta por técnicas de enumeración, o instalar el componente JSEcure (Que ha dejado de ser gratuito) para proteger la zona de administración con una key.
- No permitir registro de usuarios nuevos que no sean autorizados por el administrador.
- Controlar los permisos que asignamos a las carpetas.
Como veís hemos dados algunas recomendaciones que van a permitir disponer de un sistema algo mas robusto. De todas formas, como ya hemos comentado en anteriores artículos, si vamos a exponer información sensible como pueden ser datos de usuarios, contraseñas… debemos instalar un certificado que por un lado nos garantice que nos estamos conectando a la web real, y que la información va a viajar de una forma segura por la red. Hablamos de los certificados digitales.
Vamos a ello…
Para ello instalamos los siguientes paquetes en nuestro Debian:
#apt-get install libapache2-mod-gnutls ssl
Activamos el modulo SSL
# a2enmod ssl
Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
Run ‘/etc/init.d/apache2 restart’ to activate new configuration!
Activamos el site-ssl que contendrá la configuración
# a2ensite default-ssl
Enabling site default-ssl.
Run ‘/etc/init.d/apache2 reload’ to activate new configuration!
Reiniciamos el servicio Web
# /etc/init.d/apache2 restart
Si no disponemos de un certificado emitido por una entidad certificadora, por el coste que este supone, podemos crear el nuestro propio. Vamos a ello…
#openssl req -new -x509 -nodes -out
/etc/ssl/certs/blog.iurlek.com_self.crt -keyout /etc/ssl/private/blog.iurlek.com_self.key
Editamos el fichero de configuración:
#vi /etc/apache2/default-ssl
SSLCertificateFile /etc/ssl/certs/www.domi.com.com_self.crt
SSLCertificateKeyFile /etc/ssl/private/www.domi.com_self.key
Y reiniciamos el servicio:
#/etc/init.d/apache restart
Ahora podría resultar interesante instalar un servicio de correo MTA que nos permita el envio de correos, en nuestro caso se va a tratar de Postfix. Un sistema fiable, seguro y fácil de administrar.
Si nuestro MTA por defecto es exim4, primero deberemos proceder a desinstalarlo antes de poder trabajar con Postfix.
#apt-get purge exim4
Y procedemos a instalar los siguientes paquetes :
#apt-get install procmail
#apt-get install postfix
Si deseamos que se reenvíen los correos que reciban los usuarios a cuentas externas, deberemos generar en el fichero home de los usuarios un fichero .forward con la cuenta de correo a la que queremos reenviar estos correos.
#vi /home/pedimave/.forward
pedimave@gmail.com
O definir un usuario que reciba los correos destinados a root.
Para ello editamos el siguiente fichero
#vi /etc/aliases
Y añadimos en el mismo:
root: pedimave
Ahora solo nos queda ejecutar:
#newaliases
Ahora que ya tenemos nuestro Postfix instalado vamos a proceder a securizarlo un poquitín.
Editamos el archivo de configuración de Postfix
#vi /etc/postfix/main.cf
Una configuración básica podría ser la siguiente:
smtpd_banner = Ongi Etorri
biff = no
alias_maps = hash:/etc/aliases
append_at_myorigin = yes
De este modo ocultamos la versión y obligamos a que todo mail enviado por los procesos automáticos del sistema tengan como dominio el especificado en ‘/etc/mailname’ (si se envián a usuario@localhost se reescribirá como usuario@iurlek.com).
Editamos el siguiente fichero para establecer el dominio que queremos aparezca:
#vi /etc/mailname
Iurlek.com
Si únicamente vamos a utilizar Postfix como servicio local, podemos editar: ‘/etc/postfix/master.cf’ para asegurarnos que únicamente se aceptan conexiones localhost:
127.0.0.1:smtp inet n – – – – smtpd
Ya solo nos queda reiniciar el servicio:
# /etc/init.d/postfix restart
Buenos compañeros a seguir disfrutando del veranito y nos vemos pronto!!.