Ver Mensaje Individual
Antiguo 15-ene-2006, 18:07   #1 (permalink)
800-HELP.com
Usuario activo
 
Avatar de 800-HELP.com
 
Fecha de Ingreso: octubre-2005
Ubicación: Chicago
Mensajes: 1.469
800-HELP.com tiene valoraciones negativas por parte de otros usuarios
Enviar un mensaje por MSN a 800-HELP.com Enviar un mensaje por Skype™ a 800-HELP.com
Post GuÃ#a de Seguridad y Optimización de servidores web

Introdución

La presente es una guÃ#a rápida de optimización de servidores web, está diseñada para obtener seguridad y a la vez rendimiento mediante el ajuste de algunos parametros del sistema y la instalación de paquetes adicionales.

Todos los comandos fueron probados en un servidor web especialmente configurado para la realización de este tutorial

La configuración del servidor es la siguiente:

Procesador = Intel XEON 3.2 Ghx HT
MemorÃ#a RAM = 1 Gb
Disco Duro = (1) SCSI 73 GB 10k RPM
Sistema Operativo: Centos 4.1
Servidor Web: Apache 1.3.33 /PHP 4.40
Servidor BBDD: MySQL 4.0

Se simuló carga (queries al servidor MySQL y tráfico http tanto dinámico como estático) equivalente 200 dominios

No entro en detalles técnicos ni explicaciones en profundidad, la idea es que el usuario pueda usar esta guÃ#a como referencia para realizar sus propios ajustes

Los ajustes y técnicas aquÃ# mostradas son una adaptación del paquete de "Hardering de Servidores" ofrecido por Datacenter1.com (US$ 25,00)

Recuerde siempre hacer backup de los archivos a modificar o reemplazar

Este tutorial puede ser libremente distribuido siempre se haga referencia al autor e incluya un enlace a la fuente original

Atentamente

Guillermo Calvo

[break= Contenido]

CONTENIDO

Update - Mantener nuestro servidor actualizado

CHKRootKit
– Detector de rootkits

RootKit Hunter
– Detector de rootkits

Seguridad de Servicio SSH
– Incrementar la seguridad durante las conexiones SSH

APF Firewall
– Popular Firewall de sofware basado en iptables

Configuración Anti-DoS para APF Firewall
– Ayuda a mitigar los fectos de ataques de negación de servicio

BFD
– Notifica y bloquea ataques de passwords contra diferentes servicios

Logwatch
– EnvÃ#a diariamente un resumen de lo grabado en los logs del sistema para su análisis

System Integrity Monitor
– Monitorea los servicios y puede reiniciarlos en caso de carga alta o problemas

SPRI
– Cambia la prioridad de los proceso de acuerdo al nivel de importancia para asegurar el optimo rendimiento del servidor

Optimización Apache (HTTP)
– Configuración de Apache para máxima seguridad y rendimiento

Mod_Security / Snort Rules –
Firewall de aplicaciones con reglas de filtrado de Snort

Optimización MySQL
– Incrementa el rendimiento de MySQL

host.conf hardenening
– Previene spoofing y dns lookup poisoning & spoofing

Modificación nsswitch.conf
– Optimiza y protege DNS lookups

sysctl.conf hardening
– Ayuda a proteger la pila tcp/ip de ataques yn-flood y otros abusos de red

FTP Hardening
– Optimización y seguridad del servicio FTP

Remoción de servicios no usados
- previene exploits y optimiza recursos

Root Logger
– Alerta vÃ#a email cada vez que root accede al sistema, grabando IP y hora de conexión

MyTOP
– Herramienta de monitoreo MySQL

TMP Directory hardening ( /tmp, /var/tmp, /dev/shm)
– Instalación de /tmp en partición dedicado sin permisos de ejecución

Password Scanner
– Busca password débiles que pueden ser fácilmente comprometidos

Tripwire
– Detecta cambios no autorizados en archivos

Lecturas recomendadas


Sitios de seguridad

[break= Update]

UPDATE

Cada dÃ#a se descubren nuevas vulnerabilidades en software y los desarrolladores perÃ#odicamente lanzan parches y actualizaciones que corrigen estas vulnerabilidades, por esta razón es muy importante mantener nuestro servidor actualizado, si no lo actualiza corre el riesgo de poder estar usando un paquete con alguna vulnerabilidad conocida.

Para actualizar los paquetes instalados debemos tener previamente yum correctamente instalado y con los repositorios configurados, para más información desde la consola teclee man yum



Para actualizar su sistema simplemente ejecute el siguiente comando como root desde la consola de su servidor.


Código:
yum update
Si desea hacer un upgrade de su sistema operativo, por ejemplo tiene Centos 4.0 y lo quiere actualizar a la última versión (4.2 por ejemplo) ejecute el siguiente comando:

Código:
yum upgrade
Para hacer un update de algún paquete especifico utilizamos el comando:

Código:
yum update [paquete]
[break= CHKrootkit]

INSTALACIÓN DE CHKROOTKIT

Chkrootkit es un popular paquete que busca rootkit instalados en nuestro sistema, para instalar chkrootkit ejecutamos los siguientes comandos:


Código:
cd /usr/src
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar -zxvf chkrootkit.tar.gz
cd chkrootkit-0.46a # haga ls para ver el nombre exacto de este directorio 
make sense # compila e instala chkrootkit
./chkrootkit # ejecuta Chkrootkit
Ya tenemos CHKrootkit instalado ahora crearemos una tarea en el cron que automaticamente ejecute CHKrootkit todos los dÃ#as y nos envÃ#e el reporte vÃ#a email

Código:
crontab –e # abre el cron de root en modo de edición
Inserte la siguiente linea en el cron

Código:
30 0 * * * (cd /usr/src/chkrootkit-0.46a; ./chkrootkit|mail -s "lÃ#nea asunto" nombre@email.com)
Sustituya "lÃ#nea asunto" por lo que desee recibir en el asunto y cambie la dirección de email


Guarde los cambios y salga de crontab [ESC] [:] [wp] [Enter]

Listo de ahora en adelante CHKrootkit se ejecutará diariamente a las 12:30 de la madrugada y nos enviará un informe a nuestro email



[break=RootkitHunter]

RootKitHunter

RootKitHunter es otro poderoso buscador de rootkit, para instalarlo hacemos lo siguiente:


Código:
cd /usr/src 
wget http://downloads.rootkit.nl/rkhunter-1.2.7.tar.gz
tar -zxvf rkhunter-1.2.7.tar.gz
cd rkhunter
./installer.sh
rkhunter -c #para correr rkhunter por primera vez
Ya hemos instalado RootKitHunter y al igual que como hicimos con CHKrootkit, crearemos una tarea en el cron que lo ejecute automáticamente y nos envÃ#e un reporte con los resultados:

Código:
crontab -e # abre crontab en modo de edición
Insertamos la siguiente lÃ#nea

Código:
35 0 * * * rkhunter --cronjob |mail -s “LÃ#nea Asunto†nombre@email.com
Sustituya "Linea asunto" por lo que desee recibir en el asunto y su dirección de email.

Guarde los cambios y salga del crontab [ESC] [:] [wp] [Enter]

Ahora Rootkithunter se ejecutará todos los dÃ#as a las 12:35 de la madrugada y nos enviará un reporte de lo encontrado vÃ#a email


[break= Seguridad SSH]

SEGURIDAD SSH

En este apartado haremos los siguientes cambios al servicio SSH:
  • Desactivar el login de root (requiere loguerse como un usuario normal y luego pasarse a root mediante el comando su, de esta manera los ingresos de root directo quedan deshabilitados)
  • Utilizar solo SSH2 (es más seguro que SSH1)
  • SSH solo escuchará en una IP (solo si se tienen varias ips fijas en el servidor)
  • Cambiar los tiempos de login
  • Crear un mensaje de advertencia que los usuarios verán cada vez que se loguean al sistema
Código:
vi /etc/ssh/sshd_config
Ubique la linea

Código:
#Protocol 2,1
descomentela y cambiela a

Código:
protocol 2
Ubique la linea

Código:
#ListenAddress 0.0.0.0
descomentela y cambiela a

Código:
ListenAddress x.x.x.x
En donde x.x.x.x es la dirección IP de su servidor en donde desea que sshd funcione (NO USO ESTO SI NO DISPONE DE IPS FIJAS)

Ubique la lÃ#nea

Código:
#LoginGraceTime 2m
Descomentela y cambiala a

Código:
LoginGraceTime 30

Esto hará que el tiempo que sshd espera por el password sea reducido de 2 minutos a 30 segundos

Localice la linea

Código:
#PermitRootLogin yes
descomentela y cambiala a

Código:
PermitRootLogin no
Esto evitará que root pueda loguarse directamente al servidor, previamente deberá tener otro usuario creado con el cual se logueará y si requiere acceso de root use su -

Localice la lÃ#nea

Código:
#MaxAuthTries 6
Descomentela y cambiala a:

Código:
MaxAuthTries 3
Esto solo le dará 3 intentos si equivoca el password antes de cerrar la conexión

Grabe los cambios [ESC] [:] wq [ENTER]

Ahora crearemos un mensaje de advertencia que verán todos los que se loguen al sistema vÃ#a ssh

Código:
vi /etc/motd
Podemos escribir algo como:

Código:
Ud. ha ingresado a un area restringida solo para personal autorizado.
  Si no tiene autorización debe salir inmediatamente
  Todos sus detalles de acceso han sido grabados y los administradores han sido alertados
Grave los cambios [ESC] [:] wq [ENTER]

Reinicie el servicio sshd

Código:
service sshd restart
Ahora para loguarse a su servidor debe usar una cuenta diferente a root (debe estar previamente creada, luego podrá pasarse a la cuenta root usando el comando su

La próxima vez que ingrese al sistema verá el mensaje de advertencia

[break= APF Firewall]

APF Firewall

APF es un excelente y facil de usar firewall para Linux, es un front-end de iptables, asÃ# que hay que tener iptables funcionando (comunmente incluido en todas las distros Linux)

Para instalarlo desde la consola y como root ejecute los siguientes comandos:

Código:
cd /usr/src
wget http://www.r-fx.ca/downloads/apf-current.tar.gz
tar -zxvf apf-current.tar.gz
cd apf-0.9.6-1 
./install.sh
Ya hemos instado el firewall, ahora solo falta configurarlo para ello editamos el archivo de configuración:
Código:
vi /etc/apf/conf.apf
La configuración del firewall depende mucho de los servicios que corre el servidor y por lo tanto no entraremos en detalles, el archivo de configuración es bastante explicativo al respecto. Una vez que termine de configurar sus cambios grabe el archivo y ejecute el comando apf -s

APF puede trabajar en modo DEBUG, es decir todas las reglas se limpiarán en 5 minutos, esto es especialmente util cuando se estan haciendo cambios, de esta manera no corremos riesgo de bloquearnos y perder acceso al servidor si cometemos un error, cuando esté satisfecho con los cambios cambié DEBUG = 0, y los cambios ahora serán permanentes



[break= BFD]
BFD

Brute Force Detection es un excelente guardian que protege contra ataques de diccionario de passwords, si detecta que algún usuario ha equivocado su password más de x veces puede alertarnos y bloquear la IP, trabaja con varios protocolos incluyendo ssh y ftp. Trabaja integrado con APF.

Para instalarlo realizamos lo siguiente:

Código:
cd /usr/src
wget http://www.r-fx.ca/downloads/bfd-current.tar.gz
tar -zxvf bfd-current.tar.gz
cd bfd-0.9
./install.sh
Para configurarlo debemos editar el archivo conf.bfd

Código:
vi /usr/local/bfd/conf.bfd
Debemos cambiar algunos valores para recibir las alertas por correo electrónico

Código:
ALERT_USR="1"
EMAIL_USR="nombre@direccion.com"

[break= Logwatch]

Logwatch

Si estás usando Red Hat o algún derivado es muy probable que ya tengas instalado logwatch para verificarlo usamos el siguiente comando:

Código:
rpm -qa logwatch
Si recibes una respuesta quiere decir que está instalado, muchos distros incluyen versiones obsoletas, la borraremos e instalaremos una nueva desde cero, omite este paso si tienes una version reciente o si no tienes ninguna instalada

Para borrar la vieja instalación de logwatch

Código:
rpm -e logwatch
Para descargar la más nueva versión

Código:
rpm -i ftp://ftp.kaybee.org/pub/redhat/RPMS/noarch/logwatch-7.2.1-2.noarch.rpm
Listo ya tenemos la nueva versión instalada, ahora procedermos a configurarla de acuerdo a nuestras necesidades.

Código:
  vi /usr/share/logwatch/default.conf/logwatch.conf
y procedemos a cambiar las siguientes instrucciones:

Código:
Maito = root
Lo cambiamos a:

Código:
 Maito = nombre@correo.com #Nuestra dirección de correo
Código:
Details = Low
Lo cambiamos a:

Código:
Details = High
Guarde los cambios [ESC] [:] wq [ENTER]

y ejecutamos logwatch por primera vez:

Código:
logwatch
El reporte debe estar en nuestra correo electrónico
[break= System Integity Monitor]

System Integrity Monitor


System Integrity Monitor es una excelente herramienta que monitorea los servicios y nos alerta en caso de que un servicio no responda e incluso puedo reiniciar el servicio automáticamente

Para instalarlo procedemos de la siguiente manera:


Código:
cd /usr/src
wget http://www.r-fx.ca/downloads/sim-current.tar.gz
tar -zxvf sim-current.tar.gz
cd sim-2.5-3
./setup -i
Conteste cuidadosamente a las preguntas.

Al finalizar edite el archivo /usr/local/sim/conf.sim

Ubique la linea:
EMAIL = "root" y cambielo a EMAIL = "nombre@correo.com" para que reciba en su correo cualquier evento.

[break= SPRI]
SPRI

SPRI (System Priority) permite establecer prioridades de los servicios, esto es especialmente util en servidores con altas cargas ya que nos permite configurar los servicios esenciales como prioritarios y dejar con menor prioridad de ejecución aquellos servicios considerados no esenciales.

Para instalar SPRI debemos hacer lo siguiente:

Código:
cd /usr/src
  wget http://www.r-fx.ca/downloads/spri-current.tar.gz
  tar -zxvf spri-current.tar.gz
  cd spri-0.5
  ./install.sh
Para la configuración

Código:
cd /usr/local/spri/prios
clasifique sus servicios de acuerdo al nivel de prioridad, coloque el nombre del servicio en su respectivo nivel de prioridad de nivel de prioridad hight, med, low, etc. y ejecute el siguiente comando:

Código:
/usr/local/sbin/spri –v
[break= Optimización de Apache]


Optimización Apache (HTTP)


En el archivo httpd.conf reemplaza o inserta los siguientes valores:

Código:
Timeout 300
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 3
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 250
MaxRequestsPerChild 50
HostnameLookups Off
Debes ajustar los valores a tu servidor en particular, pero estos valores ayudarán en la mayorÃ#a de los casos, tambien es importante si tu servidor procesa mucho contenido dinámico (php/MySQL) instalar algún optimizador como Zend Optimizer o Turk MMcache




[break= Mod_Securety]

Mod_Security

mod_security es parte de una reciente nueva clase de aplicaciones de seguridad llamadas firewall de aplicaciones, funciona solo en servidores Apache tanto 1.3.X como 2.0, su funcion principal es prevenir ataques contra aplicaciones web.

Para instalar mod_securiry realizamos lo siguiente loguados como root:

Código:
wget http://www.modsecurity.org/download/modsecurity-apache-1.9.2.tar.gz
tar zxvf modsecurity-apache-1.9.2.tar.gz
cd  mod_security-1.9.2
cd apache1
/usr/local/apache/bin/apxs -cia mod_security.c
Ahora modificamos el archivo httpd.com generalmente ubicado en /etc/httpd/conf/httpd.com

Ubicamos la linea <IfModule mod_dir.c>
y añadimos:
Código:
<IfModule mod_security.c>
# Turn ModSecurity On
SecFilterEngine On

# Reject requests with status 403
SecFilterDefaultAction "deny,log,status:403"

# Some sane defaults
SecFilterScanPOST On
SecFilterCheckURLEncoding On
SecFilterCheckUnicodeEncoding Off

# Accept almost all byte values
SecFilterForceByteRange 1 255

# Server masking is optional
# SecServerSignature "Microsoft-IIS/5.0"

SecUploadDir /tmp
SecUploadKeepFiles Off

# Only record the interesting stuff
SecAuditEngine RelevantOnly
SecAuditLog logs/audit_log

# You normally won't need debug logging
SecFilterDebugLevel 0
SecFilterDebugLog logs/modsec_debug_log

# Only accept request encodings we know how to handle
# we exclude GET requests from this because some (automated)
# clients supply "text/html" as Content-Type
SecFilterSelective REQUEST_METHOD "!^(GET|HEAD)$" chain
SecFilterSelective HTTP_Content-Type \
"!(^application/x-www-form-urlencoded$|^multipart/form-data;)"

# Do not accept GET or HEAD requests with bodies
SecFilterSelective REQUEST_METHOD "^(GET|HEAD)$" chain
SecFilterSelective HTTP_Content-Length "!^$"

# Require Content-Length to be provided with
# every POST request
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"

# Don't accept transfer encodings we know we don't handle
SecFilterSelective HTTP_Transfer-Encoding "!^$"</IfModule mod_security.c>
Grabamos los cambios y reiniciamos el servidor apache

NOTA: Existen númerosas reglas de mod_security que pueden hacer que algunos scrpts no funcionen, deben escogerse con cuidado, un número excesivo de reglas puede aumentar la carga del servidor especialmente en Apache 1.3, existen maneras más eficientes de instalar mod_security pero requieren compilar Apache

[break= Optimización MySQL]

Optimización MySQL


No existe una receta mágica que se ajuste a todos los casos para el tunning de un servidor MySQL sin embargo los valores aquÃ# recomendados darán un buen rendimiento en servidores MySQL dedicados al hosting con apx 1 GB de Ram. Para un tunning más preciso se requiere un analisis cuidadoso del patrón de uso de su servidor MySQL

Edite el archivo /etc/my.cnf si no existe lo crearemos

Código:
vi /etc/my.cnf
Remplazamos el contenido por los siguientes parametros:

Código:
[mysqld]
connect_timeout=15
interactive_timeout=100
join_buffer_size=1M
key_buffer=32M
max_allowed_packet=16M
max_connections=500
max_connect_errors=10
myisam_sort_buffer_size=64M
read_buffer_size=2M
read_rnd_buffer_size=2M
sort_buffer_size=2M
table_cache=1024
thread_cache_size=100
#El valor de  thread_concurrency debe ser igual al numero de cpus * 2
thread_concurrency=2
wait_timeout=300
query_cache_size=128M
query_cache_limit=1M
query_cache_type=1
skip-innodb

[mysql.server]
#Debe ajustar estos valores a su caso particular
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
open_files_limit=8192

[mysqldump]
quick
max_allowed_packet=16M

[mysql]
no-auto-rehash
#safe-updates

[isamchk]
key_buffer=32M
sort_buffer=32M
read_buffer=16M
write_buffer=16M

[myisamchk]
key_buffer=32M
sort_buffer=32M
read_buffer=16M
write_buffer=16M
Dejaremos estos ajustes por un mÃ#nimo de 24 horas y luego en hora pico de uso del servidor tomaremos algunos valores para ajustar más adecuadamente nuestro archivo my.cnf

[break= El archivo host.conf]
host.conf hardening

Editaremos el archivo host.conf para prevenir spoofing y otras ataques

Código:
   vi /etc/host.conf
Editar el contenido para que quede como:
Código:
  order bind,hosts
  multi on
  nospoof on
  spoofalert on
multi on es solo necesario si disponemos de múltiples ips

[break= El archivo nsswitch.conf]

Modificación nsswitch.conf

Pendiente

[break= El Archivo sysctl.conf]

sysctl.conf hardening

# vi /etc/sysctl.conf

Código:
# Kernel sysctl configuration file for Red Hat Enterprise Linux

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1


# Disables IP source routing
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1

# Increase maximum amount of memory allocated to shm
# Only uncomment if needed!
# kernel.shmmax = 67108864

# Disable ICMP Redirect Acceptance
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.accept_redirects = 0


# Enable Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.default.log_martians = 1
net.ipv4.conf.all.log_martians = 1

# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 25

# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1200

# Turn on the tcp_window_scaling
net.ipv4.tcp_window_scaling = 1

# Turn on the tcp_sack
net.ipv4.tcp_sack = 1

# tcp_fack should be on because of sack
net.ipv4.tcp_fack = 1

# Turn on the tcp_timestamps
net.ipv4.tcp_timestamps = 1

# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1

# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Make more local ports available
# net.ipv4.ip_local_port_range = 1024 65000

# Set TCP Re-Ordering value in kernel to '5'
net.ipv4.tcp_reordering = 5

# Lower syn retry rates
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 3

# Set Max SYN Backlog to '2048'
net.ipv4.tcp_max_syn_backlog = 2048

# Various Settings
net.core.netdev_max_backlog = 1024

# Increase the maximum number of skb-heads to be cached
net.core.hot_list_length = 256

# Increase the tcp-time-wait buckets pool size
net.ipv4.tcp_max_tw_buckets = 360000

# This will increase the amount of memory available for socket input/output queues
net.core.rmem_default = 65535
net.core.rmem_max = 8388608
net.ipv4.tcp_rmem = 4096 87380 8388608
net.core.wmem_default = 65535
net.core.wmem_max = 8388608
net.ipv4.tcp_wmem = 4096 65535 8388608
net.ipv4.tcp_mem = 8388608 8388608 8388608
net.core.optmem_max = 40960
Grabamos los cambios y ejecutamos

Código:
 sbin/sysctl –p
Código:
/sbin/sysctl -w net.ipv4.route.flush=1
[break= FTP Hardening]

FTP Hardening

Pendiente

[break=Servicios no usados]

Remoción de servicios no usados

Pendiente

[break= Root Looger]

Root Logger

Pendiente

[break= MyTop]
MyTOP

Pendiente

[break= tmp Hardening]
TMP Directory hardening ( /tmp, /var/tmp, /dev/shm)

Pendiente

[break= Password Scanner]

Password Scanner

Pendiente

[break= Tripwire]
Tripwire

Pendiente

[break= Lecturas recomendadas]

Lecturas Recomnedadas

Pendiente

[break= Links de Seguridad]

Links de Seguridad

Pendiente
[break= Créditos]

Créditos


800-HELP.com está desconectado