¡Te damos la bienvenida al nuevo sysarmy --help! Para recuperar tu usuario pedí un password reset.

Seguridad en Apache

Viejas les cuento la situación. Sysadmin anterior partió por lo que los web servers que tiene la empresa administrando me cayeron a mi que tengo prácticamente nula experiencia pero en dos semanas la vengo piloteando bastante bien para mi sorpresa. La cuestión pasa por el escenario que me encuentro y necesito confirmar mis sospechas:

Todos los servers los manejaba con Webmin y las bases con PhpMyAdmin, servidores en producción de clientes muy grosos ¿estoy en lo correcto si esta forma no encaja en lo que se dice "best practice"? bueno, también en la documentación encuentro que la conexión por ssh la hacía directamente con el usuario root...

¿Qué detalles debería ir auditando para armar un informe y comenzar a segurizar los servidores? Nunca pasó nada pero tampoco quiero que pase justo ahora que me caen estas tareas a mi.

Desde ya muchas gracias por lo que me puedan ir recomendando.



Abrazo

Respuestas

  • Como para evitar que te den murra de movida.

    • Limitar el SSH solo desde las IP's necesarias para administrator (aka iptables)
    • Limitar el Webmin solo desde las IP's necesarias para administrator (aka iptables)
    • Idem al PHPMyAdmin. Si necesita estar disponible para devs desde afuera, al menos un htaccess antes para complicarles un poco el bruteforcing
    • Usuario, not root.
    • SSH Keys y no passwords
    • Alguna herramienta automatizada de analisis para empezar estaría bien, i.e. lynis
  • Hola, mientras que tengas webmin actualizado, en otro puerto, en lo posible en interfaz privada (a la cual llegás por tunel ssh o vpn), no lo uses con usuario root y si pudieras le agregas un htaccess para clave adicional, estaría todo en orden. Phpmyadmin si podes quitalo o desactivalo y si realmente precisas tener algo mas visual podés usar MySQL Worbench con tunel ssh. Y con respecto a la seguridad en general empezá por las cosas mas básicas: parches (updates), permisos, superficie de exposición (servicios publicados a internet solo puertos realmente necesarios y si se puede filtrar con un firewall mejor), limitá o enmascará la info que muestran los servicios, etc ...
    Otro tema MUY importante a tener en cuenta son las aplicaciones que corren en esos webservers. Podes tener el servidor mas seguro del mundo, pero con una webapp vulnerable queda tan seguro como eso.

    Saludos
  • A lo de edu fortes le agregaria:

    1. Versiones de software, especialmente de:
      1. Apache
      2. PHP
      3. Mysql
      4. Kernel
    2. Si no esta, habilitar SELinux en enforce, es lo minimo que necesitas para tener una proteccion baseline ante zerodays si lo configuras correctamente, CUIDADO que esto puede ROMPER COSAS que tus clientes corran en el WS. Evalua la chance de pasar a kernels compilados con grsecurity.
    3. Si estas seguro que los equipos no tienen ninguna pinchadura, meteles tripwire, logwatcher.
    4. Tomate el laburo de aprender a usar SEC (https://simple-evcorr.github.io/) arma reglas para que te alerte minimamente ante logins de root y uso de sudo por correo/telegram/twitter/someothermodernshit, sobre todo para cuando estas fuera de horario laboral.
    5. Algo lindo para implementar tambien es FreeIPA y openOTP
  • En el mejor de los mundos yo haría antes de tocar nada un lindo snapshot del servidor completo. Si tenés acceso físico a los servidores a lo mejor podés probar FileZilla y restaurarte una imágen en un servidor de desarrollo y probar ahí antes cualquier cambio delicado como actualizaciones grandes, borrar cosas, etc.

    Después haría backups de los archivos más importantes, en cuanto a configuraciones, como /etc y /home así como de las bases de datos usando algo como mysqldump, y dejaría de ser posible una de esas copias fuera de dichos servidores.

    Después, si tenés conocimientos como para administrar el servidor "a mano" (ssh o consola), desinstalaría webmin directamente y me olvidaría de tener otra cosa más para mantener actualizada y administrar.

    Algo similar con phpMyAdmin. Si te animás a usar el comando sql, desinstalalo o como comentaron anteriormente, usá algún cliente de mysql como el Workbench, que hoy en día no sé qué tan usable estará, cuando lo probé en sus primeros días era imposible de hacer una operación sin que se cerrara la GUI, pero quizás eso cambió.

    Pasale un nmap al server para ver qué puertos tiene abiertos y ver si es coherente con los servicios que supuestamente está brindando.

    iptables también es un must, pero tené mucho cuidado con las reglas porque si no tenés bastante claro lo que estás haciendo te podés quedar afuera del server y a menos que tengas acceso físico o a través de una consola tipo vnc, se te va a venir la noche.

    Hacé limpieza de paquetes que no uses, esto no sólo desocupa lugar sino que quizás termina servicios que no usás, y achica el tamaño y tiempo de las actualizaciones. Cualquier cosa que entorpezca o dificulte el mantener el servidor actualizado, tiene que volar IMHO. No sé qué distro corren los servers, pero si es debian o derivado podés probar el deborphan, que elimina los paquetes huérfanos que muchas veces quedan ahí tirados ocupando espacio y seguís actualizándolos al pedo.

    Mantené el servidor actualizado, pero tené cuidado cuando haya saltos de versiones importantes especialmente en Apache o MySQL porque tienen por costumbre cambiar cosas en la configuración y te pueden dejar a pata (true story).

    Siempre usuario normal con sudo, nunca root directamente, tanto para acceder por ssh o consola, como para usar mysql. Por ejemplo, en sitios hechos con CMS como Wordpress, no uses el usuario root para acceder a la base (wp-config.php), creale un usuario que tenga todos los permisos pero sólo para la base de datos del sitio.

    Cambiale la contraseña a los usuarios de linux que supuestamente ya no se usen. Eventualmente conviene borrarlos pero un mal administrador pudo haber dejado cosas en su carpeta que son útiles como scripts y hasta archivos de configuración que si desaparecen pueden causarte problemas.

    Después de cambiar cualquier cosa, verificá que todo ande. Es fácil cambiar una opción en apache y reiniciarlo y no darse cuenta que al reiniciar en realidad te tiró un error por un typo en el archivo de configuración y nunca terminó de arrancar.

    No sé si estará dentro de tus posibilidades pero en una empresa en la que trabajé que tenía 5 servidores (que eran CPUs pedorras en realidad) los convencí de comprar una buena máquina para hacer de servidor y le puse Proxmox que es un servidor de máquinas virtuales. Hice imágenes de los servidores y los convertí en servidores virtuales. Algunos los fusioné en un mismo servidor (ej: servidores que sólo corrían apache para alojar unas páginas web o la intranet), y otros los mantuve separados. Esto te da la posibilidad de hacer snapshots tocando un botón, etc.

    Buscate o inventate algún script que te mande mails cuando queda poca memoria y/o espacio en disco en los servidores. Yo uso unas líneas de bash + PHPMailer.

    Una vez que tengas todo corriendo más o menos bien, programá backups periódicos de las cosas que se actualicen con más frecuencia, que es generalmente son las bases de datos. Si podés, usá uno de los servidores como servidor de backups, montá por NFS las carpetas remotas que querés respaldar y guardá los backups en este servidor de backups y/o en un almacenamiento externo conectado a este servidor.

    Esto es lo que se me ocurre hasta el momento, espero que te sirve.



    Abrazo
Este hilo ha sido cerrado.