martes, 28 de abril de 2009

Firewall con Iptables

Pongamonos en situación antes de todo.
Tenemos el siguiente esquema:
Queremos que los equipos con direcciones 172.16.1.X tenga acceso desde internet por los servicios FTP, SSH, IMAP, POP3, HTTP y permita los ICMP.
Por el contrario los equipos con direcciones 172.16.0.X tendran solo acceso a HTTP y cualquier peticion ICMP debera se rechazada.
Para administrar el Firewall vamos ha dejar que solo se puede acceder mediante SSH si la direccion de acceso es de 172.16.0.0/16.

Suponemos que las IPs estan asignadas como viene en el esquema.

Para empezar vamos a configurar el Firewall.
NOTA: El firewall no es mas que un equipo Linux con dos tarjetas de red e IPTABLES y un servidor SSH.
Para poder permitir al Firewall que "enrute" el trafico desde la red 192.168.1.0/24 hacia 172.16.0.0/16 tendremos que poner el fichero "/proc/sys/net/ipv4/ip_forward" a 1. Esto se puede hacer escribiendo:
# echo 1 > /proc/sys/net/ipv4/ip_forward

Ahora vamos a cerrar el acceso al Firewall y dejar solo el SSH:
# iptables -P INPUT DROP
# iptables -A INPUT -s 172.16.0.0/24 -p TCP --dport 22 -j ACCEPT
# iptables -P OUTPUT DROP
# iptables -A OUTPUT -d 172.16.0.0/24 -p TCP --sport 22 -j ACCEPT

Como podeis observar la direccion usa una mascara de 24bits para evitar el acceso desde los equipos de 172.16.1.X

Ahora vamos a configurar que datos debe de pasar de una red a otra.
# iptables -P FORWARD DROP
# iptables -A INPUT -d 172.16.1.0/24 -p TCP --dport 20 -j ACCEPT
# iptables -A INPUT -d 172.16.1.0/24 -p TCP --dport 21 -j ACCEPT
# iptables -A INPUT -d 172.16.1.0/24 -p TCP --dport 22 -j ACCEPT
# iptables -A INPUT -d 172.16.1.0/24 -p TCP --dport 80 -j ACCEPT
# iptables -A INPUT -d 172.16.1.0/24 -p TCP --dport 110 -j ACCEPT
# iptables -A INPUT -d 172.16.1.0/24 -p TCP --dport 143 -j ACCEPT
# iptables -A INPUT -d 172.16.1.0/24 -p TCP --dport 220 -j ACCEPT
# iptables -A INPUT -d 172.16.1.0/24 -p TCP --dport 993 -j ACCEPT

# iptables -A INPUT -s 172.16.1.0/24 -p TCP --sport 20 -j ACCEPT
# iptables -A INPUT -s 172.16.1.0/24 -p TCP --sport 21 -j ACCEPT
# iptables -A INPUT -s 172.16.1.0/24 -p TCP --sport 22 -j ACCEPT
# iptables -A INPUT -s 172.16.1.0/24 -p TCP --sport 80 -j ACCEPT
# iptables -A INPUT -s 172.16.1.0/24 -p TCP --sport 110 -j ACCEPT
# iptables -A INPUT -s 172.16.1.0/24 -p TCP --sport 143 -j ACCEPT
# iptables -A INPUT -s 172.16.1.0/24 -p TCP --sport 220 -j ACCEPT
# iptables -A INPUT -s 172.16.1.0/24 -p TCP --sport 993 -j ACCEPT

# iptables -A INPUT -s 172.16.0.0/24 -p TCP --dport 80 -j ACCEPT
# iptables -A INPUT -d 172.16.0.0/24 -p TCP --sport 80 -j ACCEPT
# iptables -A INPUT -d 172.16.0.0/24 -p ICMP -j REJECT

domingo, 26 de abril de 2009

VLAN en Switch

Para mejorar la seguridad de una red, podemos configurar nuestro switch para que las tramas de broadcast no se vean por toda la red. Incluso no se podrian ver entre las distintas VLAN salvo que configuremos un puerto troncal donde se comuniquen todas las VLAN, por ejemplo para conectarse a internet.
Con la creación de VLAN además evitaremos la saturación de la red y en caso de hacer un maninthemiddle solo afectaria a la VLAN desde donde se haga.
Si tenemos varios switch y queremos que se en ambos se vean tendremos que poner el mismo nombre a ambas VLAN. NOTA: Esto no funciona en todos los switch.

Por defecto existe una unica VLAN, la 1, que es de adminstrador, por defecto solo se puede administrar el switch.
Para crear las VLAN podemos usar el protocolo VTP que nos permitiria crear las VLAN en todos los router, pero luego tendremos que asignar a cada puerto una red.

Para crear una VLAN:
#vlan database
(vlan)#vlan N_VLAN name NOMBRE

NOTA: Las VLAN se crean automaticamente al asignar una no existente

Para asignar una VLAN a un puerto:
(config-if)#switchport access vlan N_VLAN
o asignarlas por bloque mediante:
(config)#interface range fastEthernet SLOT/PUERTO_INI - PUERTO_FIN
(config-if-range)#switchport access vlan N_VLAN

Para ver la conguracion de las VLAN:
#show vlan

Para poder dar acceso a internet a las distintas VLAN tendriamos que hacer que el puerto que se conecta al router o al otro switch este el modo troncal. Para ello:
(config-if)#switchport mode trunk
o
(config-if)#switchport trunk allowed vlan all
o si queremos que solo algunas tengan:
(config-if)#switchport trunk allowed vlan add N_VLAN

De este ultimo modo podriamos crear distintas salidas dependiendo de la VLAN en la que este.

viernes, 24 de abril de 2009

Seguridad basica en Routers

En este post vamos a ver como poner contraseña al router para que no puede entrar quien quiera.
NOTA: Los datos que aparecen en mayusculas y verde se sustituyen por lo que indique le texto

Poner contraseña para el acceso a "enable"
(config)# enable secret CONTRASEÑA

Poner contraseña al acceso por consola
(config)# line console 0
(config-line)# password CONTRASEÑA
(config-line)# login

Bueno en este momento tenemos una unica contraseña para acceder al router, por tanto si ocurriera algo no sabriamos quien ha sido el culpable. Para evitar esto vamos ha hacer que se autentifiquen para poder acceder.
(config)#line console 0
(config-line)#login local
(config)# username USUARIO password CONTRASEÑA

En este momento cualquiera que viera el fichero de configuración veria la contraseña en texto plano, por lo que deberiamos encriptarla, para ello avilitamos el servicio de encriptación.
(config)# service password-encryption

Para aumentar un poco mas la seguridad vamos ha midificar el tiempo para hacer el loguot automatico
(config-line)#exec-timeout TIEMPO_MIN

Configurar un Syslog

El Syslog como su propio nombre indica es log (listado de eventos) del sistema.
En este post vamos a configurar un router cisco para que nos mande toda la información de los eventos del sistema hacia un servidor con que recoja esos syslog y los almacene.
Existen infinidad de programas que usan estos syslog para comprobar la seguridad de la red.

NOTA: Los datos que aparecen en mayusculas y verde se sustituyen por lo que indique le texto

Lo primero que debemos hacer es configurar el reloj del sistema para que este sincronizado y por tanto los datos del log sean fiables.

(config)# clock timezone Madrid 1
(config)# clock summer-time Madrid recurring last SUN MARCH 02:00 last SUN OCT 02:00
(config)# ntp server IP_SERVER_NTP

Configuramos el servicio de hora para que se muestre en el Syslog la hora en la que se produzco el evento.

(config)# service timestamps log datetime msec localtime show-timezone

Ahora vamos a crear un lookback para que sea esta dirección la que se añada al syslog y de este modo no nos aparezcan cada ip de cada puerto.
NOTA: La ip que vamos a usar no se usa para nada mas que para el syslog y no se enrutará ni se podrá acceder a la misma en local, es decir no se, si pusiéramos la de google en el syslog aparecería pero podríamos acceder a google del mismo modo.

(config)#interface loopback N_LOOK
(config-if)#ip address IP_LOOKBACK MASK_LOOKBACK
(config)#logging source-interface loopback N_LOOK

Configuramos para que los errores se almacenen en el buffer interno y se manden todo al servidor de syslog

(config)#logging buffered size_buffer error
(config)#logging trap debugging

Por ahora lo único que nos falta es el poner la información sobre el servidor donde tenemos la base de datos de syslog y encender el log.

(config)#logging IP_SERVER_SYSLOG
(config)#logging on

Ya tenemos configurado el router para que nos mande toda la información al servidor de syslog de nuestra red.

miércoles, 22 de abril de 2009

ACLs Basicas

A continuacion vamos a ver unas pequeñas listas de control de acceso (ACL) que nos permiten filtrar el trafico desde el Router.
Recordad que solo se puede tener una unica lista para cada interfaz y para cada flujo, uno de entrada y otro de salida.

NOTA: Sustituir "IP_SERVER" por la Ip del servidor a proteger.


ACL Para la proteccion de ataque de SubSeven
Esta lista es una lista que bloquea todos los acceso a los puertos usados por el troyano SubSeven
Para ello en el Router escribiremos:

(config)#ip access-list extended ANTI_Sub7_DDoS
(config-ext-nacl)#deny tcp any any eq 6776
(config-ext-nacl)#deny udp any any eq 6776
(config-ext-nacl)#deny tcp any any eq 6669
(config-ext-nacl)#deny udp any any eq 6669
(config-ext-nacl)#deny tcp any any eq 2222
(config-ext-nacl)#deny udp any any eq 2222
(config-ext-nacl)#deny tcp any any eq 7000
(config-ext-nacl)#deny udp any any eq 7000


ACL Para la proteccion de ataque de Trinoo
Esta lista es una lista que bloquea todos los acceso a los puertos usados por el troyano Trinoo
Para ello en el Router escribiremos:

(config)#ip access-list extended ANTI_TRINOO_DDoS
(config-ext-nacl)#deny tcp any any eq 27665
(config-ext-nacl)#deny udp any any eq 27665
(config-ext-nacl)#deny tcp any any eq 31335
(config-ext-nacl)#deny udp any any eq 31335
(config-ext-nacl)#deny tcp any any eq 27444
(config-ext-nacl)#deny udp any any eq 27444


ACL Para la proteccion de ataque tipo LAND
Esta lista es una lista que bloquea todos los acceso ip los cuales procedan y se envien desde la misma ip, de este modo protegemos contra los ataques LAND.
Para ello en el Router escribiremos:

(config)#ip access-list extended ANT_LAND
(config-ext-nacl)#deny ip host IP_SERVER host IP_SERVER


ACL Para proteccion de un servidor HTTP
Esta lista bloquea todos los acceso TCP que intenten acceder al servidor sin haber establecido una conexión previa.
Para ello en el Router escribiremos:

(config)#ip access-list extended HTTP
(config-ext-nacl)#permit tcp any host IP_SERVER eq www established


ACL Para evitar la salidas de PING

Dato que en ocasiones puede darse el caso que algun usuario del nuestro servidor de hosting tenga la intención de realizar un ataque mediante el uso de envio de mensajes ICMP hacia otro servidor, vamos a proteger el uso de estos paquetes por parte de nuestro servidor. Hay que destacar que necesitamos que cuando se envien estos mensaje hacia el servidor los responda sin problemas.
Para ello en el Router escribiremos:

(config)#ip access-list extended PING
(config-ext-nacl)#permit icmp host IP_SERVER any echo-reply


ACL Para proteccion de un servidor SSH

Esta lista bloquea todos los acceso TCP que intenten acceder al servidor por un puerto distinto al de SSH (22).
Para ello en el Router escribiremos:

(config)#ip access-list extended SSH
(config-ext-nacl)#permit tcp any host IP_SERVER eq 22