seguro - Consejos de optimización y seguridad del servidor web Apache
seguridad de apache web server (6)
Estoy a punto de gestionar y ejecutar mi primer servidor web Apache conectado a Internet y me preguntaba si hay administradores y desarrolladores de sistemas que deseen compartir algunos de sus conocimientos sobre seguridad y consejos de optimización para ejecutar el servidor web Apache.
Tal vez pueda compartir su lista de cinco (o diez) mejores cosas que hace inmediatamente después de instalar el servidor web Apache (en una caja Linux).
Cualquier ayuda muy apreciada.
BASIC
- Asegúrese de tener instalada la última versión estable . Ejecutar la versión anterior o inestable de Apache podría exponer su sistema a fallas de seguridad o soluciones no probadas
- Asegúrese de que solo se procesen las solicitudes previstas . Debería considerar quién tiene que acceder a los recursos web expuestos por Apache y cómo .
- Evite ejecutar Apache como root . Es un requisito.
- Maneja tus registros . Los registros tienden a ser más grandes y más grandes; considere configurar logrotate o limpiar su registro periódicamente.
- Monitoree la salud de Apache con un sistema de monitoreo . Me gusta juntar munin y monit, ambos fáciles de configurar y mantener. Nagios y otros merecen una mirada.
- Si Apache está sirviendo aplicaciones web (es decir, PHP, Perl, Rails), asegúrese de que el módulo correcto maneje las solicitudes en el orden correcto .
- Escribe un bonito mensaje 404 y 500 . Tarde o temprano, tus visitantes recibirán un error.
- Detenga y reinicie Apache , por lo que puede estar seguro de que tanto el procedimiento de gritar como el de inicio funcionan sin fallas.
- Use mod_security
Seguridad
- Protege Apache contra DOS.
- Cargue solo los módulos realmente necesarios.
- Controle su registro para descubrir si algo extraño está sucediendo.
Actuación
- Si está compilando Apache desde el código fuente, asegúrese de usar MPM (Módulos de procesamiento múltiple).
- Cargue solo los módulos realmente necesarios.
- Compruebe la configuración de MaxClients para que su servidor no engendre tantos hijos que comience a intercambiarse.
- Utilice el módulo mod_deflate, que proporciona el filtro de salida DEFLATE que permite que la salida de su servidor se comprima antes de enviarla al cliente a través de la red.
- Chroot el servidor web
- Deshabilita cualquier módulo que no vas a necesitar
- Uno que en su lugar necesitas es mod_security
- Configura un verificador de integridad de archivos para tu webroot
- Asegure todo lo demás en el mismo servidor y apague todo lo que no use
- Ejecute pruebas en su servidor con herramientas como nmap o Metasploit
Asegúrese de haberlo configurado para detectar ataques de DOS (Denegación de servicio).
Si está ejecutando un entorno LAMP (Linux, Apache, MySQL, PHP / PEARL / PYTHON) estándar: coloque MySQL en otra máquina que no sea Apache. Será un poco más lento con solo unos pocos procesos concurrentes (debido a la latencia de la red), pero será MUCHO más rápido con muchos procesos concurrentes.
Voy a interpretar "después de instalar Apache en una caja" como "Preparación de una nueva instalación de servidor para uso en producción", porque, por supuesto, todo esto se haría en un servidor de desarrollo y se comprometería con SCM o se integraría en una instalación automática.
Todo lo que haga para optimizar debe hacerse en base a medidas reales. Configure un entorno de prueba con su aplicación real que desea ejecutar, de la forma más realista posible. Algunos puntos a considerar son:
- No configure MaxClients demasiado alto. Puede usar mucha RAM, particularmente con servidores prefork con una gran aplicación incrustada en ellos (por ejemplo, mod_perl, PHP, etc.). Usar demasiada memoria es contraproducente. Es mejor para los clientes esperar un servicio exitoso que recibir un error.
- Considere cuidadosamente si tiene Keepalives activado. Estos pueden acelerar y disminuir la velocidad dependiendo de su entorno. Si elige tenerlos activados, debe pensar en su tiempo de espera de keepalive según el caso de uso real.
- Haga pruebas de rendimiento con HTTPS habilitado si está utilizando HTTPS en producción
- Establezca los encabezados "Última modificación" y "Caducar" de forma adecuada en los objetos que cambian con poca frecuencia (para maximizar el almacenamiento en caché del lado del cliente). Pruebe el almacenamiento en memoria caché del lado del cliente en una variedad de navegadores.
- Asegúrese de que su aplicación utilice HTTPS correctamente, no de forma tal que los navegadores generen advertencias de seguridad (esta es otra buena razón por la que necesita usar HTTPS durante las pruebas)
- Asegúrese de que el proceso de Apache no se esté ejecutando como root.
- Asegúrese de estar en la última versión estable
- Si la caja está conectada directamente a Internet, asegúrese de haber pensado en todos los demás servicios, como ssh.
- Inspeccione cuidadosamente las reglas de su firewall local, apriételas. (Ver iptables)
- No encienda las opciones que no entiende o que no planea usar
- Considere suscribirse a una lista de correo de seguridad de Apache para que pueda aprender de inmediato cualquier parche crítico