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:
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
descomentela y cambiela a
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
Descomentela y cambiala a:
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
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:
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
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:
Lo cambiamos a:
Lo cambiamos a:
Guarde los cambios [ESC] [:] wq [ENTER]
y ejecutamos logwatch por primera vez:
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:
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:
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
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 -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