foo

Conociendo las herramientas mas basicas de seguridad en un sistema linux.

El objetivo de este articulo es proveer de un conocimiento basico sobre como poder establecer un estandar de seguridad basica en un sistema linux.
Haciendo mencion a las herramientas mas basicas y definiendolas levemente, todos los enlaces externos estan en idioma español, exceptuando las paginas de los proyectos donde no se da este soporte, las paginas relativas a documentacion, ejemplos, etc, estan en español a no ser que se espeficique lo contrario.
Se asume que el lector posee una experiencia minima como usuario de un sistema Linux.

Un poco de informacion.
-Introduccion
-Nota importante.
-Permisos y administracion basica.
-Sobre el software.
-Servicios y/o demonios del sistema.
-Virus en Linux,
backdoors y similares.

Herramientas utiles.

-
Nmap.
-Nessus.
-Iptables.
    -Politicas recomendadas.
    -Un script de ejemplo.
-Portsentry.
-Snort.
-Bastille.
-Iptraf.

Apuntes finales.

-
Consideraciones basicas.
-Notas de la version.
-Licencia.
 


Un poco de informacion.






El objetivo de este articulo es proveer de un conocimiento basico sobre como poder establecer un estandar de seguridad basica en un sistema linux.
Haciendo mencion a las herramientas mas basicas y definiendolas levemente, todos los enlaces externos estan en idioma español, exceptuando las paginas de los proyectos donde no se da este soporte, las paginas relativas a documentacion, ejemplos, etc, estan en español a no ser que se espeficique lo contrario.
Se asume que el lector posee una experiencia minima como usuario de un sistema Linux.



Atras - inicio - Siguiente





 Lo unico que pretende este documento es dar a conocer las herramientas basicas para poder administrar la seguridad en un sistema linux enfocado a un desktop o pequeño servidor donde no deberia tenerse informacion sensible y/o con valor economico, puesto que esto es solo un pequeño tutorial para "protegerse" de los ataques mas molestos y persistentes (sencillos y accesibles por cualquiera) que tambien son el 99'9% de los casos que sufre un usuario "de a pie".

Linux es un sistema operativo orientado a trabajar por y para redes, partiendo de esto la configuracion "perfecta" es totalmente aleatoria dependiendo de los requerimientos y/o conocimientos del administrador del sistema.

Por defecto un sistema linux recien instalado desde un cd suele ser muy "accesible" y espera que a que el administrador defina las politicas de seguridad y/o privacidad del sistema (exceptuando algunas distribuciones, muy pocas) en general esto es la norma.


Atras -inicio - Siguiente



Como dijimos antes, se asume que el lector posee unos conocimientos basicos sobre el uso de un sistema Linux, basicamente lo que vamos a tratar en este capitulo son una serie de directrices basicas para cualquier sistema.

-No usar el usuario root de manera normal, controlar desde y que tipo de accesos tiene root, puede entrar root en modo grafico, puede acceder por remoto, puede acceder a determinados servicios de la maquina, estas cuestiones son imprescindibles.

-Determinar como estan establecidos los permisos, recursivos, en que directorios, en que archivos, son modificables, quien es el propietario, que uid tiene, cuales son los privilegios del grupo y del usuario respecto a ciertas partes del sistema.

-Crear entornos seguros, usando chown o chmod, LSTP o LDAP, comprobar como se montan las particiones (ro , noexec, etc....)

-Servicios de la maquina como crontab, demonios varios, reiniciar,  longitud de las contraseñas, expiracion de las mismas,

-Bloquear las cuentas de acceso sin login (daemon, nobody, ftp,,,,)

-Controlar los acceso a nivel fisico ( gestores de arranque, discos extraibles, etc...)

-Revisar siempre que se pueda los log's del sistema, comprueba las fechas de acceso, ejecuccion, modificacion, etc... a determinados ficheros (etc/passwd etc/shadow, etc.... ), verifica que no existan archivos sin dueño.

En definitiva, no es facil mantener un sistema seguro, por eso parto de una maxima que veras que se repite constantemente a lo largo del documento: todo cerrado, solo se usa-abre algo cuando hace falta.








Hay que destacar que las versiones del software que se incluyen en los cd suelen tener numerosos bugs en cuestion de semanas a partir de su lanzamiento, esto es normal y es un proceso natural en el codigo abierto, no por ello linux es mas vulnerable que otros sitemas operativos (microsoft® usa esos argumentos distorsionados de manera deliberada), muy al contrario gracias a estos fallos que se conocen de manera "natural" y no en paginas que la mayor parte de la veces son perseguidas por las leyes y que generalmente infringen todo tipo de normas, leyes y etica aceptable.
Una de las ventajas de linux, es que cuando aparece un bug generalmente en menos de 24horas tendras la solucion, en linux la politica de parches no es muy extendida, unicamente se usa en casos muy determinados, generalmente hay nuevas versiones del mismo software con el problema corregido (ventajas del codigo abierto) y por supuesto para adquirir de manera gratuita y anonima.
Por supuesto el software se puede comprobar (y se debe) las firmas de este, haciendo esto nos evitaremos instalar software que no sea legitimo, se pueden firmar los paquetes con una clave md5, es la manera mas sencilla pero tambien la que mas posiblidades de engaño posee, cualquiera puede generar una llave md5, no asi con pgp, tambien existen una serie de firmas y llaves para cada paquete de software, en modo general instalar las llaves de los desarrolladores de los que nos fiemos sera una buena opcion, o por lo menos comprobar que el md5 es correcto.

Dicho esto se ha de pensar que es de vital importancia estar actualizado en todo el software del sistema, prestando especial atencion a los paquetes de software que sirven para proporcionar servicios relacionados con redes.

Todo esto lo puede hacer Linux por ti, en la mayoria de distribuciones existen herramientas para comprobar actualizaciones de software cada X tiempo, y si no disponemos de estas herramientas, podemos automatizar el proceso (uso de cron y apt-get, o cron y yum, o cron y urpmi, etc.....)


Atras - inicio - Siguiente





Estos son los programas que permiten trafico en nuestra maquina, servidor http,
servidor ftp, telnet, cups, etc...
Cada servicio abre un puerto/s que da salida-entrada de trafico de nuestra maquina, por
tanto debemos revisar que no tengamos ejecutandonse un demonio de telnet, puesto
que si asi fuera estariamos dando servicio de telnet a la red, igual con ftp,
http, etc,,,.

Desactivar todos los servicios que no sean necesarios.

Leer bien la documentacion de los servicios que tengamos que tener funcionando
(por ejemplo: tenemos un server de ftp, pero solo accesible a users registrados,
leyendo la documentacion podremos restringir el acceso anonimo, determinar el
puerto, activar quotas, comandos personalizados para usuarios, i.p, hosts, y un
sin fin de opciones. Realmente debemos leer muy bien la documentacion de
cualquier servicio que tengamos corriendo, puesto que algunas veces algunas
opciones que estan establecidas por defecto, permiten acciones no deseadas.

Existen numerosas maneras de conocer que demonios estan funcionando en nuestra
maquina, hay que fijarse en el nivel de ejecucion.

Una lista mas o menos clara, de los puertos que usan los servicios la teneis en /etc/services, por ejemplo, buscamos el puerto que deberia usar mysql:

$grep mysql /etc/services
mysql           3306/tcp                        # MySQL
mysql           3306/udp                        # MySQL
$

Viendo este archivo nos podemos hacer una idea de si algun servicio corre donde no deberia (rootkits p.ejm).

Por supuesto ver que puertos estan funcionando es de vital importancia (ver man del comando netstat), debemos determinar que solo viendo la salida de netstat no es posible decir si nuestro sistema es vulnerable, si estan abiertos pero solo para una red local, o si simplemente estan abiertos pero bloqueados, etc....

Para ver los servicios de nuestra maquina, tanto si estan activados como si no, usaremos: service y chkconfig, con service podemos ver el estado de cada uno de los servicios de nuestra maquina:

$service xinetd status
xinetd (pid 1926) está corriendo...

Recomiendo la lectura del manual de service, es muy sencillo y es casi la unica manera de saber que servicios corren actualmente en nuestra maquina, por supuesto que la mayoria de distribuciones usan front-ends graficos de service y chkconfig, pero trabajar directamente sobre el comando lo veo mas "limpio".


Chkconfig nos sera util para determinar que servicios se ejecutan en segun que nivel de ejecuccion.

$chkconfig --list mysql
mysql           0:desactivado   1:desactivado   2:desactivado   3:desactivado  4:desactivado    5:desactivado   6:desactivado

La salida del comando es definitiva y esta muy clara, para cada nivel de ejecuccion nos permite asignar un politica por defecto (el servicio se inicia o no) , las opciones del comando son muy simples, añadir servicios o eliminarlos, y modificar el nivel de ejecuccion de cada servicio.

El uso de chkconfig nos lleva a la misma situacion que con service, pero repito; prefiero conocer el comando que usar herramientas graficas para cosas tan sencillas.



Atras-inicio - Siguiente




Nos vamos a centrar en dos partes exclusivamente, tomaremos como ejemplo la tematica sobre los virus, pero hay que recordar que es extensible a todo el codigo malicioso, puesto que al fin y al cabo se trata de eso: software.

Mucho se habla de este tema , las mas comun de las afirmaciones es que en Linux no existen virus, FALSO, por supuesto que existen virus, otra cosa es que afecten de igual manera, y sobre todo la propagacion de estos.

Basicamente un virus es un programa que hace algo, que modifica los archivos del sistema para crear situaciones comprometidas, irregulares o de inestabilidad, con perdida de datos, modificacion de estos, etc....

La estructura de un sistema linux no permite facilmente la propagacion de codigo de este tipo, pero no por ello es imposible.

Nos deberiamos basar en una "escalada de privilegios" para poder infectar todo un sistema, la mayor diferencia con otros sistemas operativos reside precisamente aqui, un usuario normal puede ejecutar codigo malicioso pero hasta donde puede llegar ese codigo es cuestion de una situacion de permisos y politicas de seguridad.

Realmente un virus es algo muy sencillo de hacer, otro aspecto seria la ejecuccion de este por parte de los usuarios y por supuesto el tema de la propagacion , aunque llegados a este punto un virus que se propaga es mas bien un gusano, pero no vamos a discutir sobre esto aqui.

El kit de la cuestion reside una vez mas en los permisos de usuarios, particiones, etc,,, los permisos del sistema, si ejecutamos como root un virus, indudablemente nos afectara a todo el sistema, pero si ejecutamos un virus como un usuario (que deberia tener ciertas restricciones) la infeccion puede ser nula o facilmente subsanable o en el peor de los casos no comprometer directamente a la configuracion del sistema pero si dejar algun servicio inactivo (por ejemplo una particion de determinado usuario inutilizada, y en ella estan mas directorios de usuarios, etc...)

Se parte de una maxima, no se instala software de manera casual, es decir: comprobamos que tipo de software es, verificamos las firmas y la procedencia, hay que recordar que un virus lo ejecuta alguien, no se ejecuta solo, es decir: no por recibir un archivo infectado se puede ejecutar el solo, aparte debera tener permisos, etc....

De todas maneras los virus en linux no estan muy extendidos, tal vez por que los usuarios de un sistema Linux suele prestar mas atencion a lo que descarga y de quien lo descarga , a lo que ejecuta y como lo ejecuta, en definitiva a un politica de seguridad aceptable.

Un codigo de ejemplo de un virus muy simple, extraido de este articulo:

#!/bin/bash
for foo in *
do
tail -4 $0 >> $foo
done

El ejemplo es sencillo pero ilustra bien un virus tipico, buscamos todos los ficheros, y añadimos (tail -4 $0 >> $foo ) las 4 ultimas lineas a todos los archivos,las lineas son el mismo codigo del script ($0) , y asi el ciclo se repite (bucle for) para cada archivo (in *), esto tiene facil solucion y evidentemente hay que ejecutarlo, si no...

Otro ejemplo mas destructivo es a la vez mas simple si cabe:

#!/bin/bash
cd /etc
for foo in *
do
rm -rf $foo
done

Aqui directamente borramos todos los archivos del directorio /etc, como se puede ver son ejemplos muy sencillos, se podrian camuflar, combinarlos con exploits y un largo etc,,,

¿Pero quien ejecuta esto en su maquina y como root?

Otra cuestion es si camuflamos ese codigo del virus, imaginemos que poseemos un archivo fuente mas o menos grande, aproximadamente unas 2000 lineas, y que en esas 2000 lineas hay declaradas unas, digamos 800 variables.

var1="r"
sigue el codigo........................
if [ "$var670" == "0" ]; then
       var657="m"
fi
sigue el codigo..........................
sigue el codigo..........................
$var324 $var1 $var657
sigue el codigo..........................
sigue el codigo..........................

Algo aparentemente inocente ( que la variable var1 sea r, o que si la variable var670 cumple una condicion se le asigne un valor m a la variable657 ) puede ser destructivo (rm) y provocar que el programa que pensabamos que hacia una funcion, realmente haga otra muy distinta.

En estos casos solo podemos hacer dos cosas: o bien no ejecutamos nada que no sea de nuestra confianza absoluta (la opcion mas recomendable) o optamos por revisar el codigo fuente, tarea muy dificil en muchos casos, por no decir imposible en otros.

Como la comunidad de usuarios de Linux es una comunidad abierta, este tipo de practicas no son la norma, de todas maneras existen ejemplos escandalosos (login.c del compilador famoso...el backdoor que se intento colar en cierta version del kernel, etc...) y seguro que hay programadores que se dedican a estas practicas, en definitiva que en un sistema Linux SI existen los virus y el codigo malicioso.

Puede ver mas informacion sobre virus en linux en este articulo en español, de recomendable lectura si esta intersado en este tema.

Partiendo de esto, la ejecuccion de codigo que no conocemos o desconfiamos de el, no es una buena idea.

Una backdoor o un rootkit, troyano etc,,, basicamente viene abrir un puerto y dar un determinado servicio por el.

Como en cualquier sistema operativo este tipo de programas tambien existen en linux, la cuestion es la misma de antes, ¿ejecutamos ese codigo?.

Como cualquier programa, para poder acceder al control total del sistema nos haria falta ser root o tener uid 0, esto se consigue de la misma manera que la actuacion de un virus, con lo que las cosas cambian bastante de un sistema linux a otros sistemas.

Lo mismo pasaria con las bombas logicas, los sniffers no deseados, keylogs y demas software considerado perjudicial para nuestro sistema.

Linux es mas seguro de eso no hay duda, de por que no proliferan virus, rootkits, y demas software en este sistema; la explicacion creo que se basa en algo fundamental, el codigo es abierto, con lo que todo el mundo puede revisarlo, si alguien encuentra un virus, un rootkit, etc,, en algun software inmediatamente sera denunciado, con lo que toda la comunidad estara alerta de ese software y su programador, su sitio web, su correo y en definitiva del entorno que rodea a estas practicas.





Herramientas utiles.






Una buena e inmejorable herramienta para controlar los puertos de nuestra maquina es nmap, este es un escaneador de puertos, la ventaja que tiene es que puede ultilizar muchos tipos distintos de escaneo y opciones diversas, con nmap nos podemos hacer una idea de que servicios estan corriendo en nuestra maquina y por tanto que puertos estan en uso, de nuevo hay que destacar que nmap mostrara los resultados desde una red local si lo hacemos sobre nosotros mismos, y esto no quiere decir que los puertos en uso sean accesibles desde cualquier red y/o direccion.
Por supuesto es necesario leer bien la documentacion que acompaña a el programa para no hacernos ideas equivocadas de lo que pasa en nuestro sistema, nmap posee una interfaz grafica en forma de front-end (nmapfe) disponible aqui.
Por supuesto mirando el man de nmap podremos ver el uso y opciones, pero para los mas vaguetes aqui teneis un buen tutorial.


Atras - inicio - Siguiente





Nessus es un escaner de puertos, pero tiene una particularidad que lo hace especial, es capaz de determinar fallos de seguridad, ademas de escaneranos el sistema nos descubre bug's de seguridad, (magnifico no?) bueno, muchos fallos o estan desfasados o bien son un poco "paranoicos" pero es una herramienta muy util de eso no hay duda.

Otra ventaja son sus plugins, actualizados cada poco tiempo, esto nos permite tener una buena base de datos de vulnerabilidades cada vez que las busquemos, tambien es capaz de generar informes, hacer lo que queramos con ellos, crear estadisticas en formato html, etc...
Por si fuera poco nessus nos propone la solucion al poblema de seguridad y una pequeña explicacion del mismo y su solucion.

Ademas  de tener un magnifico interfaz grafico, en su pagina hay un trabajadisimo tutorial con capturas de pantalla incluidas de como instalar nessus paso a paso, pantalla a pantalla.
 

Atras - inicio - Siguiente





Iptables nos permite filtrar los paquetes que circulan por nuestra maquina.
Para un usuario normal (desktop de casa sin informacion relevante o de alto valor economico) con una buena admistracion de iptables sera mas que suficiente para establecer un sistema seguro.
Iptables es para mi la llave maestra de la seguridad de mi sistema, gracias a iptables podremos administrarlo muy bien.
Basicamente iptables nos permite  modificar  el trafico de nuestra maquina, tanto por puertos, como por direcciones, mascaras, y flujo de datos.
El gran kit de iptables, es que reside como una aplicacion directa al kernel (esto no esta bien dicho ya lo se, pero no es  el objetivo de tutorial)  es decir que no corre como un servicio o determinado programa (vamos que no funciona como fucionan los firewalls de haserchof)
si no que  cuando llega un paquete al kernel, este decide que hacer con el dependiendo de las reglas que tengamos aplicadas.

-Reglas FILTER:
    Las reglas INPUT y OUTPUT, se usan para filtrar los paquetes que van dirigidos a nuestra         maquina
    FORWARD se usa para filtrar paquetes que van a otras redes o maquinas.

-Reglas NAT:
PREROUTING, POSTROUTING, estas son reglas que se aplican ANTES que las
filter, se usan para rederigir puertos, direcciones y/ o hacer cambios en las direcciones (servidores virtuales en otras maquinas de la red, p.ejm: una red con maquina1 que da salida a internet, en esa red sin conexion directa si no a traves de la maquina 1 tenemos maquina2, esta proporciona a toda la red interna un servidor de impresion, y ademas tenemos maquina3 que posee un servidor de ftp publico, para estos casos las reglas NAT son casi imprescindibles, en otros casos (desktop casero) no son de gran importancia.

-Reglas MANGLE:
Existen otras reglas que van por encima de las NAT, son reglas para modificar los paquetes, pero su conocimiento no es el ambito de este tutorial.



Como base de toda operacion debemos tener clara una cosa:
 
    Establecer conexion:  maquina que envia---->paquete flan=SYN---------->maquina que recibe
    Conexion aceptada:    maquina que envia<---paquete flan=SYN/ACK<---maquina que recibe
    Conexion rechada:      maquina que envia<----paquete flan=SYN<---------maquina que recibe

El orden de las reglas es determinante, puesto que las reglas se "apilan" unas encima de otras, es decir la ultima puede no ser efectiva al tener otra por "detras" que anule a esta.

Mas vale meter reglas por encima; NAT incluso MANGLE, que hacer muchas chapuzas, tener en cuenta que con iptables se puede hacer casi cualquier cosa,

Documentacion a tener en cuenta:
          Muy util pagina de iptables y mas (en ingles) : netfilter
          El filtrado de paquetes aqui
          Man de iptables (imprescindible)  
          Control de trafico y en enrutamiento avanzado aqui
          Buen hilo con ejemplos y explicaciones aqui.
          El how-to de Rusty Russell en español aqui.
          Ejemplo de firewall con iptables bien explicado aqui.
          Opciones de iptables (pagina de redhat ) aqui.
          Todo sobre iptables (en ingles pero completisimo) aqui.
          Scripts avanzados de ejemplo (en ingles) aqui.
         
         
          



Este es un script para  /etc/rc.d/rc.local, es decir que aplicara todo lo que le digamos cuando arrranque el sistema (con el kernel ya cargado, no desde un gestor) voy a explicar muy por encima lo que hace, la idea es que se pueda ver claramente una politica aceptable de como aplicar las reglas de iptables.

###--- Flush de reglas, esto digamos que es imprescindible :) ----###
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

###----- Aqui vamos a definir la politica por defecto-------###
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

### ------Comienzo de las reglas---------###

###-------- A localhost le dejamos todo --------###
/sbin/iptables -A INPUT -i lo -j ACCEPT

###------Con esto evitamos responder a un ping-----###
 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

###------Con esto evitamos un tipo de ataque por filtrado de bytes---###
iptables -A INPUT -i ppp0 -f -m length --length 0:40 -j DROP

###------Activamos el servidor solo para localhost----#
iptables -A INPUT -p tcp -s ! 127.0.0.1 --dport 80 -j DROP

###-----Ahora cerramos todo tanto por tcp como udp, desde el 1 al 1024---###
iptables -A INPUT -p tcp --dport 1:1024
iptables -A INPUT -p udp --dport 1:1024

Con esto terminado, es un script muy simple pero practico e ilustrativo de que con muy pocas lineas se puede construir un firewall basado en iptables, ademas se puede ver el principio de flexibilidad que tiene iptables, esto seria el tipico firewall de ejemplo de uso de las funciones mas basicas.

Por otro lado tenemos la opcion de cerrar todo menos lo necesario, este es el axioma en los administradores.

###--- Flush de reglas, esto digamos que es imprescindible :) ----###
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

###----- Aqui vamos a definir la politica por defecto-------###
ptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -p FORWARD ACCEPT

#Aplicando reglas en INPUT
iptables -A INPUT -p tcp --dport 1:1024 -j DROP
iptables -A INPUT -p udp --dport 1:1024 -j DROP
iptables -A INPUT -p tcp -s 10.0.0.1 -j ACCEPT
iptables -A INPUT -p udp -s 10.0.0.1 -j ACCEPT
iptables -A INPUT -p all -s 0.0.0.0/0 -j ACCEPT
iptables -A INPUT -p all -m state --state NEW,INVALID -j DROP

#Aplicando reglas en OUTPUT
iptables -A OUTPUT -p all -s 10.0.0.1 -j ACCEPT
iptables -A OUTPUT -p all -s 0.0.0.0/0 -j ACCEPT

#Aplicando reglas en FORWARD
iptables -A FORWARD -p all -m state --state NEW,INVALID -j DROP

Decididamente este tampoco es el mejor ejemplo, pero en este caso solo confiamos en un maquina local ( El router ), todo lo demas esta cerrado, y ademas rechazamos las conexiones no  solicitadas, iptables permite hacer muchisimas cosas y cada uno las hace a su manera, pero con estos dos ejemplos mas o menos hemos echo lo mismo pero con politicas distintas.

En la seccion de documentacion podeis ver muchos mas ejemplos y su explicacion, por supuesto se puede hacer lo que se nos pase por la cabeza, mirar la documentacion que es una buena recopilacion.


Atras - inicio - Siguiente





Este es un software que nos prestara muchisima ayuda, hemos visto que con iptables podemos crear autenticos muros entre redes, un ejemplo practico (y casi fue real) seria un script que actuase cuando se necesita (unicamente permitir la salida-entrada de datos durante un tiempo determinado y por una serie de puertos determinados, solo se permiten conexiones para revisar-mandar correo (cada 15 minutos se revisa el correo y se manda el saliente) despues toda la red esta aislada, y cuando se conecta solo permite entrada por el 110 pop3 y salida por 25 smtp).
Pero claro nuestro querido linux nos permite ir mucho mas lejos, una manera de controlar ataques, sobre todo DoS y busqueda de agujeros de seguridad (escaneo de puertos, correr exploits remotos para buscar vulnerabilidades del sistema, etc,,,,) es logeando el acceso y el trafico de nuestra maquina, hay una herramienta PORTSENTRY, que nos va ha hacer la vida mas facil.

Con portsentry podremos actuar de una manera determinada conforme a una serie de reglas que nosotros definimos, de manera que podremos actuar contra ciertos tipos molestos de trafico (escaneado de puertos, busqueda de exploits, DoS y demas sutilezas), las reglas van a definir que hacer con esas direcciones y/o paquetes, podemos ignorarlos, redericcionarlos, o ejecutar comandos, etc,, por ejemplo aplicarles una regla de iptables a determinados comportamientos definidos
(escaneo de puertos=  DROP       all  --  99.99.99.99          0.0.0.0/0 )
O lo que nos de la gana.

Logicamente esto lo hara de manera automatica, con lo que nos despreocupamos de una cosa mas y sobre todo, controlamos un detalle importante del sistema.

La utilidad de portsentry esta fuera de toda duda, eso si, hay que actuar con cuidado cuando estamos detras de un servicio al publico, puesto que no es tan flexible como iptables, de todas maneras con portsentry se pueden configurar comportamientos del sistema realmente anti-intrusion automatica

Portsentry posee niveles de actuacion distintos, independientemente de las reglas que le apliquemos, es decir nosotros definimos una serie de cosas en portsentry.conf

Ejemplo util de configuracion de portsentry
###-----Esta linea viene por defecto, indica los puertos a monitorear---###
TCP_PORTS="1,7,9,11,15,70,79,80,109,110,111, . . . , 40425,49724,54320"
UDP_PORTS="1,7,9,66,67,68,69,111,137,138, . . . ,32774,31337,54321"

.
.
.
.
###------Modificamos el ignore, para decidir que hacer con el atacante----###
# 0 = Dont block UDP/TCP scans
# 1 = Block scan atacks
# 2 = Run external command only
BLOCK_UDP= "2"
BLOCK_TCP="2"


###-----Aqui definimos lo que hacer con la direccion, se manda un mail a root avisando---###
KILL_RUN_CMD="/bin/echo '$TARGET$ -> $PORT$' | /usr/bin/Mail
-s 'ATACK $TARGET$' root"


Pero podemos definir que tipo de escucha queremos que realice, o bien el modo clasico o estandart, con sus variantes (normal o steath, este ultimo abarca un rango mayor de puertos) en el cual se monitorea los puertos definidos en portsentry.conf y se realizan las acciones determinadas, o bien con el modo avanzado, en este modo
todo parece cerrado y de echo casi lo esta, pero lo que hace es pedirle al kernel que le notifique si llega alguna petición a algún puerto menor al especificado en las opciones ADVANCED_PORTS_TCP y ADVANCED_PORTS_UDP. Util para  quitarnos trabajo de encima, aunque cuidado con este modo.
De todas maneras en este mini tutorial esta bien explicado el uso de portsentry, tambien tienes un articulo en la linea de linuxfocus, muy sencillo de entender.


Ademas podemos guardar log's, usarlo con tcpwraper
y hacer muchas cosillas con el, eso ya es cosa de la imaginacion.


Atras - inicio - Siguiente





Snort es un sistema de deteccion de intrusos, este es un programa complejo que permite hacer realmente maravillas, podemos dar servicio al mundo si que este nos vea, es un herramienta muy potente y que pronto espero poder conocer a fondo.

Su funcionamiento es por reglas, en la pagina de snort hay ya muchas reglas, y ademas conforme se descubren nuevas vulnerabilidades se añaden, por supuesto podemos modificarlas a nuestro antojo, tambien posee reglas "internas" que podemos aplicar y modificar a nuestro gusto, snort monitoriza todo tipo de trafico, dentro y fuera de un firewall, dentro de la maquina, de las redes internas y externas (atentos a esto), vamos que podemos hacer lo que queramos, si bien portsentry nos servia como un monitor de accesos y ejecucion de comandos internos, snort se presenta como una solucion mucho mas avanzada y potente, sobre todo para redes internas, puesto que es capaz de actuar directamente sobre demonios incluso de correr como demonio el mismo.

La problematica de este programa es la enorme posibilidad de uso , por lo que lo dificil sera como hacerlo para usar en conjuncion con otros programas y que podamos extraerle el rendimiento del que es capaz, tambien existe una manera sencilla usar las reglas actualizadas que disponen en su pagina, mas que suficiente para un usuario desktop.
De todas maneras usando el man podemos ver casi todo lo relativo al programa pero aqui teneis una explicacion de como crear nuevas reglas, en la lista de correo de snort en español puedes consultar y leer mucha informacion, dudas, enlaces, reglas, bug's etc...


Atras - inicio - Siguiente





Bastille es una herramienta que nos sirve para casi todo lo anterior, pero que yo prefiero usar solo para algunas cosas (solo determinar politicas de inicio en sistemas recien instalados, como bien indican en su pagina web), basicamente nos permite configurar nuestra maquina para crear una politica aceptable.

Bastille por si sola es una herramienta capaz de hacer muchas cosas por nosotros, esta escrito en perl, pero posee una interfaz grafica basada en tcl/tk, concretamente perl::tk.
Una de las ventajas de bastille, es que nos hace un firewall mas o menos personalizado, y lo hace de una manera muy amena, nos pregunta cada opcion, y nos muestra informacion sobre nuestras decisiones, esto es muy util en muchas preguntas, (sobre todo para gente que nunca ha tocado la seguridad en un sistema linux).


Se divide en modulos, cada modulo consta de una serie de preguntas, aqui algunas que te hara bastille.
-ipchains (obsoleto)
-Obtener parches (nos busca parches de bind, sendmail etc,,, experimental)
-Permisos de archivos, de grupos y usuarios.(cuentas, directorios, etc...)
-Arranque, parametros de seguridad.(contraseñas, logins, etc...)
-Seguridad en inetd (muy util funcion).
-Herramientas del sistema (permite determinar que pueden usar lso usuarios, como, etc,,,)
-Uso de syslog muy practico.
-Control de demonios, (desde habilitar servidores para uso local, cuentas ftp, ssh, sendmail, etc...)

En cada seccion hay una buena explicacion y serie de preguntas sobre los aspectos de seguridad relevantes de la seccion (agujeros y debilidades conocidas).

En defenitiva bastille se presenta como el unico firewall completo que he visto, hay muchos basados en iptables que nos permiten hacer eso, configurar iptables en modo grafico, otros para mas cosas de netfilter,  y algunos que lo intentan juntar todo, pero bastille sobresale con mucha diferencia, puesto que es muy transparente y sobre efectivo, si buscas un firewall completo en modo grafico esto es lo mejor que podras encontrar, recuerda que con iptables filtramos pero con bastille tambien seremos capaces de desactivar servicios, opciones de estos ultimos, logs, y control sobre permisos y ejecuciones en el sistema.


Atras - inicio - Siguiente





Bien, ahora ya tenemos un sistema como nosotros queremos, bueno pues con iptraf podremos testear que todo esta correcto, esta herramienta nos permite ver con mucha transparencia el flujo de datos de nuestra maquina o red, digamos que es imprescindible para poder ver con claridad que es lo que esta pasando por nuestra maquina.

Monitorea todo el trafico de red y ademas como es tonica :-) nos permite adaptarlo a nuestras necesidades, monitorear por un rango de ip, por una ip concreta, por interfaz, etc,,,

Nos muestra toda la informacion de los paquetes que circulan por la red y ademas podemos usar scripts tan practicos como este para crear archivos de log's  importantes.

Iptraf es el sniffer definitivo, hay un front-end por algun sitio, lo tengo guardado , pero la direccion donde lo encontre no existe actualmente y por raro que parezca no encontre mas, si alguien lo necesita que me lo pida y lo dejare en algun servidor.
En la pagina de iptraf hay numerosa documentacion.



Atras - inicio - Siguiente


  


No se ha pretendido hacer un estudio sobre la seguridad en un sistema linux, es un tema muy amplio y muy documentado y tratado en profundidad, lo que se pretendia es que el lector tuviera una idea de lo mas basico respecto a seguridad, y a su vez conociera las herramientas mas basicas.

De esta manera se pretende dar una base por donde empezar a documentarse y orientarse respecto a la seguridad.

Y recuerda ningun sistema es 100% seguro mientras este conectado o se tenga acceso fisico a el.
La mejor ocpion es estar al tanto de actualizaciones o de anuncios de bug's o fallos graves de seguridad, otra opcion es subscribirse a alguna lista de correo y estar al tanto de lo que pasa, pero sobre todo, recuerda muchas veces el fallo no es de la configuracion del sistema o de la herramienta que usemos, si no de la torpeza de los propios usuarios, y contra eso no podemos luchar, si alguien manda archivos de M$ office por e-mail mal asunto , eso es una problema casi seguro, pero el problema es que la gran mayoria lo hace, si tienes suerte y usas linux pero emulas con wine (triste realidad, en muchos lugares) cuidado con kmail, que te ejecutara todo, en fin la lista es interminable y no podemos reproducirla aqui, pero espero que por lo menos sepas por donde empezar a trabajar en el aspecto de la seguridad.


Atras - inicio - Siguiente




Copyrigth Xento Figal © 2003 - 2004 xento@users.sourceforge.net
Este documento se puede distribuir bajo licencia GNU/FDL
Version 0.6 del 0.1
Version en html , html.tar.gz , ps.tar.gz en http://xinfo.sourceforge.net/documentos/mini-sec/
Actualizaciones e hilos http://xinfo.sourceforge.net/



EOF

2003-11-03

2003 - 2005 (c) Xento Figal. Todos los contenidos bajo sus respectivas licencias: FDL/GPL - www.gnu.org

Pagina generada en 0.0125 segundos