¿Qué se puede hacer para proteger el servidor Ubuntu?

35

Tengo un proyecto para asegurar Ubuntu Server tanto como pueda. El servidor es un servidor de alojamiento web. El servidor ejecutará LAMP, Mail y DNS.

Un cero
fuente
¿Qué servicios se ejecutarán?
wojox
LAMP, Mail, DNS
One Zero
Hice una hoja de trucos del servidor Ubuntu y me gustaría compartirla con usted. Las primeras páginas son comandos generales de Linux, luego paquetes de servidores específicos y la última página es una lista de verificación de seguridad del servidor. La lista de verificación une consejos y fortalecimientos de muchos sitios web. ¡Espero que te ayude! Licenciado bajo la licencia WTFPL . Puede ver / descargar / cualquiera que sea la lista de verificación aquí . Lo actualizo de vez en cuando.
Noah Krasser

Respuestas:

43

Aquí hay una lista de cosas que hago para asegurar mi servidor.

  1. Active UFW ( sudo ufw enable) y luego solo permita los puertos que realmente se utilizan. ( sudo ufw allow 80)
  2. Asegúrese de que MySQL solo permita conexiones desde localhost.
  3. Habilite TLS en los servicios de correo. Incluso si es un certificado autofirmado. No desea que las contraseñas se envíen de forma clara.
  4. Instale bloqueadores de fuerza bruta ssh como denyhosts o fail2ban. ( sudo apt-get install denyhosts)
  5. Considere hacer solo inicios de sesión basados ​​en claves ssh.
  6. Aprende AppArmor. Si usa configuraciones bastante vainillas, entonces es extremadamente fácil. Solo asegúrate de que esté encendido. Ayudará a reducir las vulnerabilidades de día cero.
  7. Dependiendo del acceso físico al servidor, es posible que incluso desee cifrar los datos en el disco duro.
  8. Siga otras recomendaciones en este enlace. EDITAR: Olvidé editar esto cuando no tenía suficiente reputación para agregar más enlaces. El enlace que se entiende aquí es el último enlace a continuación.
  9. Nunca confíes en tus usuarios. Si tiene múltiples usuarios con acceso al sistema, bloquéelos. Si tienes que darles acceso a sudo, dales solo lo que necesitan.
  10. Usa el sentido común. Piensa mucho en cómo entrarías si alguna vez te bloquearan. Luego cierra esos agujeros.

Algunas cosas más a tener en cuenta. La mayoría de las personas se olvidan del acceso físico. Todas las configuraciones de software en el mundo no significan nada si puedo entrar físicamente con un LiveCD y robar sus datos. Cuidado con la ingeniería social. Haga preguntas para verificar quién está hablando por teléfono y asegúrese de que tengan autorización para hacer la solicitud que están haciendo.

Como todavía soy un "nuevo" usuario, no puedo publicar más de 2 enlaces. Puede leer más sobre este tema aquí: https://help.ubuntu.com/12.04/serverguide/index.html y preste especial atención a https://help.ubuntu.com/12.04/serverguide/security.html

Patrick Regan
fuente
2
Una alternativa al uso de UFW (mientras todavía usa firewalls integrados en Ubuntu) es bloquear su sistema con iptablesreglas extremadamente específicas para no permitir el acceso externo a cualquier servicio que no vaya a utilizar, si tiene un problema extraño. configuración de bola que requiere enrutamiento avanzado y otras cosas.
Thomas Ward
2
@LordofTime De acuerdo. De hecho, yo uso iptables, pero ufw está bien para la mayoría de las instalaciones básicas. Además, UFW es más o menos un contenedor para las configuraciones más comunes de iptables de todos modos. El sistema subyacente sigue siendo el mismo.
Patrick Regan
2
+1 para ufw, no eres un usuario nuevo, eres miembro durante 1 año: p
Tachyons
1
De hecho, solo quería señalar que, en ciertos casos, iptables tendrá una mejor usabilidad sobre ufw en ciertos casos
Thomas Ward
1
Considere BastilleLinux , también es un buen conjunto de protección de seguridad.
pl1nk
13

Memoria compartida segura

/ dev / shm se puede usar en un ataque contra un servicio en ejecución, como httpd. Modifique / etc / fstab para hacerlo más seguro.

Abra una ventana de terminal e ingrese lo siguiente:

sudo vi /etc/fstab

Agregue la siguiente línea y guarde. Deberá reiniciar para que esta configuración surta efecto:

tmpfs     /dev/shm     tmpfs     defaults,noexec,nosuid     0     0

Endurezca la red con la configuración de sysctl

El archivo /etc/sysctl.conf contiene todas las configuraciones de sysctl. Evite el enrutamiento de origen de los paquetes entrantes y registre las IP con formato incorrecto, ingrese lo siguiente en una ventana de terminal

sudo vi /etc/sysctl.conf

Edite el archivo /etc/sysctl.conf y descomente o agregue las siguientes líneas:

# IP Spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0 
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Log Martians
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0 
net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net.ipv4.icmp_echo_ignore_all = 1

Para recargar sysctl con los últimos cambios, ingrese:

sudo sysctl -p

Prevenir la suplantación de IP

Abra una Terminal e ingrese lo siguiente:

sudo vi /etc/host.conf

Agregue o edite las siguientes líneas:

order bind,hosts
nospoof on

Endurecer PHP por seguridad

Edite el archivo php.ini:

sudo vi /etc/php5/apache2/php.ini

Agregue o edite las siguientes líneas:

disable_functions = exec,system,shell_exec,passthru
register_globals = Off
expose_php = Off
magic_quotes_gpc = On

Servidor de seguridad de aplicaciones web - ModSecurity

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Protección contra ataques DDOS (denegación de servicio) - ModEvasive

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Analizar registros y prohibir hosts sospechosos - DenyHosts y Fail2Ban

@DenyHosts

DenyHosts es un programa de Python que bloquea automáticamente los ataques SSH al agregar entradas a /etc/hosts.deny. DenyHosts también informará a los administradores de Linux sobre hosts ofensivos, usuarios atacados e inicios de sesión sospechosos.

Abra una Terminal e ingrese lo siguiente:

sudo apt-get install denyhosts

Después de la instalación, edite el archivo de configuración /etc/denyhosts.conf y cambie el correo electrónico y otras configuraciones según sea necesario.

Para editar la configuración del correo electrónico del administrador, abra una ventana de terminal e ingrese:

sudo vi /etc/denyhosts.conf

Cambie los siguientes valores según sea necesario en su servidor:

ADMIN_EMAIL = root@localhost
SMTP_HOST = localhost
SMTP_PORT = 25
#SMTP_USERNAME=foo
#SMTP_PASSWORD=bar
SMTP_FROM = DenyHosts nobody@localhost
#SYSLOG_REPORT=YES 

@ Fail2Ban

Fail2ban es más avanzado que DenyHosts, ya que extiende la supervisión de registros a otros servicios, incluidos SSH, Apache, Courier, FTP y más.

Fail2ban escanea archivos de registro y prohíbe las IP que muestran signos maliciosos: demasiadas fallas de contraseña, búsqueda de exploits, etc.

En general, Fail2Ban luego se usaba para actualizar las reglas del firewall para rechazar las direcciones IP durante un período de tiempo especificado, aunque también se podría configurar cualquier otra acción arbitraria. Fuera de la caja, Fail2Ban viene con filtros para varios servicios (apache, courier, ftp, ssh, etc.).

Abra una Terminal e ingrese lo siguiente:

sudo apt-get install fail2ban

Después de la instalación, edite el archivo de configuración /etc/fail2ban/jail.local y cree las reglas de filtro según sea necesario.

Para editar la configuración, abra una ventana de terminal e ingrese:

sudo vi /etc/fail2ban/jail.conf

Active todos los servicios que desea que fail2ban supervise cambiando enabled = false a * enabled = true *

Por ejemplo, si desea habilitar la supervisión de SSH y la prohibición de la cárcel, busque la línea a continuación y cambie habilitado de falso a verdadero . Eso es.

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3

Si desea recibir correos electrónicos de Fail2Ban si los hosts están prohibidos, cambie la siguiente línea a su dirección de correo electrónico.

destemail = root@localhost

y cambie la siguiente línea de:

action = %(action_)s

a:

action = %(action_mwl)s

También puede crear filtros de reglas para los diversos servicios que desea que fail2ban supervise que no se proporcionan de forma predeterminada.

sudo vi /etc/fail2ban/jail.local

Puede encontrar buenas instrucciones sobre cómo configurar fail2ban y crear los diversos filtros en HowtoForge . Haga clic aquí para ver un ejemplo.

Cuando haya terminado con la configuración de Fail2Ban, reinicie el servicio con:

sudo /etc/init.d/fail2ban restart

También puede verificar el estado con.

sudo fail2ban-client status

Compruebe si hay rootkits: RKHunter y CHKRootKit.

Tanto RKHunter como CHKRootkit básicamente hacen lo mismo: verifique su sistema en busca de rootkits. No hay daño en usar ambos.

Abra una Terminal e ingrese lo siguiente:

sudo apt-get install rkhunter chkrootkit

Para ejecutar chkrootkit, abra una ventana de terminal e ingrese:

sudo chkrootkit

Para actualizar y ejecutar RKHunter. Abra una Terminal e ingrese lo siguiente

sudo rkhunter --update
sudo rkhunter --propupd
sudo rkhunter --check

Escanear puertos abiertos - Nmap

Nmap ("Network Mapper") es una utilidad gratuita y de código abierto para el descubrimiento de redes y la auditoría de seguridad.

Abra una Terminal e ingrese lo siguiente:

sudo apt-get install nmap

Escanee su sistema en busca de puertos abiertos con:

nmap -v -sT localhost

Escaneo SYN con lo siguiente:

sudo nmap -v -sS localhost

Analizar archivos de registro del sistema - LogWatch

Logwatch es un sistema de análisis de registro personalizable. Logwatch analiza los registros de su sistema y crea un informe que analiza las áreas que especifique. Logwatch es fácil de usar y funcionará directamente desde el paquete en la mayoría de los sistemas.

Abra una Terminal e ingrese lo siguiente:

sudo apt-get install logwatch libdate-manip-perl

Para ver la salida de logwatch, use menos:

sudo logwatch | less

Para enviar por correo electrónico un informe de logwatch de los últimos 7 días a una dirección de correo electrónico, ingrese lo siguiente y reemplace [email protected] con el correo electrónico requerido. :

sudo logwatch --mailto [email protected] --output mail --format html --range 'between -7 days and today' 

Audite la seguridad de su sistema: Tiger.

Tiger es una herramienta de seguridad que se puede utilizar tanto como auditoría de seguridad como sistema de detección de intrusos.

Abra una Terminal e ingrese lo siguiente:

sudo apt-get install tiger

Para ejecutar Tiger ingrese:

sudo tiger

Toda la salida de Tiger se puede encontrar en / var / log / tiger

Para ver los informes de seguridad del tigre, abra una Terminal e ingrese lo siguiente:

sudo less /var/log/tiger/security.report.*

Para más ayuda

Un cero
fuente
PHP: magic_quotes_gpc = On. Las citas mágicas han quedado en desuso y luego se han eliminado: php.net/manual/en/security.magicquotes.whynot.php
Tim
13

Como dijiste que esto es servidor de alojamiento web ... Me gustaría compartir mis mejores prácticas y experiencia de 5 largos años en la línea de alojamiento web.

  1. Según mis experiencias pasadas, en lugar de entrar en el infierno de la configuración de inmediato, primero debe ensamblar las uvas de seguridad bajas como se indica en el artículo dado.

  2. Como tienes LAMP, debes ser muy cauteloso con PHP y su configuración php.ini. Este es un buen enlace para proteger PHP. PHP tiene superpoderes que pueden convertirse en bucles de seguridad cuando no se configuran correctamente.

  3. Puede usar un trabajo cron para verificar cuándo sus archivos fueron modificados sin su permiso y posiblemente pirateados; usando este trabajo cron . Prefiero Notepad ++ para comparar los resultados cron (descargue directamente el correo electrónico cron de su servidor web y ábralo en Notepad ++).

  4. Si desea instalar algunos SEM, entonces es mejor preferir cPanel (sin importar el pago). Webmin y zpanel son muy buenas alternativas gratuitas. Webmin es mejor porque al menos utiliza certificados autofirmados y agrega seguridad.

  5. Si desea que algo funcione de inmediato, puede optar por Linux llave en mano. Está basado en Ubuntu, extremadamente fácil de implementar y flexible a sus necesidades. Con muy poco esfuerzo obtienes seguridad fuera de la caja. Esta es su pila LAMP . Yo personalmente uso y prefiero esto solo.

  6. Si está comenzando desde cero, también puede instalar ISPconfig3. Instrucciones aquí .

  7. Puede probar su seguridad tratando de penetrar su seguridad utilizando Back-Track-Linux .

  8. mantener contraseñas complejas largas y aleatorias. No los almacene en la PC. escríbelos Use un CD en vivo para acceder a estos inicios de sesión.

  9. obtenga un software de protección de fuerza bruta como fail2ban.

  10. No ejecutes esos demonios que no necesitas.

  11. Bloquear todos los puertos innecesarios. . tenga mucho cuidado con el puerto SSH (22).

  12. Obtenga una IP estática en el sistema a través del cual va a administrar el servidor. Aproveche la mayoría de las cosas que bloquea IP y solo permita que su IP particular acceda a esos lugares de configuración como el puerto 22.

Al final del día ... trabaje con total tranquilidad, no se emocione con la instalación y aplicar el sentido común lo lleva mucho más allá.

**My heartiest best wishes to you. good luck.**
Bhavesh Diwan
fuente
1
PHP también puede ser peligroso al confiar en la entrada del usuario (inyección sql, por ejemplo).
NoBugs
@NoBugs Estoy totalmente de acuerdo con este punto. No es posible comprimir todo en una sola respuesta. Mi respuesta contiene muchos hipervínculos y, como tal, estos sitios web que contienen esas páginas son realmente muy útiles. Espero que mi respuesta y los enlaces incluidos ayuden a la comunidad :)
Bhavesh Diwan
2
# 9: No, las contraseñas de ramdom son malas, la clave está en la longitud , es decir. "D0g ....................." es más fuerte que "PrXyc.N (n4k77 # L! EVdAfp9". Explicación en explicarxkcd.com/2011/08/10 / contraseña-fuerza
papukaija
2
@papukaija te sugiero que busques en Google brute force attacksy dictionary attacks... La contraseña aleatoria larga es la única forma de protegerte de tales ataques.
Bhavesh Diwan
6

Haz uso del proyecto Bastille Linux.

Proporciona una herramienta interactiva para realizar medidas de refuerzo de seguridad adicionales para aumentar la seguridad general y disminuir la susceptibilidad de compromiso para su sistema Ubuntu (desde Bastille Linux ).

Ofrece una funcionalidad de evaluación e informes, para que pueda decirle qué partes del sistema no están bloqueadas. Examina el sistema de forma de solo lectura, informando sobre el estado de cada uno de sus elementos de endurecimiento. Por ejemplo, Bastille podría verificar si el servidor DNS está bloqueado en una prisión chroot, si telnet está apagado o incluso si se requiere que las contraseñas tengan una buena longitud. Puede ver una demostración de esto solo en la Web a través de este enlace (más información ).

Puede obtener una vista previa de la demostración web (solo) aquí .

BastillleLinux

pl1nk
fuente
1
Puedo respaldar esa recomendación. Para ejecutar hosts expuestos (por ejemplo, servidores web), bastille recorre un largo camino hacia la seguridad del sistema.
Floyd
Esto se parece al sistema SELinux que encuentras en CentOS / Redhat, pero apuesto a que SELinux es más moderno.
djangofan
3

Utilizar nmap en todas las interfaces de la máquina, para que sepa qué servicios ejecuta en su máquina. Esta es una herramienta esencial para la seguridad.

Elimine todos los servicios que no necesita en sus interfaces externas. Puede configurar MySQL para que solo escuche en interfaces específicas, como localhost.

Use ufw para proteger su servicio SSH (y otros posibles) para que no permita demasiadas conexiones (fallidas) por minuto desde la misma máquina. Eso hará que los ataques de fuerza bruta sean más difíciles. Cambiar el número de puerto no es tan útil, solo oscuridad, no seguridad.

Sea restrictivo con la cantidad de cuentas en su máquina. Tampoco instale más paquetes / programas de los que realmente usa. Instale solo clientes X11, no un servidor X11.

Solo permita ssh-login a la máquina con certificados digitales, sin contraseña. Eso también hará que los ataques de fuerza bruta sean difíciles / imposibles.

Anders
fuente
0

La seguridad siempre tiene un precio. Establecer algunos límites realistas lo ayudará a alcanzar sus objetivos. Consideraría los siguientes aspectos:

  • ¿Contra qué te estás protegiendo (qué tipo de villano, cuál es su presupuesto)?
  • ¿Cuáles son tus vectores de ataque?

Comprobando todos los enlaces que se publican aquí, creo que este debería agregarse. Entra en detalles no solo sobre cómo configurar su software, sino también sobre el plan de seguridad. Como un plus, cada comando a ejecutar se explica con una fuente.

Asegurar un servidor web Ubuntu en Xenial 16.04

Daan
fuente