Bueno como veo que muchos se estan animando a instalar y probar linux (tux rulz) se me ocurrio el hacer una mini guia sobre como poner un pokito de seguridad en su pc aprovechando algunas herramientas k nos ofrece nuestro propio kernel.
Asi k aki explicare algunas reglas y una forma facil de configurar un firewall para Linux usando iptables.
Bueno iptables viene siendo una aplicación de nuestro propio kernel (apartir del 2.4.x antes se llamaba ipchains 2.2.x) y nos sirve para administrar el filtrado de packetitos que entran y salen de nuestro sistema, ahora bueno todos saben bien lo k es un firewall asi que empezaremos ha hacer uno para nuestra pc.
Lo primero que vamos a hacer es irnos a nuestro kernel y ha activar los modulitos que necesitemos haciendo un make config ahí tenemos que activar los siguientes modulos:
CONFIG_PACKET
CONFIG_NETFILTER
CONFIG_IP_NF_CONNTRACK
CONFIG_IP_NF_FTP
CONFIG_IP_NF_IPTABLES
CONFIG_IP_NF_MATCH_LIMIT
CONFIG_IP_NF_MATCH_MAC
CONFIG_IP_NF_MATCH_MARK
CONFIG_IP_NF_MATCH_MULTIPORT
CONFIG_IP_NF_MATCH_TOS
CONFIG_IP_NF_MATCH_TCPMSS
CONFIG_IP_NF_MATCH_STATE
CONFIG_IP_NF_MATCH_UNCLEAN
CONFIG_IP_NF_MATCH_OWNER
CONFIG_IP_NF_FILTER
CONFIG_IP_NF_TARGET_REJECT
CONFIG_IP_NF_TARGET_MIRROR
CONFIG_IP_NF_NAT
CONFIG_IP_NF_TARGET_MASQUERADE
CONFIG_IP_NF_TARGET_REDIRECT
CONFIG_IP_NF_TARGET_LOG
CONFIG_IP_NF_TARGET_TCPMSS
CONFIG_IP_NF_COMPAT_IPFWADM
Lo ideal es cargar todos estos modulos y complilarlos en el kernel ya que muchos de estos son necesarios para el funcionamiento del script rc.firewall.
Ya hecho esto bueno y dandole un pokito de orden al asunto nos vamos a
/etc/rc.d/iptables
Ahí nos vamos para arrancar el servicio de iptables y para indicarle en que niveles de ejecución debe arrancar el servicio cuando prendamos nuestra pc.
Ahí le indicamos
chkconfig --level 235
iptables on
service iptables start
Y listo ya tenemos nuestro servicio de iptables corriendo desde k prendemos nuestra makina a nivel multiusuario sin NFS, en modo completo y en modo grafico.
Bueno ya tenemos corriendo el servicio asi que es hora que empezemos a crear nuestras reglas, lo primero que tenemos que conocer es que iptables tiene 3 tipos de tablas Filter, Nat y Mangle, por ahora utilizaremos unicamente la tabla Filter mas adelante iremos complementando la información para utilizar las otras tablas.
Ahora empezaremos conociendo la sintaxis y los principales comandos para hacer nuestras reglas de iptables.
Principales comandos:
-A lo usamos para añadir una regla.
-D lo usamos para borrar alguna regla
-R lo usamos para reemplazar alguna regla
-I lo usamos para insertar una regla en una cadena
-L lo usamos para desplegar la lista completa de reglas ( osease nos da la lista de reglas)
-F lo usamos para eliminar todas las reglas
-Z lo usamos para iniciar desde 0 los contadores de una cadena
-N lo usamos para crear una nueva cadena
-X lo usamos para eliminar una cadena
-P lo usamos para indicar la politica de alguna cadena
-E lo usamos para cambiar el nombre de una cadena
Si tienen alguna duda sobre estos comandos es simple solo ponen en su consola
Iptables –h
y se desplegara la ayuda con un pekeño glosario y sintaxis de las reglas.
Ahora veremos rapido un glosario sobre las comparaciones para ya arrancar con la creación de nuestras reglas:
-p Lo usamos para indicar el protocolo ya sean tcp, udp, icmp
-s Lo usamos para indicar la ip de origen
-d Lo usamos para indicar la ip de destino
-i Lo usamos para indicar la interfaz ( si es eth0 etc)
-f Lo usamos para indicar que hablamos de un pakete fragmentado
-j Lo usamos para indicar que hacia donde se enviara el paketito
-m Lo usamos para indicar cual sera la comparación k usaremos para la regla
Comparaciones
-- dport Lo usamos para indicar puerto de destino
-- limint Lo usamos para limitar el registro de actividad de reglas especificas.
-- state Lo usamos para indicar una regla según el estado de la conexión
INPUT Lo usamos para indicar que la regla se basa en los paketes entrantes
OUTPUT Lo usamos para indicar que la regla se basa en los paketes k salen.
DROP Lo usamos para indicar que el pakete sera eliminado
ACCEPT Lo usamos para indicar que el pakete sera admitido y pasara por el firewall
REJECT Lo usamos para indicar que se rechazara cualquier tipo de pakete
LOG Lo utilizamos para indicar que ese trafico debera de almacenarse en nuestro syslog.
SINTAXIS PARA LA CREACION DE REGLAS
iptables -tabla -[opciones] [regla] [criterio] -j [acción]
Y bueno ahora si ya tenemos mas que suficiente para iniciar con la creación de nuestro firewall lo primero que vamos a hacer sera decirle a nuestro sistema que no nos interesa recibir trafico del protocolo icmp asi evitaremos la respuesta al ping y en algunos casos nos llegamos a prevenir el barrido de puertos ya que nuestro sistema no respondera nada para crear esta regla vamos a tomar en cuenta los tipos de icmp k existen según su datagrama asi k les recomiendo k cheken esta tablita:
0 echo-reply Respuesta a eco
3 destination-unreachable Destino inaccesible
4source-quench Disminución del tráfico desde el origen
5 redirect Redirección
8 echo-request Solicitud de eco
11 time-exceeded Tiempo superado
12 parameter-problem Problema de parámetros
13 timestamp-request Solicitud de marca de tiempo
14 timestamp-reply Respuesta de marca de tiempo
15 none Solicitud de información
16 none Respuesta de información
17 address-mask-request Petición de máscara de dirección
18 address-mask-reply Respuesta de máscara de dirección
Bueno ya que chekaron los tipos de datagrama para icmp haremos la siguiente regla:
iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP
si revisamos la sintaxis de esta regal veremos k primero para hacer cualkier regla tenemos k indicar la palabra iptables despues al no indicar la tabla ( en este caso filter) el sistema toma por default k nos referimos a la tabla filter despues vemos la palabra INPUT donde estamos indicandole que hablamos de conexiones de entrada despues le indicamos la interfaz en este caso eth0 ( en terminos mortales le estamos diciendo a nuestro firewall k nos referimos a cualkier pakete k entre por nuestro cable o sea conexion a internet) despues le estamos indicando el protocolo en este caso estamos hablando de icmp y a la vez estamos haciendo una comparación cuando ponemos –icmp-type donde indicamos el tipo de datagrama del protocolo después le estamos indicando a nuestra regla k hacer con esos paketes en este caso lo enviamos ala basura.
Bueno ya k hicimos nuestra regla simplemente damos enter y ea ea se cargo a nuestro firewall ahora para asegurarnos k esta ahí solo tecleamos:
Iptables –L
Y nos debera salir algo como esto:
target prot opt source destination
DROP icmp -- anywhere anywhere icmp echo-request
Hasta aqui todo cool o sea como pueden ver no es tan dificil hacer reglas asi k les recomiendo k hagan una regla para cada tipo de datagrama unicamente sustituyendo el numero ya que la sintaxis sera la misma, pero bueno ahora vamos a hacer otra regla, ahora vamos a indicarle a nuestro firewall k no nos interesa el trafico k entra desde internet con direcciones reservadas como son 127.0.0.0 etc.
Asi k ahora haremos lo siguiente:
iptables -A INPUT -i eth0 –p tcp -s 10.0.0.0/8 -j LOG
primero le indicamos a nuestro firewall k debemos guarder un registro o sease un log de la actividad y trafico creado entrando de internet hacia esa ip
iptables -A INPUT -i eth0 –p tcp -s 10.0.0.0/8 -j DROP
despues le indicamos k una vez logueada esta informacion no nos interesa el trafico k genere asi k la enviamos a la basura.
Esta regla debemos aplicarla a las direcciones internas como son:
127.0.0.0/8
172.16.0.0/12
192.168.0.0/16
Y ahora algunos se preguntaran pork en unas direcciones usamos /8 y en otras otro numero bueno es simple ese numerito es el numero de bits k va a saltar y bueno esto esta basado en las tablas generalmente usadas en mascaras de red, ahí busken algo de info en google o si kedan dudas en otro post abrire una explicación breve con los valores habituales de las mascaras.
Y bueno hasta aki vamos bien si keremos ver las reglas k hemos hecho bueno ya saben k poner como anteriormente mencione.
Ahora hagamos otra regla util esta vez vamos a decirle a nuestro firewall k no keremos aceptar ningun tipo de paketes fragmentados ( o sea paletitos k son divididos en 2 o 3 pasan por nuestro sistema pero no se puede leer el header y ya dentro de nuestro sistema se ensamblan) digo nunca esta de mas una regla pork no sabemos k rayos se pueda ensamblar ya k paso a nuestro sistema asi k haremos lo siguiente:
Iptables –A INPUT –i eth0 –p all –f –j DROP
Y listo ahi estamos enviando todos los paketes fragmentados k lleguen a nuestro sistema al basurero, al poner la palabra all estamos diciendole a nuestro firewall k no importa el protocolo siempre k sea fragmentado se ira a la basura.
Y bueno antes de aturdirlos con tanta info vamos a hacer una regla mas y dejaremos un par de dias por si surgen dudas y seguiremos con reglas utiles para la creación de nuestro firewall.
Ahora haremos una regla para evitar que haya conexiones entrantes al puerto 23 en este caso telnet jaja ya saben k luego hay haxores por ahí intentando cosas raras asi k bueno la sintaxis seria la siguiente:
iptables -A INPUT -p tcp -i eth0 -m state --state NEW,ESTABLISHED,RELATED,INVALID --dport 23 -j DROP
Bueno aki la regla es muy clara ahora vamos a fijarnos en la parte donde estamos indicando el estado le estamos diciendo a nuestro firewall k no nos interesa k sea una conexion nueva, este establecida, sea relacionada o sea invalida nosotros no keremos k nada entre de fuera hacia nuestro Puerto 23 asi k todo lo k intente entrar lo enviamos a la basura.
Si alguno de uds es algo paranoico recomiendo entonces k antes haga una regla sobre el mismo puerto pero k guarde un log para asi saber k kiso conectarse por ahí.
Y bueno aki terminamos la primera parte de esta sencilla guia, si por alguna razon se ekivocaron al hacer una regla bueno solo hagan lo siguiente la eliminan y la hacen de nuevo
Iptables –L – line-numbers
aki indicamos k nos de la lista de las reglas pero enumeradas
Después damos
Iptables –D (tipo de regla ya sea INPUT o OUTPUT) [ y aki el # de la regla] damos enter y listo regla eliminada.
Espero les sea util esta mini guia y si tienen alguna duda pues a preguntar..
saludos