jueves, 27 de septiembre de 2012

Instalar y configurar Sistema Detección de Intrusiones-Snort en ubuntuserver

Instalar y configurar Sistema Detección de Intrusiones-Snort en ubuntu 

En primer lugar recomiendo que este sistema se instale en una maquina dedicada, donde la topología ideal sería:

TOPOLOGÍA IDEAD SNORT

  • Comenazaremos por instalar dependencias:
sudo su


apt-get install mysql-server nmap nbtscan apache2 php5 php5-mysql php5-gd
libpcap0.8-dev libpcre3-dev g++ bison flex libpcap-ruby make zlib1g-dev
libmysqld-dev libdnet libdnet-dev libpcre3 libpcre3-dev gcc make flex byacc
bison linux-headers-generic libxml2-dev libdumbnet-dev zlib1g zlib1g-dev 
checkins
 

 



  • Tras haber elegido una contraseña segura para el usuario root(mysql) y saltarnos la configuración de el paquete DECnet, actualizamos nuestro sistema, para asegurarnos que estamos a la última en lo que a parches de seguridad se refiere y reiniciamos.



apt-get update



apt-get upgrade



reboot

1. En primer lugar descargaremos e instalaremos la API de adquisición de datos que utiliza snort:
mkdir -p /usr/local/src/snort

cd /usr/local/src/snort

wget http://www.snort.org/dl/snort-current/daq-0.6.2.tar.gz

tar zxvf daq-0.6.2.tar.gz


cd daq-0.6.2

./configure

make

checkinstall



2. Instalar y configurar snort:

cd /usr/local/src/snort wget http://www.snort.org/dl/snort-current/snort-
2.9.2.3.tar.gz

tar zxvf snort-2.9.2.3.tar.gz

cd snort-2-9-2-3

./configure --prefix /usr/local/snort “/usr/local/snort es la ruta de instalación”

make

checkinstall

3. Creamos el usuario y grupo snort:

groupadd snort

useradd -g snort snort 

4. Ceamos enlaces hacia los archivos snort:

ln -s /usr/local/snort/bin/snort /usr/sbin/ ln -s /usr/local/snort/etc /etc/snort


5. Instalación de snort-rules:

5.1 Nos descargaremos las reglas que snort utilizara para detectar amenazas(debemos registrarnos):
cd /usr/local/src/snort
5.2 instalación snort-rules:
tar zxvf snortrules-snapshot-2923.tar.gz -C /usr/local/snort
mkdir /usr/local/snort/lib/snort_dynamicrules
cp /usr/local/snort/so_rules/precompiled/Ubuntu-10-4/x86-64/2.9.2.3/*o /usr/local/snort/lib/snort_dynamicrules (para sistemas 64 bits, para 32 bits sustituir x86-64 por i386)
6. Creamos el directorio donde se albergaran los log de snort, y lo asignamos al usuario snort y se crean los enlaces necesarios:
mkdir –p /usr/local/snort/var/log

mkdir /var/log/snort

chown snort:snort /usr/local/snort/var/log

ln –s /usr/local/snort/var/log /var/log/snort 
 
7. Creamos los enlaces para reglas dinamicas y le damos permisos a snort 
 
ln -s /usr/local/snort/lib/snort_dynamicpreprocessor /usr/local/lib/snort_dynamicpreprocessor 
 
ln -s /usr/local/snort/lib/snort_dynamicengine /usr/local/lib/snort_dynamicengine

ln -s /usr/local/snort/lib/snort_dynamicrules /usr/local/lib/snort_dynamicrules 
 
chown -R snort:snort /usr/local/snort
 
8. Configuración snort:
8.1 Editar  /usr/local/snort/etc/snort.confy buscamos:
- La sección # Reputation preprocessor y comentamos todas las lineas de esta sección
# Reputation preprocessor. For more information see README.reputation
#preprocessor reputation:
# memcap 500,
# priority whitelist,
# nested_ip inner,
# whitelist $WHITE_LIST_PATH/white_list.rules,
# blacklist $BLACK_LIST_PATH/black_list.rules
 - Y por último buscamos la linea:
#output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_typesy debajo añadiremos output unified2: filename snort.u2, limit 128
9. Volcamos las reglas dinamicas:

snort -c /usr/local/snort/etc/snort.conf –dump-dynamic-rules=/usr/local/snort/so_rules

- Al introducir este comando puede dar un error con las librerias, bien basta con hacer lo siguiente

LD_LIBRARY_PATH=/usr/local/lib

export LD_LIBRARY_PATH 
 
10. Habilitamos las dynamicrules,para lo cual editamos /usr/local/snort/etc/snort.conf, buscamos la
sección dynamic library rules y descomentamos todas las lineas.

# dynamic library rules include $SO_RULE_PATH/bad-traffic.rules include $SO_RULE_PATH/chat.rules include $SO_RULE_PATH/dos.rules include $SO_RULE_PATH/exploit.rules include $SO_RULE_PATH/icmp.rules include $SO_RULE_PATH/imap.rules include $SO_RULE_PATH/misc.rules include $SO_RULE_PATH/multimedia.rules include $SO_RULE_PATH/netbios.rules include $SO_RULE_PATH/nntp.rules include $SO_RULE_PATH/p2p.rules include $SO_RULE_PATH/smtp.rules include $SO_RULE_PATH/snmp.rules include $SO_RULE_PATH/specific-threats.rules include $SO_RULE_PATH/web-activex.rules include $SO_RULE_PATH/web-client.rules include $SO_RULE_PATH/web-iis.rules
include $SO_RULE_PATH/web-misc.rules

11. Comprobamos el correcto funcionamiento de snort:

snort -c /usr/local/snort/etc/snort.conf -T
 - Debemos obtener esta salida:
  Snort successfully validated the configuration! Snort exiting
 12. Arrancar snort automáticamente:
- Primero creamos el script lanzador de snort dentro de /etc/init.d touch /etc/init.d/snortd
 - Editamos el script e introducimos el siguiente codigo:
 nano /etc/init.d/snortd
  ******script*******
#!/bin/sh
# $Id$
#
# snortd Start/Stop the snort IDS daemon.
#
# chkconfig: 2345 40 60
# description: snort is a lightweight network intrusion detection tool that
# currently detects more than 1100 host and network
# vulnerabilities, portscans, backdoors, and more.
#


# Source the local configuration file
. /etc/default/snort

# Convert the /etc/sysconfig/snort settings to something snort can
# use on the startup line.
if [ "$ALERTMODE"X = "X" ]; then
ALERTMODE=""
else
ALERTMODE="-A $ALERTMODE"
fi

if [ "$USER"X = "X" ]; then
USER="snort"
fi

if [ "$GROUP"X = "X" ]; then
GROUP="snort"
fi

if [ "$BINARY_LOG"X = "1X" ]; then
BINARY_LOG="-b"
else
BINARY_LOG=""
fi

if [ "$CONF"X = "X" ]; then
CONF="-c /etc/snort/snort.conf"
else
CONF="-c $CONF"
fi

if [ "$INTERFACE"X = "X" ]; then
INTERFACE="-i eth0"
else
INTERFACE="-i $INTERFACE"
fi

if [ "$DUMP_APP"X = "1X" ]; then
DUMP_APP="-d"
else
DUMP_APP=""
fi

if [ "$NO_PACKET_LOG"X = "1X" ]; then
NO_PACKET_LOG="-N"
else
NO_PACKET_LOG=""
fi

if [ "$PRINT_INTERFACE"X = "1X" ]; then
PRINT_INTERFACE="-I"
else
PRINT_INTERFACE=""
fi

if [ "$PASS_FIRST"X = "1X" ]; then
PASS_FIRST="-o"
else
PASS_FIRST=""
fi

if [ "$LOGDIR"X = "X" ]; then
LOGDIR=/var/log/snort
fi

# These are used by the 'stats' option
if [ "$SYSLOG"X = "X" ]; then
SYSLOG=/var/log/messages
fi

if [ "$SECS"X = "X" ]; then
SECS=5
fi

if [ ! "$BPFFILE"X = "X" ]; then
BPFFILE="-F $BPFFILE"
fi

######################################
# Now to the real heart of the matter:

# See how we were called.
case "$1" in
start)
echo -n "Starting snort: "
cd $LOGDIR
if [ "$INTERFACE" = "-i ALL" ]; then
for i in `cat /proc/net/dev|grep eth|awk -F ":" '{ print $1; }'`
do
mkdir -p "$LOGDIR/$i"
chown -R $USER:$GROUP $LOGDIR
/usr/sbin/snort $ALERTMODE $BINARY_LOG $NO_PACKET_LOG $DUMP_APP -D $PRINT_INTERFACE -i $i -u $USER -g $GROUP $CONF -l $LOGDIR/$i $PASS_FIRST $BPFFILE $BPF
done
else
for i in `echo $INTERFACE | sed s/"-i "//`
do
mkdir -p "$LOGDIR/$i"
chown -R $USER:$GROUP $LOGDIR
/usr/sbin/snort $ALERTMODE $BINARY_LOG $NO_PACKET_LOG $DUMP_APP -D $PRINT_INTERFACE -i $i -u $USER -g $GROUP $CONF -l $LOGDIR/$i $PASS_FIRST $BPFFILE $BPF
done
fi
touch /var/lock/snort
echo
 ;;
stop)
echo -n "Stopping snort: "
killall snort
rm -f /var/lock/snort
echo
 ;;
reload)
echo "Sorry, not implemented yet"
 ;;
restart)
$0 stop
$0 start
 ;;
condrestart)
[ -e /var/lock/snort ] && $0 restart
 ;;
status)
status snort
 ;;
stats)
TC=125 # Trailing context to grep
SNORTNAME='snort' # Process name to look for

if [ ! -x "/sbin/pidof" ]; then
echo "/sbin/pidof not present, sorry, I cannot go on like this!"
exit 1
fi

#Grab Snort's PID
PID=`pidof -o $$ -o $PPID -o %PPID -x ${SNORTNAME}`

if [ ! -n "$PID" ]; then # if we got no PID then:
echo "No PID found: ${SNORTNAME} must not running."
exit 2
fi

echo ""
echo "*******"
echo "WARNING: This feature is EXPERIMENTAL - please report errors!"
echo "*******"
echo ""
echo "You can also run: $0 stats [long | opt]"
echo ""
echo "Dumping ${SNORTNAME}'s ($PID) statistics"
echo "please wait..."

# Get the date and tell Snort to dump stats as close together in
# time as possible--not 100%, but it seems to work.
startdate=`date '+%b %e %H:%M:%S'`

# This causes the stats to be dumped to syslog
kill -USR1 $PID

# Sleep for $SECS secs to give syslog a chance to catch up
# May need to be adjusted for slow/busy systems
sleep $SECS

if [ "$2" = "long" ]; then # Long format
egrep -B 3 -A $TC "^$startdate .* snort.*: ={79}" $SYSLOG |
grep snort.*:
elif [ "$2" = "opt" ]; then # OPTimize format
# Just show stuff useful for optimizing Snort
egrep -B 3 -A $TC "^$startdate .* snort.*: ={79}" $SYSLOG |
egrep "snort.*: Snort analyzed |snort.*: dropping|emory .aults:"
else # Default format
egrep -B 3 -A $TC "^$startdate .* snort.*: ={79}" $SYSLOG |
grep snort.*: | cut -d: -f4-
fi
 ;;
*)
echo "Usage: $0 {start|stop|reload|restart|condrestart|status|stats (long|opt)}"
exit 2
esac

exit 0

12. Lo hacemos ejecutable.  

chmod +x /etc/init.d/snortd

13. configurar servicio para que arranque al inicio:

 update-rc.d snortd defaults
 
14. Instalación y configuración de Barnyard2:

14.1  La anterior linea, output unified2: filename snort.u2, limit 128, escribe las alertas en un fichero local, con limite de 128 MB, y no directamente escribe la alerta en la base de datos. Esto es recomendable hacerlo en entornos donde snort va ha procesar gran cantidad de información, ya que snort no procesa el siguiente paquete hasta que no se ha escrito la aleta en la base de datos, proceso bastante lento, por lo que cabe la posibilidad de que se descarten paquetes. Bien pues Barnyard2 nos va ha interpretar este fichero y escribir las alertas en base de datos.
- Acceder como administrador a mysql.
mysql -h localhost -u root -p;

- Crear base de datos snort.

CREATE DATABASE snort;

- Creamos usuario snort con contraseña snort.
CREATE USER snort IDENTIFIED BY 'snort';



- Se le da permisos al usuario snort en la base de datos snort en nuestro servidor(localhost, en este caso) y salimos.



G
RANT ALL PRIVILEGES ON snort.* TO 'snort'@'localhost' IDENTIFIED BY 'snort' with grant option;

quit;
 
- Para crear las tablas necesarias en la base de datos usamos la siguiente instrucción:

 /usr/local/src/snort/snort-2.9.2.3/schemas/create_mysql

14.2 Descargaremos el paquete de barnyard2, lo compilaremos y configuraremos:
wget http://www.securixlive.com/download/barnyard2/barnyard2-1.9.tar.gz
tar zxvf barnyard2-1.9.tar.gz
cd barnyard2-1.9
./configure --with-mysql
make
checkinstall
cp etc/barnyard2.conf /usr/local/snort/etc
mkdir /var/log/barnyard2
chmod 666 /var/log/barnyard2
touch /var/log/snort/barnyard2.waldo
chown snort.snort /var/log/snort/barnyard2.waldo
nano /usr/local/snort/etc/barnyard2.conf y buscamos la linea:
- #output database: log, mysql, user=root password=test dbname=db host=localhost, la descomentamos y la sustituiremos por output database: log, mysql, user=snort password=snort dbname=snort host=localhost
15. Hacemos que barnyard se ejecute al inicio:
- Alocamos script dentro de /etc/init.d:
touch /etc/init.d/barnyard2
- Editamos el script y pegamos el siguiente contenido:
nano /etc/init.d/barnyard2
*****script*****
#!/bin/sh
#
# Init file for Barnyard2
#
#
# chkconfig: 2345 40 60
# description: Barnyard2 is an output processor for snort.
#
# processname: barnyard2
# config: /etc/sysconfig/barnyard2
# config: /etc/snort/barnyard.conf
# pidfile: /var/lock/subsys/barnyard2.pid

[ -x /usr/sbin/snort ] || exit 1
[ -r /etc/snort/snort.conf ] || exit 1

### Default variables
SYSCONFIG="/etc/default/barnyard2"

### Read configuration
[ -r "$SYSCONFIG" ] && . "$SYSCONFIG"

RETVAL=0
prog="barnyard2"
desc="Snort Output Processor"

start() {
echo -n $"Starting $desc ($prog): "
for INT in $INTERFACES; do
PIDFILE="/var/lock/barnyard2-$INT.pid"
ARCHIVEDIR="$SNORTDIR/$INT/archive"
WALDO_FILE="$SNORTDIR/$INT/barnyard2.waldo"
BARNYARD_OPTS="-D -c $CONF -d $SNORTDIR/${INT} -w $WALDO_FILE -l $SNORTDIR/${INT} -a $ARCHIVEDIR -f $LOG_FILE -X $PIDFILE $EXTRA_ARGS"
$prog $BARNYARD_OPTS
done
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/$prog
return $RETVAL
}

stop() {
echo -n $"Shutting down $desc ($prog): "
killall $prog
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/$prog
return $RETVAL
}

restart() {
stop
start
}

reload() {
echo -n $"Reloading $desc ($prog): "
killall $prog -HUP
RETVAL=$?
echo
return $RETVAL
}

case "$1" in
start)
start
 ;;
stop)
stop
 ;;
restart)
restart
 ;;
reload)
reload
 ;;
condrestart)
[ -e /var/lock/$prog ] && restart
RETVAL=$?
 ;;
status)
status $prog
RETVAL=$?
 ;;
dump)
dump
 ;;
*)
echo $"Usage: $0 {start|stop|restart|reload|condrestart|status|dump}"
RETVAL=1
esac

exit $RETVAL
- Lo hacemos ejecutable.
chmod +x /etc/init.d/baryard2

- Configurar servicio para que arranque al inicio:

update-rc.d barnyard2 defaults

- Editamos e insertamos la linea:

nano /etc/default/barnyard2 – LOG_FILE="snort.log"

16. Instalar snort report:
cd /usr/local/src/snort


tar zxvf snortreport-1.3.3.tar.gz -C /var/www/

nano /var/www/snortreport-1.3.3/srconf.php y buscamos la linea:

//Put your snort database login credentials in this section
$server = ”localhost”;
$user = “snort”;
$pass = “snort”;
$dbname = “snort”;
17. Probar snort:
service snortd restart

service baryard2 restart

/usr/local/snort/bin/snort -u snort -g snort -c /usr/local/snort/etc/snort.conf -i eth0
 - En este momento puede devolvernos un error, solución introducir comando:
ldconfig
IMPORTANTE:PONER INTERFAZ DE RED EN MODO POMISCUO.

Este apartado esta dedicado a crear reglas en SNORT, y me encontré con una documentación bastante completa que trataba sobre este aspecto, por lo que me he decidido a compartirlo > Creación reglas SNORT.







 


    jueves, 20 de septiembre de 2012

    Configurar proxy(squid) en ubuntu sever 12.04

      Configurar proxy(squid) en ubuntu sever 12.04

      Como siempre nos logeamos como root: sudo su, para a continuación instalar el servidor proxy: apt-get install squid3.

      Tras instalar squid y todas sus dependencias, procedemos a configurar squid, lo cual se hace en /etc/squid3/squid.conf :
      Primero hacemos un backup del squid.conf:
    cp /etc/squid3/squid.conf squid.conf.bak 
     
    Borramos el viejo archivo de configuración:

    rm /etc/squid3/squid.conf

    Creamos de nuevo el archivo configuración:

    touch /etc/squid3/squid.conf
    Editamos el archivo configuración y procedemos a especificarle los parámetros:

    #especifico el puerto usado por el proxy y la ip del servidor, para que solo el pueda acceder a internet dentro de la LAN

    http port 192.168.1.1:8080


    # le damos acceso a toda la LAN

    acl MYLAN 192.168.1.1/100

    #ahora bloquearemos dominio/s destino

    • primero se crean listas de control

    acl no_permitido dstdomain www.hotmail.com
    acl localhost src 127.0.0.1

    #bloqueamos la lista de control no_permitido, a todos excepto al localhost

     http_access deny no_permitido1 !localhost

    #también nos puede interesar el bloqueo de paginas por palabras clave

    #primeo creamos la lista de control

    acl blockword url_regex "/etc/squid3/blockword"

    #para más tarde bloquearla

    http_access deny blockword


    • Siendo el contenido del fichero blockword:

    windows
    microsoft

    #para que squid envié un correo al administrador

    cache_mgr proxy@squid.com (mailto:proxy@squid.com)

    #por ultimo, par acelerar el funcionamiento de nuestro proxy

    httpd_accel_host virtual
    httpd_accel_port o
    httpd_accel_with_proxy on 

    Quedando el /etc/squid3/squid.conf, de la siguiente manera:

    visible_hostname antonio-laptop
    http_port 8080
    acl LAN src 172.16.187.128/199
    acl no_permitido1 dstdomain www.hotmail.com
    acl localhost src 127.0.0.1
    http_access deny no_permitido1 !localhost
    acl blockword url_regex "/etc/squid3/blockword"
    http_access deny blockword
    cache_mgr squid
    @proxy.com
    httpd_accel_host virtual
    httpd_accel_port o
    httpd_accel_with_proxy on

    Y por último sólo nos quedará configurar el navegador web de los diferentes clientes de la siguiente forma:
    configuración navegador

    martes, 18 de septiembre de 2012

    Servidor de dominio con Samba en ubuntu server

    Servidor de dominio con Samba en ubuntu server (POST ACTUALIZADO)

    En respuesta a mi amigo Carlos y ahora que he terminado los exámenes de septiembre, no soy ejemplar en este y otros muchos aspectos, voy a confeccionar un pequeño tutorial de como instalar samba en un PC como servidor de dominio en Ubuntu Server:

    - Primero nos logeamos como root:

    sudo su
    • Instalamos el paquete samba.
        apt-get install samba samba-common

    - Ahora procedemos a configurar el servidor, como siempre los archivos de configuración están en /etc, en este caso en /etc/samba/smb.conf.
    • Primero hacemos una copia de seguridad del archivo de configuración
           cp /etc/samba/smb.conf /etc/samba/smb.conf.bak


      • Borramos el antiguo archivo de configuración y creamos uno con fecha actual:

           rm /etc/samba/smb.conf 
           touch /etc/samba/smb.conf


      • Editamos el archivo de configuración, nuevo, y le introducimos los siguientes parámetros:

            nano /etc/samba/sbm.conf

      #  Opciones globales
      [global]
      workgroup = MIO
      server string = Servidor Samba
      netbios name = samba
      logon script = logon.bat
      security = user
      map to guest = bad user
      dns proxy = no
      # recurso compartido
      [Compartido]
                  comment = directorio compartido
      path = /samba/compartido
      valid users = @gruposmb
      read only = No
      guest ok = Yes
      browseable =yes
      writable = yes
      #recurso netlogon
      [netlogon]
      comment = Network Logon Service
      path = /samba/netlogon
      read only = yes
      write list = root
      browseable = no


      • Creamos el directorio /samba y todas sus dependencias.

             mkdir -p /samba/compartido  
             mkdir -vp --mode 755 /samba/netlogon

      • Creamos el archivo logon “samba.bat”, donde haremos que cada vez que se haga logon un usuario le crearemos una unidad virtual:

             nano /samba/netlogon/logon.bat e insertaremos el comando,

                net use u: sambacompartido
      • Convertimos el archivo a formato DOS con CR/LF
         sed -i 's/$/r/' /samba/netlogon/logon.bat


          Si usamos windows 7, deberemos cambiar la directiva de seguridad:

      1. inicio - ejecutar - secpol.msc
      2. Directivas locales - Opciones de seguridad -  Seguridad de red: Nivel de autentificación
      3. Fijar parámetro LM y NTLM - usar seguridad de sesión NTLMV2 si se negocia

      • Ahora crearemos el  grupo “gruposmb”, el usuario windows/samba que utilizaremos para logearnos, le crearemos una contraseña:

             addgroup gruposmb 
             useradd “new user” -G  gruposmb
            smbpasswd -a “new user”

      • Por último bloquearemos la cuente linux para que no pueda acceder mediante shell.

           passwd -l “new user”

      • y reiniciamos el servicio samba:

           service smbd restart
      •  Ahora ya solo nos queda configurar los clientes.