Hardening o endurecimiento al sistema operativo, son las configuraciones que por seguridad de nuestro
sistema operativo, es necesario configurar algunos parámetros que por defecto trae nuestro servidor y las
aplicaciones que vamos a instalar, para así reducir la cantidad de vulnerabilidades en el mismo, esto lo
podemos lograr eliminando aplicaciones, servicios, usuarios innecesarios en el sistema así como cerrando
puertos que tampoco estén en uso, además de otros métodos que pueden ayudarnos a proteger nuestros
servidores.
El principal motivo para endurecer la seguridad de nuestro servidor FTP, es ganar tiempo frente a un
ataque, pues entre más configuraciones y otros métodos de seguridad implementemos, nunca lograremos
evitar por completo, que un atacante logre su objetivo si no le agregamos a nuestra seguridad, un
monitoreo de todos los equipos, por medio de alertas.
Cabe aclarar que el hardening de un equipo aunque es un elemento importante, no es el único factor de
protección que se debe implementar para proteger los servidores y equipos dentro de nuestra red, es
importante implementar protección externa a nuestros equipos, por medio de Firewall, IPS, IDS,
HoneyPots. Dentro de este trabajo solo nos limitaremos a la protección de nuestro servidor FTP, por medio
de configuraciones al sistema operativo, y apoyándonos en aplicaciones externas de sistema operativo,
para limitar el acceso que cada usuario pueda tener dentro del directorio de nuestro servidor.
1. 1
Universidad Tecnológica de Panamá
Facultad de Ingeniería de Sistemas Computacionales
Maestría en Seguridad Informática
Seguridad en sistemas operativos
Hardening en Nix: Asegurar un FTP Server
Profesora: Mildred Echezano
Elaborado por:
Montenegro, Jesús - Cédula: 8-843-89
Moreno, José - Cédula: 8-794-402
Rodríguez, Carlos - Cédula: 8-814-1930
Lunes, 23 de noviembre de 2015
2. 2
Contenido
Introducción ________________________________________________________________________3
Contenido __________________________________________________________________________4
Procesos que se deben tomar en cuenta antes de iniciar nuestro hardening________________________4
Instrucciones línea Base: mejores prácticas para el Hardening de un Servidor FTP ______________7
Instalación, configuración SSH ___________________________________________________7
Instalación de fail2ban _________________________________________________________18
Instalación del postfix para envío de correos ________________________________________22
Instalación y edición del figlet ___________________________________________________26
Instalación de jailkit y sus dependencias ___________________________________________30
Configuración de las cuotas para limitar la cantidad de almacenamiento por usuario ________42
Uso de scripts para creación de usuarios y enjaularlos a las carpetas específicas ____________46
Conclusión ________________________________________________________________________51
Bibliografía _______________________________________________________________________52
3. 3
Introducción
Hardening o endurecimiento al sistema operativo, son las configuraciones que por seguridad de nuestro
sistema operativo, es necesario configurar algunos parámetros que por defecto trae nuestro servidor y las
aplicaciones que vamos a instalar, para así reducir la cantidad de vulnerabilidades en el mismo, esto lo
podemos lograr eliminando aplicaciones, servicios, usuarios innecesarios en el sistema así como cerrando
puertos que tampoco estén en uso, además de otros métodos que pueden ayudarnos a proteger nuestros
servidores.
El principal motivo para endurecer la seguridad de nuestro servidor FTP, es ganar tiempo frente a un
ataque, pues entre más configuraciones y otros métodos de seguridad implementemos, nunca lograremos
evitar por completo, que un atacante logre su objetivo si no le agregamos a nuestra seguridad, un
monitoreo de todos los equipos, por medio de alertas.
Cabe aclarar que el hardening de un equipo aunque es un elemento importante, no es el único factor de
protección que se debe implementar para proteger los servidores y equipos dentro de nuestra red, es
importante implementar protección externa a nuestros equipos, por medio de Firewall, IPS, IDS,
HoneyPots. Dentro de este trabajo solo nos limitaremos a la protección de nuestro servidor FTP, por medio
de configuraciones al sistema operativo, y apoyándonos en aplicaciones externas de sistema operativo,
para limitar el acceso que cada usuario pueda tener dentro del directorio de nuestro servidor.
4. 4
Procesos que se deben tomar en cuenta antes de iniciar nuestro hardening
Configuraciones necesarias para protegerse de posibles ataques físicos o de hardware de la
máquina. Entre otras actividades, destacan la actualización de firmware, el establecimiento de
contraseñas complejas para el arranque del equipo y la configuración de la BIOS, la des habilitación
de inicio de sistema para cualquier unidad que no sea el disco duro principal, y en casos de servidores,
la des habilitación de dispositivos ópticos, usb o similares, para evitar cualquier entrada de malware
desde un medio de almacenamiento externo.
Instalación segura del sistema operativo. Esto implica, entre otras cosas, el considerar al menos
dos particiones primarias (una para el sistema operativo en sí y otra para carpetas y archivos de
importancia), el uso de un sistema de archivos que tenga prestaciones de seguridad, y el concepto de
instalación mínima, es decir, evitando la instalación de cualquier componente de sistema que no sea
necesario para el funcionamiento del sistema.
Activación y/o configuración adecuada de servicios de actualizaciones automáticas, para
asegurar que el equipo tendrá todos los parches de seguridad que entrega el proveedor al día. En caso
de que se encuentre dentro de una corporación, es adecuado instalar un servidor de actualizaciones,
que deberá probar en un entorno de laboratorio el impacto de la instalación de actualizaciones antes
de instalarlas en producción.
Instalación, configuración y mantención de programas de seguridad tales como Antivirus,
Antispyware, y un filtro Antispam según las necesidades del sistema.
Configuración de la política local del sistema, considerando varios puntos relevantes:
Política de contraseñas robusta, con claves caducables, almacenamiento histórico de contraseñas
(para no usar contraseñas cíclicas), bloqueos de cuentas por intentos erróneos y requisitos de
complejidad de contraseñas.
5. 5
Renombramiento y posterior des habilitación de cuentas estándar del sistema, como
administrador e invitado.
Asignación correcta de derechos de usuario, de tal manera de reducir las posibilidades de elevación
de privilegios, y tratando siempre de limitar al mínimo los privilegios y/o derechos de los usuarios
activos.
Configuración de opciones de seguridad generales, como aquellas relacionadas con rutas de acceso
compartido, apagado de sistema, inicio y cierre de sesión y opciones de seguridad de red.
Restricciones de software, basado en lo posible en el uso de listas blancas de software permitido
más que en listas negras del mismo.
Activación de auditorías de sistema, claves para tener un registro de algunos intentos de ataque
característicos como la adivinación de contraseñas.
Configuración de servicios de sistema. En este punto es necesario tratar siempre de deshabilitar
todos aquellos servicios que no vayan a prestar una funcionalidad necesaria para el funcionamiento
del sistema. Por ejemplo, si su equipo no posee tarjetas de red inalámbrica, el servicio de redes
inalámbricas debería estar deshabilitado.
Configuración de los protocolos de Red. En la medida de lo posible, es recomendable usar sistemas
de traducción de direcciones (NAT) para direccionar los equipos internos de una organización.
Deshabilitar todos aquellos protocolos de red innecesarios en el sistema y limitar el uso de los mismos
al mínimo. TCP/IP es un protocolo que no nació pensando en seguridad, por lo que limitar su uso al
estrictamente necesario es imperativo.
Configuración adecuada de permisos de seguridad en archivos y carpetas del sistema. En la
medida de lo posible, denegar explícitamente cualquier permiso de archivo a las cuentas de acceso
anónimos o que no tengan contraseña. Un correcto set de permisos a nivel de carpetas y archivos es
clave para evitar acceso no deseado al contenido de los mismos.
6. 6
Configuración de opciones de seguridad de los distintos programas, como clientes de correo
electrónico, navegadores de internet y en general de cualquier tipo de programa que tenga interacción
con la red.
Configuración de acceso remoto. En caso de no ser estrictamente necesario, es bueno deshabilitar
el acceso remoto. Sin embargo, cuando es necesario tener control remoto de la máquina, es preciso
configurarlo de manera adecuada, restringiendo el acceso a un número muy limitado de usuario,
restringiendo al mínimo las conexiones concurrentes, tomando cuidado en la desconexión y cierre de
sesión y estableciendo un canal cifrado de comunicaciones para tales propósitos, como SSH.
Configuración adecuada de cuentas de usuario, tratando de trabajar la mayor parte del tiempo con
cuentas de acceso limitado y deshabilitando las cuentas de administrador. Es absolutamente
recomendable usar la impersonificación de usuarios para realizar labores administrativas en vez de
iniciar sesión como administradores.
Cifrado de archivos o unidades según las necesidades del sistema, considerando un
almacenamiento externo para las llaves de descifrado. Considerar además la opción de trabajar con
sistemas de cifrado de mensajería instantánea y correo electrónico.
Realizar y programar un sistema de respaldos frecuente a los archivos y al estado de sistema.
En la medida de lo posible, administrar los respaldos vía red o llevar los respaldos a unidades físicas
que estén alejadas del equipo que las origina.
7. 7
Instrucciones línea Base: mejores prácticas para el Hardening de un Servidor FTP
Por lo amplio que iba ser este manual, decidimos omitir la instalación del sistema operativo, pero como
pre-requisitos para iniciar este hardening, necesitaremos instalar Debian 8, ya sea en una maquina física
o virtual, instalamos los servicios básicos, y el servicio SSH solamente, es decir deshabilitamos los demás
servicios que aparezcan seleccionados por defecto.
Antes de iniciar con la configuración del SSH, repacemos que es y para que nos servirá esto en nuestro
servidor FTP.
SSH (Secure SHell, en español: intérprete de órdenes seguro) es el nombre de un protocolo y
del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite
manejar por completo la computadora mediante un intérprete de comandos, y también puede redirigir el
tráfico de X para poder ejecutar programas gráficos si tenemos ejecutando un Servidor X (en
sistemas Unix y Windows).
Además de la conexión a otros dispositivos, SSH nos permite copiar datos de forma segura (tanto archivos
sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a
los dispositivos y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante
SSH.
SSH trabaja de forma similar a como se hace con telnet. La diferencia principal es que SSH usa técnicas
de cifrado que hacen que la información que viaja por el medio de comunicación vaya de manera no
legible, evitando que terceras personas puedan descubrir el usuario y contraseña de la conexión ni lo que
se escribe durante toda la sesión; aunque es posible atacar este tipo de sistemas por medio de ataques de
REPLAY y manipular así la información entre destinos.
Ahora que ya sabemos que es el SSH y para que lo necesitamos, vamos a iniciar dar inicio con la
configuración de seguridad de nuestro servidor FTP, basándonos en las mejores prácticas para endurecer
nuestro servidor, iniciaremos con las configuraciones del servicio SSH.
1. Instalación, configuración SSH.
Vamos a editar algunos parámetros en el archivo /etc/ssh/sshd_config:
8. 8
Primero escribiremos la siguiente línea para abrir el archivo sshd_config:
nano /etc/ssh/sshd_config
1.2 Uso del Protocolo ssh2, verificaremos que en la configuración este habilitado la versión 2 del SSH:
Protocol 2
9. 9
1.3 Limitaremos el acceso a los usuarios o grupos con el siguiente parámetro:
AllowGroups sshaccess
15. 15
1.9 Habilitaremos el banner de advertencia quitándole el signo de #:
Por defecto #Banner /etc/issue.net
Quitamos el #, nos debe quedar: Banner /etc/issue.net
16. 16
Guardamos las configuraciones del archivo sshd_config, si usamos nano como nuestro interprete de
comandos, entonces presionamos la tecla control + la tecla O, luego presionamos la tecla Enter y por
último presionamos la tecla X, para salir del archivo.
1.10 Podemos editar el banner y su información en el siguiente archivo:
nano /etc/issue.net
Reiniciamos el servicio SSH con el siguiente comando:
17. 17
/etc/init.d/ssh restart
Ahora que ya tenemos configurado nuestro servicio SSH, vamos a instalar y configurar nuestra siguiente
aplicación, llamada fail2ban.
Fail2ban es una aplicación escrita en Python para la prevención de intrusos en un sistema, que actúa
penalizando o bloqueando las conexiones remotas que intentan accesos por fuerza bruta. Se distribuye
bajo licencia GNU y típicamente funciona en sistemas POSIX que tengan interfaz con un sistema de
control de paquetes o un firewall local (como iptables o TCP Wrapper).
Habitualmente las computadoras sufren ataques de fuerza bruta (especialmente servidores SSH, FTP, etc)
con el fin de descifrar las contraseñas y acceder a ellas. En este punto es indispensable una buena política
de contraseñas. Sin embargo, los ataques por fuerza bruta también consumen un gran ancho de banda,
disparan el volumen de los archivos de registro (logs) de nuestro sistema y ocupan ciclos de CPU que
podrían dedicarse a tareas útiles.
Fail2ban busca en los registros (logs) de los programas que se especifiquen las reglas que el usuario decida
para poder aplicar una penalización. La penalización puede ser bloquear la aplicación que ha fallado en
un determinado puerto, bloquearla para todos los puertos, etc. Las penalizaciones, así como las reglas, son
definidas por el usuario.
Habitualmente, si las IP de ataque se prohíben por un lapso prudencial de tiempo, la sobrecarga de red
provocada por los ataques baja, y también se reduce la probabilidad de que un ataque de fuerza bruta
basada en diccionarios tenga éxito.
Ante una cantidad predefinida (por el usuario) de intentos fallidos, fail2ban determina la acción a tomar
sobre la IP que originó el problema. Puede simplemente notificar por e-mail del suceso, denegar el acceso
a la IP atacante, bloquearla en determinado puerto y habilitarla en otros (modificando las entradas
correspondientes en iptables, o el firewall local que corresponda), etc. Puede asimismo levantar las
prohibiciones después de un determinado periodo, por si el problema no obedeciera a un ataque sino
simplemente a errores del usuario intentando loguearse. Las acciones son configurables
mediante scripts de Python.,
18. 18
Ahora que ya sabemos para qué sirve Fail2ban, vamos a iniciar con la instalación y configuración de esta
útil aplicación para evitar ataques de fuerza bruta.
2. Instalación de fail2ban:
apt-get install fail2ban
2.1 Editamos el archivo de configuración con los siguientes parámetros:
nano /etc/fail2ban/jail.conf
[ssh]
enabled = true
port = 1022
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
19. 19
2.2 Si queremos habilitar el envío de informes usamos o instalamos el SMTP y editamos los siguientes
parámetros:
Reemplazamos el correo por el correo de nosotros:
destemail = root@localhost
20. 20
Buscamos la línea action = %(action_)s
Y la reemplazamos por: action = %(action_mwl)s
22. 22
La siguiente aplicación que instalaremos es el Postfix, para poder recibir las alertas que aplicaciones como
el Fail2ban generaran y que necesitamos recibir, para poder estar alertado de cualquier evento sospechoso.
Postfix es un servidor de correo de software libre / código abierto, un programa informático para el
enrutamiento y envío de correo electrónico, creado con la intención de que sea una alternativa más rápida,
fácil de administrar y segura al ampliamente utilizado Sendmail.
3. Instalación del postfix para envío de correos:
apt-get install mailutils
apt-get update
25. 25
3.2 Luego introducimos el dominio.
System mail name:
Ejemplo: serpruebas.com
3.3 Reiniciamos el servicio Postfix:
service postfix restart
3.4 Probamos enviando un correo con el siguiente comando:
echo "This is the body of the email" | mail -s "This is the subject line" user@example.com
26. 26
Ahora vamos a instalar FIGlet, una aplicación informática que genera banners de texto, en varias
tipografías, formadas por letras compuestas por conglomerados de caracteres ASCII más pequeños.
4 Instalación y edición del figlet.
4.1 Instalamos el banner de manera dinámica
apt-get install figlet
27. 27
4.2 Creamos la carpeta
mkdir /etc/update-motd.d/
4.3 Entramos a la carpeta
cd /etc/update-motd.d/
28. 28
4.4 Creamos los archivos de información
touch 00-header && touch 10-sysinfo && touch 90-footer
4.5 Removemos el banner anterior
rm /etc/motd
4.6 Creamos un enlace directo
ln -s /var/run/motd /etc/motd
4.7 Dentro de la carpeta creada /etc/update-motd.d:
Editamos los archivos de información: 00-header, 10-sysinfo,y 90-footer.
29. 29
4.7.1 Abrimos el archivo 00-header:
nano 00-header
Luego copiamos lo siguiente dentro de este archivo:
[ -r /etc/lsb-release ] && . /etc/lsb-release
if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
# Fall back to using the very slow lsb_release utility
DISTRIB_DESCRIPTION=$(lsb_release -s -d)
fi
figlet $(hostname)
printf "n"
printf "Welcome to %s (%s).n" "$DISTRIB_DESCRIPTION" "$(uname -r)"
printf "n"
4.7.2 Abrimos el archivo 10-sysinfo:
nano 10-sysinfo
Luego copiamos lo siguiente dentro de este archivo:
date=`date`
load=`cat /proc/loadavg | awk '{print $1}'`
root_usage=`df -h / | awk '/// {print $(NF-1)}'`
memory_usage=`free -m | awk '/Mem:/ { total=$2 } /buffers/cache/ { used=$3
} END { printf("%3.1f%%", used/total*100)}'`
swap_usage=`free -m | awk '/Swap/ { printf("%3.1f%%", "exit !$2;$3/$2*100")
}'`
users=`users | wc -w`
time=`uptime | grep -ohe 'up .*' | sed 's/,/ hours/g' | awk '{ printf $2"
"$3 }'`
processes=`ps aux | wc -l`
ip=`ifconfig $(route | grep default | awk '{ print $8 }') | grep "inet addr"
| awk -F: '{print $2}' | awk '{print $1}'`
echo "System information as of: $date"
echo
printf "System load:t%stIP Address:t%sn" $load $ip
printf "Memory usage:t%stSystem uptime:t%sn" $memory_usage "$time"
printf "Usage on /:t%stSwap usage:t%sn" $root_usage $swap_usage
printf "Local Users:t%stProcesses:t%sn" $users $processes
echo
30. 30
4.7.3 Abrimos el archivo 90-footer:
nano 90-footer
Luego copiamos lo siguiente dentro de este archivo:
[ -f /etc/motd.tail ] && cat /etc/motd.tail || true
4.8 Damos permisos de ejecución
chmod +x /etc/update-motd.d/*
Ahora necesitamos que cada usuario no pueda salir de un directorio es decir, ese usuario no podrá navegar
por el sistema de archivos y se le podrán definir los programas que queramos. ¿En qué situación se puede
utilizar esto? Cuando tenemos un servidor que es compartido por varios usuarios o se quieren tener
diferentes hostings.
Para conseguir esto hay un programa llamado jailkit que cumple perfectamente la función de enjaular
usuarios.
5. Instalación de jailkit y sus dependencias:
apt-get install build-essential autoconf automake libtool flex bison debhelper binutils
31. 31
5.1 Vamos a la carpeta temporal y descargamos el paquete:
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.17.tar.gz
32. 32
Posiblemente nos saldrá un error pidiendo ingresar un disco en el cd-rom para continuar la instalación,
para solucionar este error editaremos el siguiente archivo:
nano /etc/apt/sources.list
Modificamos el archivo hasta que nos quede igual al archivo de la siguiente imagen:
33. 33
5.2 Una vez solucionado el error anterior, vamos a descomprimir el archivo que habíamos descargado:
tar xvfz jailkit-2.17.tar.gz
5.3 Entramos en la carpeta de jailkit y ejecutamos el binario
cd jailkit-2.17
./debian/rules binary
35. 35
Configuración del jailkit
5.6 Creamos la carpeta de jaula o jail
mkdir /home/chrootusers
5.7 Asignamos el dueño de la carpeta el usuario root:
chown root:root /home/chrootusers
36. 36
5.8 Creamos la jaula con los programas básicos
jk_init -v /home/chrootusers netutils basicshell jk_lsh openvpn ssh sftp
5.9 Creamos el usuario
adduser jose
Ejemplo: adduser jose
37. 37
5.10 Probamos la creación del usuario entramos al directorio
cd /home
Verificamos con el comando y vemos la carpeta de usuario
ls
38. 38
5.11 Vamos a enjaular el usuario
jk_jailuser -m -j /home/chrootusers/ usuario
Ejemplo: jk_jailuser -m -j /home/chrootusers/ jose
5.12 Vamos a /home/chrootusers
cd /home/chrootusers
39. 39
Verificamos el usuario debe estar en la siguiente ruta
cd /home/chrootusers/home
Si usamos ls debemos ver el usuario creado
40. 40
5.13 Vamos editar el jail de los usuarios para que puedan acceder
nano /home/chrootusers/etc/passwd
5.14 Buscamos la línea del usuario y le borramos la última línea de "/usr/sbin/jk_lsh", reemplazamos por
"/bin/bash"
Ejemplo:
arunp:x:1006:1001:arun pyasi,001,,:/home/arunp:/usr/sbin/jk_lsh
arun:x:1006:1005:,,,:/home/arun:/bin/bash
41. 41
5.15 Probamos accediendo por ssh al servidor solo debemos tener acceso a la jaula
ssh jose@192.168.0.1
También podemos acceder desde el FireZilla para verificar el usuario creado, y la carpeta a la que este
tiene acceso dentro de nuestro servidor.
42. 42
6 Configuración de las cuotas para limitar la cantidad de almacenamiento por usuario.
Necesitamos que los usuarios de nuestro sistema no consuman más recursos de los disponibles, resulta
indispensable habilitar un límite de ocupación de espacio en el disco duro.
6.1 Primero instalamos nuestro administrador de cuotas con el siguiente comando:
apt-get install quota quotatool
43. 43
6.2 Configuración de las cuotas
nano /etc/fstab
6.3 Añadimos la siguiente línea "usrquota" al directorio raíz "/":
LABEL=DOROOT / ext4 errors=remount-ro,usrquota 0 1
El archivo fstab nos debería quedar de la siguiente manera:
44. 44
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=3dc3b58d-97e5-497b-8254-a913fdfc5408 / ext4 errors=remount-
ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1
# swap was on /dev/sda5 during installation
UUID=36bf486e-8f76-492d-89af-5a8eb3ce8a02 none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
6.4 Volvemos a cargar la partición
mount -o remount /
6.5 Configuramos las cuotas:
quotacheck -avugm
quotaon -avug
6.6 Creación de cuotas por usuario:
edquota usuario
Ejemplo: edquota jose
45. 45
**Los parámetros que vamos a editar son donde la tercera y la cuarta columna de izquierda a derecha soft
y hard y le ponemos
10M=10000
15M=10240
Estamos limitando el espacio de almacenamiento del usuario jose a 10 MB como tamaño máximo por
archivo, y 15 MB como tamaño total de almacenamiento en el disco.
6.7 Verificamos las cuotas con el comando
quota ftpuser
46. 46
Ejemplo:
quota jose
Nos aparecerá en pantalla lo siguiente:
Disk quotas for user jose (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/disk/by-label/DOROOT 8 10000 10240 2 0 0
6.8 Comprobamos las cuotas de todos los usuarios:
repquota –a
7 Uso de scripts para creación de usuarios y enjaularlos a las carpetas específicas:
7.1 Creamos el grupo
groupadd sshaccess
47. 47
7.2 El siguiente script asume que hemos creado la carpeta del jail en /home/chrootusers y el grupo
sshaccess. Creación del script
touch chroot-jail.sh
7.3 La información del script que debemos poner dentro del archivo chroot-jail.sh:
## sanity checks
if [ "$#" -ne 2 ]; then
echo "This application requires two arguments: username 'passwdhash' (single-quotes required)"
exit 1
fi
if [ ! -d /home/chrootusers/./home/ ]; then
echo "This application assumes installation to /home/chrootusers"
exit 1
fi
getent passwd $1 &>/dev/null
if [ $? -eq 0 ]; then
echo "User $1 already exists on host system. Please remove and re-create using this tool."
exit 1
fi
getent group sshaccess &>/dev/null
if [ $? -ne 0 ]; then
echo "This application assumes 'AllowGroups sshaccess' restriction in /etc/ssh/sshd_config. sshaccess
group missing"
exit 1
fi
## creation
echo
echo "Creating User and Jailed Home Directory"
echo
useradd -m -d /home/chrootusers/./home/$1 -s /usr/sbin/jk_chrootsh -p $2 $1
echo "Adding User to 'sshaccess' Group"
echo
gpasswd -a $1 sshaccess &>/dev/null
JAILUID=$(id -u $1)
JAILGID=$(id -g $1)
48. 48
echo "Creating Required Internal Jail Passwd and Group Files"
echo
echo "$1:x:${JAILUID}:${JAILUID}::/home/$1:/bin/bash" >> /home/chrootusers/etc/passwd
echo "$1:x:${JAILGID}:" >> /home/chrootusers/etc/group
echo "Applying Quota Restrictions"
setquota -u $1 10240 15360 0 0 / || echo "Unable to Apply Quota Restrictions. Are Quotas enabled?"
7.4 Para usar el script debemos darle permisos de ejecución el siguiente comando:
chmod +x chroot-jail.sh
7.5 Ejecutamos el script, donde reemplazamos la variable entre comillas con la contraseña
./chroot-jail.sh username 'passwdhash'
Ejemplo: ./chroot-jail.sh jose 'EstaEsMiContraseña'
passwd username
7.6 Verificamos o añadimos al grupo
adduser usuario sshaccess
Ejemplo: adduser jose sshaccess
7.7 comprobamos con el comando cat que el usuario está en el grupo sshaccess
cat /etc/passwd
Nota: el script funciona sin problemas a la hora de crear los usuarios, y asignarlos al grupo con permiso
para usar el ssh, sin embargo el único problema es a la hora de usar la contraseña, la misma no funciona
por lo que debemos volver a cambiar la contraseña para que funcione.
En caso de necesitar borrar un usuario, ejecutamos el siguiente commando:
userdel -r username
49. 49
Ejemplo: userdel -r jose
Posiblemente también tendremos que eliminar la carpeta del usuario:
rm -rf /home/chrootusers/home/usuario
Ejemplo: rm -rf /home/chrootusers/home/jose
8- Vamos a desbloquear cualquier IP que este banneada:
8.1 Verificamos que programa se encuentra activado el fail2ban.
fail2ban-client status
8.2 Verificamos el IP bloqueado.
iptables -L –n
50. 50
8.3 Desbloqueamos el IP que este banneado con el siguiente comando:
fail2ban-client set ssh unbanip ipaddress
Ejemplo:
fail2ban-client set ssh unbanip 192.168.1.50
51. 51
Conclusión
El hardenig o endurecimiento de un servidor es importante, para reducir el riesgo de un ataque, pues
recordemos que el principal motivo para endurecer la seguridad en nuestros servidores, es ganar tiempo
frente a un ataque, ya sea para reaccionar a tiempo y poder evitarlo, o hacer que la perdida de información
sea lo más mínimo posible, y para lograr esto es importante agregar un monitoreo a todos los equipos de
nuestra red, por medio de alertas.
Es importante implementar protección adicional a nuestros equipos y no limitar la protección de estos con
el solo uso de características de seguridad que por defecto trae cada sistema operativo, por medio de
Firewall, IPS, IDS, HoneyPots.
Como pudimos ver en el hardening que le realizamos a nuestro servidor FTP, podemos hacer más seguro
la comunicación que tenemos con nuestro servidor, de esa forma evitar que las contraseñas puedan ser
vistas por un atacante mediante la interceptación de una comunicación con nuestro servidor, si usáramos
por ejemplo, telnet para esto y no el protocolo SSH, tendríamos esta vulnerabilidad, también podemos
configurar la información que despliega nuestro servidor cuando un usuario, o como también pudiera ser
un posible atacante intenta iniciar sesión, modificando la información que por defecto aparece.
También vimos lo importante que es configurar los intentos que un usuario puede hacer para iniciar sesión,
y así evitar un ataque de fuerza bruta, que nos pudiera causar gastar recursos de nuestro sistema,
procesando estos intentos de iniciar sesión, y que en realidad necesitamos para el buen funcionamiento de
nuestro servidor, sin decir que estos tipos de ataque pueden causar hasta una denegación de servicios.
Controlamos también el acceso que tiene cada usuario dentro de nuestro servidor FTP, de esa forma evitar
que un usuario navegue a cada directorio de nuestro servidor, y poder ver o modificar las configuraciones,
y las aplicaciones que tengamos dentro.
52. 52
Bibliografía
¿Qué es Hardening?, Consultado el 15 de noviembre de 2015. Disponible en:
http://blog.smartekh.com/%C2%BFque-es-hardening/
Secure Shell, Consultado el 15 de noviembre de 2015. Disponible en:
https://es.wikipedia.org/wiki/Secure_Shell
Fail2ban, Consultado el 15 de noviembre de 2015. Disponible en:
https://es.wikipedia.org/wiki/Fail2ban
Postfix, Consultado el 15 de noviembre de 2015. Disponible en:
https://es.wikipedia.org/wiki/Postfix
FIGlet, Consultado el 15 de noviembre de 2015. Disponible en:
https://es.wikipedia.org/wiki/FIGlet
Enjaular usuarios en Linux, Consultado el 16 de noviembre de 2015. Disponible en:
https://operativoslinux.wordpress.com/2015/02/21/enjaular-usuarios-en-linux/
Cuotas de disco. linux, Consultado el 16 de noviembre de 2015. Disponible en:
https://claudiooq.wordpress.com/quotas-de-disco-linux/