PDF de programación - Securización de un sistema Ubuntu (GNU/Linux)

Imágen de pdf Securización de un sistema Ubuntu (GNU/Linux)

Securización de un sistema Ubuntu (GNU/Linux)gráfica de visualizaciones

Actualizado el 7 de Abril del 2020 (Publicado el 14 de Abril del 2017)
1.257 visualizaciones desde el 14 de Abril del 2017
974,5 KB
58 paginas
Creado hace 8a (14/11/2011)
Securización de un sistema Ubuntu (GNU/Linux)


Últimamente he escrito varios posts sobre estándares y aspectos más estratégicos de negocio e IT,
como por ejemplo:

BS 25999-1: Gestión de la Continuidad del Negocio
Cobit, estándar para el buen gobierno de los Sistemas de Información
ITIL y ISO 20000, marcos de trabajo para servicios IT




● Metodologías de desarrollo

Estructurar las organizaciones en procesos

PMBOK, Project Management / Gestión de proyectos

PRINCE2 como complemento a PMBOK para la gestión de proyectos (project management)
● Metodologías ágiles de gestión de proyectos (Scrum, DSDM, Extreme Programming – XP…)



Scrum, gestión ágil de proyectos / agile project management
Getting Things Done (GTD), organízate con eficacia de David Allen

Es habitual escuchar críticas a este tipo de enfoque más estratégico, aludiendo al hecho de que se
habla y teoriza mucho pero no se concreta nada. En este nuevo artículo, en el que ha colaborado
Raúl Gómez (experto en seguridad técnica), se plasman de forma técnica muchas de las ideas de
buena gestión estratégica IT o de negocio.
Vamos a ver cómo podemos montar un servidor con Ubuntu Linux que cumpla mínimamente con
las buenas prácticas de seguridad:

Efectuar una configuración segura
Establecer una política de contraseñas



● Utilizar herramientas para la gestión de usuarios

● Garantizar la trazabilidad


Proteger los servicios de red

Proporcionar herramientas de monitorización en tiempo real e histórica para facilitar
proyecciones de futuras necesidades
Establecer política de copias de seguridad
Efectuar tests de stress del sistema




Y es que en definitiva el software libre, por más libre y abierto que sea, no tiene porque ser seguro
a no ser que se establezca una configuración adecuada y alineada con las políticas/normativas/
procedimientos de la organización.

Contenido

1. Configuración mínima
2. Securización del sistema base
Kernel: parámetros de seguridad
Limitando los recursos del sistema
Memoria, número de procesos y sesiones concurrentes
Espacio en disco
3. Interacción básica con el sistema
Shells
Shell Bash
Locales: configuración del idioma
Mensajes legales e informativos: Issue & motd
Usuarios privilegiados: sudo
Sistema de archivos
Esquema de los permisos de ficheros/directorios
Permisos por defecto: UMASK
Permisos especiales: SUID y SGID
Directorios con permisos de escritura global
Archivos sin propietarios
Detección de modificaciones de ficheros: Tripwire
4. Política de contraseñas
Política global
Contraseñas de un solo uso: OTP (One time password)

Gestión del acceso
5. Gestión de usuarios
Creación de usuarios
Gestion de cuentas
6. Servicios básicos del sistema
Activación en arranque
Servicio de correo: Postfix
Servicio web: Apache
PHP
Apache básico
Módulos de Apache
Servir por localhost las aplicaciones más criticas
Base de datos MySQL
Acceso remoto: SSH
7. Trazabilidad
Fecha y hora del sistema
Logs de usuario con Bash
Rotación y conservación de logs
Análisis de logs de Apache mediante Awstats
Envio por correo de los eventos más significativos con logcheck
8. Monitorización del sistema
Actualización automática de la lista de paquetes del sistema
Monitorizar desde la consola
Espacio en disco
CPU
Ancho de banda / Bandwidth
Ancho de banda / Bandwidth
Memoria RAM / Swap
Monitorización en tiempo real: Nagios
Ancho de banda consumido con Bandwidthd
SNMP
Soporte ‘Devices I/O’ en net-snmp
Monitorización historica: Cacti
Script Device I/O para cacti
9. Seguridad
Cortafuegos / Firewall
Monitorización de firewall con fwlogwatch
Detección de intrusos / IDS: Snort
Rootkits
Control del ancho de banda
10. Copias de seguridad
Utilidades rsnapshot
Información de estado
dpkg y mysql
Tars semanales
Reportes
11. Tests de stress
Sistema
Conexiones HTTP con httperf
Conexiones HTTP con Apache Benchmarking tool
12. Issue tracking

1. Configuración mínima

Recomiendo echar un vistazo a la Guía de referencia rápida para la personalización de Ubuntu Edgy (6.10)
GNU/Linux, aunque la versión de Ubuntu es bastante antigua, la mayoría de secciones aún son
válidas. En el caso de los servidores, resultan especialmente interesante las siguientes secciones:




Editor de textos de consola Vim
(Des)Compresores

Compartir directorios/ficheros


Antivirus
● Hacking

● Otros
● Otro artículo: Mutt como cliente de correo de consola

Conexión SSH sin password

2. Securización del sistema base

Kernel: parámetros de seguridad

El kernel de Linux dispone de diversos parámetros que nos permiten configurar su actuación frente
al tráfico de red. Al iniciar el sistema se establecen los valores de los parámetros indicados en ‘/
etc/sysctl.conf’. No obstante, también es posible modificarlos mediante el comando ‘sysctl’.
Los parámetros más importantes a tener en cuenta son:
- Activar la protección contra IP spoofing:

sysctl -w net.ipv4.conf.default.rp_filter=1
sysctl -w net.ipv4.conf.all.rp_filter=1


- Activar TCP SYN Cookie Protection para minimizar la posibilidad de ataques de denegación de
servicio por ataques de paquetes SYN. No obstante, actualmente ya no se recomienda esta opción
dado que las capacidades de los sistemas han aumentado considerablemente y activarlo nos hace
perder otras características de TCP (ver recomendación de Andi Kleen, autor de las SynCookies):

sysctl -w net.ipv4.tcp_syncookies=1


- Desactivar el reenvío de paquetes IP (solo es necesario cuando queremos que la máquina actue
como una pasarela mediante NAT):
sysctl -w net.ipv4.ip_forward=0
sysctl -w net.ipv6.ip_forward=0

sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

- Activar la protección contra mensajes de error mal construidos:
sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1


- Ignorar Broadcasts Request:

- Desactivar ICMP Redirect Acceptance, mediante los cuales un atacante podría indicar al sistema
una ruta mejor para llegar a otras redes (habitualmente utilizado por routers). Únicamente los
permitiremos si proceden de nuestro gateway:

sysctl -w net/ipv4/conf/all/accept_redirects=0
sysctl -w net/ipv4/conf/all/send_redirects=0
sysctl -w net/ipv4/conf/all/secure_redirects=1


- Desactivar IP Sourcing routing mediante el cual un atacante podría especificar la ruta a seguir
para ir desde una IP origen a una destino:

sysctl -w net.ipv4.conf.all.accept_source_route=0

sysctl -w net.ipv4.conf.all.log_martians=1


- Logear paquetes: Spoofed Packets, Source Routed Packets, Redirect Packets

- Ignorar ICMP Requests PINGs, personalmente prefiero dejarlo a 0 y controlar desde donde
y hacia donde permito los pings mediante iptables (firewall). En cualquier caso, si queremos
desactivar completamente que el sistema responda a pings:

Para consultar los valores actuales:

sysctl -w net.ipv4.icmp_echo_ignore_all=1

sysctl net.ipv4.conf.default.rp_filter
sysctl net.ipv4.conf.all.rp_filter
sysctl net.ipv4.tcp_syncookies
sysctl net.ipv4.ip_forward
sysctl net.ipv6.ip_forward

sysctl net.ipv4.icmp_echo_ignore_broadcasts
sysctl net.ipv4.icmp_ignore_bogus_error_responses
sysctl net.ipv4.conf.all.accept_redirects
sysctl net.ipv4.conf.all.send_redirects
sysctl net.ipv4.conf.all.accept_source_route
sysctl net.ipv4.conf.all.log_martians


Para establecer los nuevos valores de forma permanente para sucesivos reinicios es necesario
modificar /etc/sysctl.conf.

Limitando los recursos del sistema

Se considera una buena práctica limitar los recursos del sistema utilizados por los usuarios, de
forma que minimicemos las probabilidades de que se efectúen ataques de denegación de servicio
contra todo el sistema.

Memoria, número de procesos y sesiones concurrentes

Para limitar la memoria, el número de procesos y las sesiones concurrentes que puede tener cada
usuario debemos editar ‘/etc/security/limits.conf’. A modo de ejemplo:

# Prevents anyone from dumping core files.
* hard core 0

# This will prevent anyone (except root) from having more than 150 processes, and a
warning will be given at 100 processes.
* soft nproc 100
* hard nproc 150

# This will prevent anyone in the 'users' group from having more than 150 processes,
and a warning will be given at 100 processes.
@users soft nproc 100
@users hard nproc 150
@users - maxlogins 4

# Address space limit: 2GB
* hard as 2097152
# Maximum data size: 128MB
* hard data 131072
# Maximum locked-in-memory address space: 128MB
* hard memlock 131072
# Maximum resident set size: 1GB
* hard rss 1013352


En este caso estamos limitando cada usuario (excepto root) a un máximo de:






150 procesos para todos los usuarios
100 procesos para los usuarios del grupo ‘users’
2GB de RAM
4 logins concurrentes

Una vez configurado, podemos realizar una sencilla prueba para verificar que el sistema no nos
permite crear más de 100 procesos:

$ for i in `seq 500`; do sleep 5 & done


Espacio en disco

Para habilitar las limitaciones de espacio debemos tener montada las particiones afectadas con los
parámetros ‘usrjquota’ y ‘grpjquota’ en ‘/etc/fstab’ (journalling quotas). Por ejemplo:

/dev/sda4 / ext4 defaults,errors=remount-
ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 1 1


Por otra parte, el servicio de quotas (/etc/init.d/quota) debe estar activo. Podemos comprobarlo
mediante la aplicación ‘sysv-rc-conf’ (consultar sección de Servicios de esta guía).
Podemos activar inmediatamente las quotas mediante:

Si encontramos algun tipo de problema con quotacheck (p.ej. puede ser que entre en conflicto
  • Links de descarga
http://lwp-l.com/pdf2827

Comentarios de: Securización de un sistema Ubuntu (GNU/Linux) (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad