Nat de linux

download Nat de linux

of 30

Transcript of Nat de linux

  • 7/26/2019 Nat de linux

    1/30

    Se puede definir el enrutamiento como la capacidad de transmitir datos entre redes

    interconectadas. Al agente encargado de realizar este encaminamiento de informacin entre

    redes se conoce como enrutador o routerpudiendo ser de tipo hardware si es un dispositivo

    fsico dedicado al encaminamiento y de tipo software en caso de ser un PC que ejecuta una

    aplicacin que realice las funciones propias del enrutamiento.

    Con el software adecuado, nuestro servidor Linux podr actuar de enrutador en nuestra red de

    manera que permitir que los equipos de la red local se conecten a Internet como si lo hicieran

    a travs de un router.

    La tecnologa empleada para permitir que los equipos de la red local se conecten a Internet a

    travs de nuestro servidor Linux se denomina NAT - Network Address Traslation (Traduccin

    de Direcciones de Red). El software NAT que se ejecuta en nuestro servidor permite, que con

    una nica direccin IP pblica en el servidor, tengan acceso a Internet el resto de PCs de la

    red.

    En los PCs de la red local se deber configurar como puerta de enlace (gateway) la direccin

    IP interna del servidor para que sea ste quien reciba y procese los paquetes provenientes de

    la red interna y con destino hacia Internet.

    Cuando desde un PC de la red local se quiere acceder a Internet, el paquete de datos se

    enviar al servidor linux ya que es la puerta de enlace. El software NAT del servidor cambiar

    en el paquete de datos la direccin IP de origen del PC de la red local por la direccin IP

    pblica del servidor y lanzar el paquete de datos hacia Internet. En una tabla interna

    almacenar el puerto de salida del paquete junto con la IP del PC de la red local con la

    finalidad de que cuando llegue la respuesta desde Internet, realizar el proceso inverso y poder

    redirigirlo hacia el PC que lanz la peticin.

    Si nuestro servidor Linux, dispone adems de servidor DHCP, la configuracin de las

    direcciones IP, la puerta de enlace y el servidor DNS de nuestros PCs, podr ser establecidaautomticamente por el servidor DHCP.

    Configuraciones establecidas automticamente por el servidor DHCP

    Una alternativa podra ser instalar en el servidor un proxy como squid, de esa forma las

    pginas accedidas por los clientes seran cacheadas en el servidor con lo cual se acelerara la

    conexin a Internet, especialmente cuando son muchos los clientes que acceden a los mismossitios. Un proxy facilita tambin el control de la conexin impidindola o restringindola a

  • 7/26/2019 Nat de linux

    2/30

    medida de nuestras necesidades. El inconveniente de compartir una conexin a Internet con un

    proxy es que trabaja a nivel de aplicacin y por tanto del protocolo de cada aplicacin (HTTP,

    FTP, SMTP, etc...). Esto obliga a configurar las aplicaciones (navegador, clientes de correo,

    clientes ftp, etc...) para que utilicen el proxy, cosa que no es necesario hacer cuando se

    dispone de un router ya que el router NAT trabaja a nivel de red TCP/IP y es totalmente

    trasparente a las aplicaciones.

    Otro servicio que se podra disponer en el servidor es un cortafuegos como iptables que

    permite filtrar qu paquetes de datos pueden entrar y qu paquetes de datos pueden salir, con

    la finalidad de controlar el acceso a Internet y ganar en seguridad frente a ataques externos.

    Ms adelante veremos una configuracin bsica de iptables que nos permitir permitir o

    denegar las conexiones a diferentes redes y puertos, as como una configuracin bsica

    de squid para poder compartir y controlar la conexin a Internet mediante el proxy.

    Situacin de partida

    En nuestro Centro Educativo hemos venido detectando problemas de saturacin de la lnea deconexin a Internet sin motivo justificado. Hemos detectado que en algn ordenador de la sala

    de profesorado y de algn departamento hay instalados programas de P2P (descarga masiva)

    y somos conscientes de que estos programas saturan el canal de salida a Internet del centro,

    adems sospechamos que el alumnado tambin utiliza este tipo de programas.

    El router ADSL est conectado a un switch y por lo tanto a travs de mltiples utilidades es fcil

    conocer su direccin IP y configurar nuestro equipo como puerta de enlace, con el consiguiente

    acceso libre a Internet y a la descarga masiva. Nos encontramos con un esquema del tipo:

    Esquema en el que los PCs tienen acceso directo al router

    Este esquema no permite controlar el trfico de red puesto que los PCs tienen acceso directo al

    router.

    Situando el servidor entre la red y el router, todo el trfico hacia Internet pasa por el servidor loque nos permitir analizarlo, generar estadsticas, filtrar accesos, instalar un proxy-cach, etc.,

  • 7/26/2019 Nat de linux

    3/30

    de forma sencilla y centralizada.

    Situamos el servidor entre la red y el router

    Activacin del enrutamiento en Linux

    Las funciones de enrutamiento mediante NAT son realizadas por el cortafuegos que analizar

    los paquetes provenientes de la red local interna cuyo destino sea Internet y los modificar

    convenientemente para que salgan hacia Internet como si fueran emitidos por el servidor. A

    partir del ncleo 2.4 de Linux, el cortafuegos empleado es iptables.

    Para posibilitar que nuestro servidor Linux sea capaz de comportarse como un router y hacer

    de puerta de enlace para los PCs de nuestra red local, ser necesario crear un script que

    configure el cortafuegos iptables para que realice NAT desde dentro de la red local hacia

    Internet.

    Creacin del script para activar enrutamiento

    Para activar el enrutamiento en un sistema Linux, tan solo basta con poner a '1' la variable

    ip_forward del sistema, es decir, basta con ejecutar desde una consola de root:

    // Activar el enrutamiento en un sistema Linux

    sudo echo "1" > /proc/sys/net/ipv4/ip_forward

    Posteriormente tendramos que configurar el filtrado para que acepte el redireccionamiento de

    paquetes desde dentro hacia fuera de nuestra red y mediante NAT permita que los PCs de la

    red interna naveguen con la direccin IP 'publica' del servidor. Supongamos que el router Linux

    tiene una tarjeta (eth0) configurada con la IP 192.168.1.2/24 y conectada al router, cuya IP es

    192.168.1.1/24, y por otro lado, tenemos otra tarjeta (eth1) configurada con la ip 10.0.0.1/8 y

    conectada al switch para dar servicio a nuestra red interna que utiliza el rango 10.0.0.0/8.

    Nuestro esquema sera como el que vemos en la siguiente figura:

  • 7/26/2019 Nat de linux

    4/30

    Router Linux

    Tendramos que indicar que se acepten todos los paquetes que son para reenviar, es decir,

    aquellos que llegan a nuestra mquina pero que no es ella la destinataria. Para ello,

    tendramos que aceptar los paquetes de tipo FORWARD, como veremos en la siguiente

    seccin. Por otro lado, tendramos que indicar que los paquetes que llegan desde nuestra red

    interna (-s 10.0.0.0/8) y que salgan por la interfaz eth0 hacia el router (-o eth0), despus de

    enrutarlos en nuestra mquina (POSTROUTING), debemos enmascararlos (MASQUERADE),

    es decir, hacer NAT. Los comandos a ejecutar seran:

    // Haciendo NAT en el servidor

    sudo iptables -A FORWARD -j ACCEPT

    sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE

    Podramos realizar un script que activara el enrutamiento y el NAT y otro para desactivarlo:

    // activar-enrutamiento.sh

    echo "1" > /proc/sys/net/ipv4/ip_forward

    iptables -A FORWARD -j ACCEPT

    iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE

    // desactivar-enrutamiento.sh

    echo "0" > /proc/sys/net/ipv4/ip_forward

    As, nuestro servidor se convertira en un router. Si todas las comunicaciones de la red pasanpor nuestro servidor, podremos tenerlas controladas, como veremos en las siguientes

    secciones.

    Crear y eliminar rutas fijas

    Cuando activamos el enrutamiento en Linux, nuestra mquina se convierte en un router

    automtico, de forma que todo lo que entre por la interfaz eth0 con destino a una red diferente

    de la definida en eth0, lo reenviar por la interfaz eth1 y de igual forma, todo lo que entre por la

    interfaz eth1 con destino a una red diferente de la definida en eth1, lo reenviar por la interfaz

    eth0. Es el funcionamiento normal de un router, enrutar todo.

    En algunos casos, puede que nos interese que ciertos paquetes salgan por una interfaz

    concreta. Por ejemplo, supongamos que en nuestra red disponemos de dos conexiones ADSL

  • 7/26/2019 Nat de linux

    5/30

    independientes, una para dar servicio de conexin a Internet al servidor (interfaz de

    produccin) y otra, para conectarnos desde nuestra casa al servidor, para realizar tareas de

    administracin (interfaz de administracin).Supongamos que la interfaz eth0 est conectada al

    router ADSL de produccin y la interfaz eth1 est conectada al router ADSL para realizar

    tareas de administracin.

    Rutas fijas

    Lo normal es que la interfaz eth0 tenga configurada como puerta de enlace la IP del router de

    conexin a Internet, pero la interfaz eth1 no debera tener configurada la puerta de enlace, paraque no exista trfico hacia Internet por dicha interfaz. Si en el ADSL de nuestra casa tenemos

    IP fija, podemos crear una ruta para que cuando la IP destino sea la IP fijade nuestra casa, los

    paquetes se enruten por eth1 en lugar de hacerlo por eth0. Ejemplo, si nuestra IP de casa es

    80.58.12.27, el comando a ejecutar ser:

    //Crear una ruta para una IP concreta

    sudo route add 80.58.12.27 eth1

    En lugar de una IP concreta, quizs nos interese crear una ruta para toda una red.

    Supongamos que queremos que cuando la IP destino sea una IP del CNICE, salga por la

    interfaz eth1. Teniendo en cuenta que el rango de IPs pblicas del CNICE es 192.144.238.0/24,

    el comando a ejecutar sera:

    //Crear una ruta para una red concreta

    sudo route add -net 193.144.238.0/24 eth1

    Si queremos eliminar una ruta, utilizaremos el parmetro 'del' seguido de la IP o la red

    destinataria. Ejecutaramos el siguiente comando:

    //Eliminar una ruta

    sudo route del -net 193.144.238.0/24

    Si queremos ver la configuracin de la tabla de rutas, debemos ejecutar el comando route sinparmetros:

  • 7/26/2019 Nat de linux

    6/30

    //Ver rutas

    sudo route

    Establecer rutas puede ser muy interesante cuando queremos dividir nuestra red en diferentes

    subredes y disponemos de un servidor con varias tarjetas de red.

  • 7/26/2019 Nat de linux

    7/30

    El cortafuegos utilizado para gestionar las conexiones en Linux es iptables. Las posibilidadesde iptables son prcticamente infinitas y un administrador que quiera sacarle el mximoprovecho, puede realizar configuraciones extremadamente complejas. Para simplificar, diremosque bsicamente, iptables permite crear reglas que analizarn los paquetes de datos queentran, salen o pasan por nuestra mquina, y en funcin de las condiciones queestablezcamos, tomaremos una decisin que normalmente ser permitir o denegar que dicho

    paquete siga su curso.

    El cortafuegos controla las comunicaciones entre la red y el exterior

    Para crear las reglas, podemos analizar muchos aspectos de los paquetes de datos. Podemosfiltrar paquetes en funcin de:

    Tipo de paquete de datos:

    Tipo INPUT: paquetes que llegan a nuestra mquina

    Tipo OUTPUT: paquetes que salen de nuestra mquina

    Tipo FORWARD: paquetes que pasan por nuestra mquina

    Interfaz por la que entran (-i = input) o salen (-o = output) los paquetes

    eth0, eth1, wlan0, ppp0, ...

    IP origen de los paquetes (-s = source)

    IP concreta, ej: 10.0.1.3

    Rango de red, ej: 10.0.1.0/8

    IP destino de los paquetes (-d = destination)

    IP concreta, ej: 10.0.1.3

    Rango de red, ej: 10.0.1.0/8

  • 7/26/2019 Nat de linux

    8/30

    Protocolo de los paquetes (-p = protocol)

    Tcp, udp, icmp...

    Hacer NAT (modificar IP origen y destino para conectar nuestra red a otra red o a

    Internet) y...

    Filtrar antes de enrutar: PREROUTING

    Filtrar despus de enrutar: POSTROUTING

    Los paquetes pueden entrar, salir o pasar

    Una forma sencilla de trabajar con iptables es permitir las comunicaciones que nos interesen y

    luego denegar el resto de las comunicaciones. Lo que se suele hacer es definir la poltica por

    defecto aceptar (ACCEPT), despus crear reglas concretas para permitir las comunicaciones

    que nos interesen y finalmente, denegar el resto de comunicaciones. Lo mejor ser crear un

    script en el que dispondremos la secuencia de reglas que queremos aplicar en nuestro sistema.

    Un ejemplo tpico podra ser el siguiente:

    #!/bin/sh

    # Script cortafuegos.sh para la configuracin de iptables

    #

    # Primero borramos todas las reglas previas que puedan existir

    iptables -F

    iptables -X

    iptables -Z

    iptables -t nat -F

    # Despus definimos que la politica por defecto sea ACEPTAR

    iptables -P INPUT ACCEPT

    iptables -P OUTPUT ACCEPTiptables -P FORWARD ACCEPT

    iptables -t nat -P PREROUTING ACCEPT

    iptables -t nat -P POSTROUTING ACCEPT

    # Para evitar errores en el sistema, debemos aceptar

    # todas las comunicaciones por la interfaz lo (localhost)

    iptables -A INPUT -i lo -j ACCEPT

    # Aceptamos las comunicaciones que nos interesan y luego denegamos el resto.

    # Ejemplo: Denegamos acceso al aula 1

    iptables -A FORWARD -s 10.0.1.0/24 -j DROP

  • 7/26/2019 Nat de linux

    9/30

    # Aceptamos SMTP, POP3 y FTP (correo electrnico y ftp)

    iptables -A FORWARD -s 10.0.0.0/8 -p tcp --dport 25 -j ACCEPT

    iptables -A FORWARD -s 10.0.0.0/8 -p tcp --dport 110 -j ACCEPT

    iptables -A FORWARD -s 10.0.0.0/8 -p tcp --dport 20 -j ACCEPT

    iptables -A FORWARD -s 10.0.0.0/8 -p tcp --dport 21 -j ACCEPT

    # HTTP y HTTPS no es necesario porque nuestro servidor ser servidor proxy

    # Dejamos comentadas las lneas, por si algn da las necesitamos

    #iptables -A FORWARD -s 10.0.0.0/8 -p tcp --dport 80 -j ACCEPT

    #iptables -A FORWARD -s 10.0.0.0/8 -p tcp --dport 443 -j ACCEPT

    # DNS no es necesario porque nuestro servidor ser servidor DNS

    # Dejamos comentadas las lneas (tcp y udp), por si algn da las necesitamos

    #iptables -A FORWARD -s 10.0.0.0/8 -p tcp --dport 53 -j ACCEPT

    #iptables -A FORWARD -s 10.0.0.0/8 -p udp --dport 53 -j ACCEPT

    # Al PC del Director le damos acceso a todo (cliente VIP)

    iptables -A FORWARD -s 10.0.0.7 -j ACCEPT

    # Denegamos resto de comunicaciones (no funcionar el p2p)

    iptables -A FORWARD -s 10.0.0.0/8 -j DROP

    # Hacemos NAT si IP origen 10.0.0.0/8 y salen por eth0

    iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE

    # Activamos el enrutamiento

    echo 1 > /proc/sys/net/ipv4/ip_forward

    # Comprobamos cmo quedan las reglas

    iptables -L -n

    En el script anterior vemos una serie de reglas que se van a ir ejecutando secuencialmente

    conformando la configuracin del cortafuegos iptables. Cuando indicamos "-A FORWARD" nos

    referimos a paquetes que van a pasar por nuestro servidor. Otras opciones son "-A INPUT" y "-

    A OUTPUT". Acto seguido ponemos las condiciones. Si ponemos "-s 10.0.0.0/8" nos referimos

    a paquetes cuya IP origen est en el rango 10.0.0.0/8. Cuando ponemos "-p tcp" nos referimos

    a paquetes que utilizan el protocolo tcp. Cuando indicamos "--dport 25" nos referimos a

    paquetes cuyo puerto de destino es el 25, es decir, protocolo SMTP (correo saliente). Si en una

    regla no ponemos la condicin -p ni la condicin --dport, significa que no nos importa el

    protocolo (cualquier protocolo) ni nos importa el puerto destino (cualquier puerto destino). Por

    ejemplo, en la regla donde damos acceso al PC del Director, no hemos indicado ni protocolo ni

    puerto, por lo que dejar pasar todos los protocolos y todos los puertos.

  • 7/26/2019 Nat de linux

    10/30

  • 7/26/2019 Nat de linux

    11/30

    Asegurando tu red con Iptables

    Proxy NAT IDS: PARTE 2Por@Jlcmux75699

    En elpost anteriorvimos la configuracin de IPTables para que funcione

    como un Firewall. Ahora podemos ver como crear esos scripts para que

    se ejecuten las reglas automticamente cuando se inicie el sistema, y

    tambin como podemos eliminar o detener esas reglas por un momento.

    Antes de hacer el script y mostrarles como va quedando, hablemos un

    poco de NAT y del concepto de lo que queremos hacer con este equipo.

    NAT y Contexto del ejemplo.

    Cuando hablamos de NAT, podemos confundir esto con enrutamiento, y

    es que ambos se encargan de conectar dos redes diferentes entre s. La

    diferencia realmente radica es que el enrutamiento se aplica para pasar

    de una red local a otra y esta otra red puede conectarse a un router y

    salir a Internet.

    Mientras que, cuando hablamos de NAT, hablamos de enrutar paquetes

    de una red local o privada a una red pblica o Internet. Esto lo hace

    enmascarando los paquetes ponindole la ip pblica con la que sale a

    Internet. Es decir, que no necesitamos un router, porque la ip pblica latiene directamente el ordenador con GNU/Linux.

    http://blog.desdelinux.net/author/jlcmux/http://blog.desdelinux.net/author/jlcmux/http://blog.desdelinux.net/author/jlcmux/http://blog.desdelinux.net/nat-iptables-asegurando-red-parte2/#commentshttp://blog.desdelinux.net/nat-iptables-asegurando-red-parte2/#commentshttp://blog.desdelinux.net/iptables-asegurando-red-parte1/http://blog.desdelinux.net/iptables-asegurando-red-parte1/http://blog.desdelinux.net/iptables-asegurando-red-parte1/http://blog.desdelinux.net/iptables-asegurando-red-parte1/http://blog.desdelinux.net/nat-iptables-asegurando-red-parte2/#commentshttp://blog.desdelinux.net/author/jlcmux/
  • 7/26/2019 Nat de linux

    12/30

    Trabajaremos esto con la consigna de que estamos usando nuestro

    Linux como un router/firewall para salir a Internet desde una red local.

    Pero aqu pueden aparecer dos escenarios.

    Que nuestro Linux est entre el router del proveedor de servicio

    y la red local.

    En este caso, entre el router y nuestro Linux habra una red, y entre el

    Linux y la red local habra otra red diferente. Esto significa que nuestro

    router no tendra que hacer NAT como tal, con un simple enrutamiento

    de trfico como lo explique enpost anteriorestara bien.

    Que nuestro Linux tenga una interfaz conectada a la red local y

    por la otra interfaz reciba directamente una ip pblica con la

    cual navega.

    Esto significa que nuestro Linux debe hacer NAT para que los paquetes

    puedan llegar a Internet.

    http://blog.desdelinux.net/iptables-asegurando-red-parte1/http://blog.desdelinux.net/iptables-asegurando-red-parte1/http://blog.desdelinux.net/iptables-asegurando-red-parte1/http://i2.wp.com/blog.desdelinux.net/wp-content/uploads/2014/10/nat.pnghttp://blog.desdelinux.net/iptables-asegurando-red-parte1/
  • 7/26/2019 Nat de linux

    13/30

    Para efectos de este pequeo laboratorio entonces, diremos que nuestro

    Linux recibe directamente una ip pblica y as poder probar los efectos

    de la NAT.

    Para hacer NAT usamos entonces la sintaxis

    iptables -t nat -A POSTROUTING -O eth1 -j MASQUERADE

    Donde eth1 es la interfaz por donde recibimos la ip pblica, osea por

    donde salimos a Internet.

    [info] se usa MASQUERADE cuando la ip es pblica pero puede variar

    con el tiempo (dinmica). En caso contrario podemos usar SNATto-

    source ip [/info]

    Creando script iptables

    Supongamos entonces que: 172.26.0.0 es nuestra red local y 81.2.3.4

    es la ip pblica con la que salimos a Internet. (es una ip esttica). Tengo

    las interfaces eth0 (Red local)

    eth1 (Red pblica).

    Consiste bsicamente en crear un script que pueda ser llamado desde

    /etc/init.d/cortafuegos (por ejemplo). y desde este script poder iniciar,

    detener o consultar el estado de nuestra configuracin, tal y como

    hacemos con cualquier demonio del sistema.

    Supongamos que mis reglas IPTABLES SON:

    #! /bin/bash

    # Firewall de mi hogar.

    # Nombre de archivo /etc/cortafuegos_on

    # By Jlcmux Twitter: @Jlcmux

  • 7/26/2019 Nat de linux

    14/30

    #

    # Poltica bsica.

    iptables -P INPOUT DROP

    iptables -P OUTPUT DROP

    iptables -P FORWARD DROP

    #

    #NAT para compartir Internet desde eth0 a eth1

    iptables -t nat -A POSTROUTING -O eth1 -j SNAT --to-source

    81.2.3.4

    #

    # Permitir conexiones entrantes iniciadas por mi

    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j

    ACCEPT

    #

    # Trafico saliente autorizado

    iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j

    ACCEPT

    iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 443 -j

    ACCEPT

    iptables -A FORWARD -i eth0 -o eth1 -p udp --dport 53 -j

    ACCEPT

    [info] No olvidemos dar permisos de ejecucin [/info]

  • 7/26/2019 Nat de linux

    15/30

    Explicacin:

    El script bsicamente hace lo siguiente:

    1. Primero restringe toda la navegacin, conexiones y trfico.

    (Polticas bsicas de Firewall)

    2. Luego crea la NAT con el destino eth1. indicando le que

    tenemos una ip pblica esttica81.2.3.4

    3. Abre los puertos necesarios para recibir los paquetes de

    conexiones iniciadas por mi.

    4. Acepta el trfico saliente de HTTP, HTTPS y DNS.

    [info] Las reglas tienen como destino el trfico FORWARD porque

    estamos usando nuestro Linux como Router, entonces las polticas se

    usan para el trfico que PASA por el Linux, osea, acta como

    intermediario. Esto significa que nuestro Linux realmente no puede

    navegar ni recibir ningn dato directamente. Solo se aplica para los

    equipos conectados a l, pero no a l mismo [/info]

    Si quisiramos usar nuestro equipo para navegar deberamos repetir laslineas y cambiar FORWARD por INPUT o OUTPUT segn el caso.

    Script anulacin.

    Ahora vamos a crear un script que anule todo lo anterior y deje el

    equipo limpio de todo esto. (Para efectos de pruebas o simplemente

    queremos apagar el firewall).

    #! /bin/bash

    # Firewall de mi hogar.

    # Nombre de archivo /etc/cortafuegos_off

    # By Jlcmux Twitter: @Jlcmux

  • 7/26/2019 Nat de linux

    16/30

    #

    #Borrando Reglas

    iptables -F

    #

    #Aplicando politicas por defecto (todo trfico aceptado)

    iptables -P INPUT ACCEPT

    iptables -P OUTPUT ACCEPT

    iptables -P FORWARD ACCEPT

    Automatizando.

    Ahora debemos crear el script dentro de /etc/init.d/ y el servicio se

    inicie automticamente y lo podamos gestionar de una manera mscmoda.

    #! /bin/bash

    # Firewall de mi hogar.

    # Nombre de archivo /etc/init.d/cortafuegos

    # By Jlcmux Twitter: @Jlcmux

    case $1 in

    start)

    /etc/cortafuegos_on

    ;;

  • 7/26/2019 Nat de linux

    17/30

    stop)

    /etc/cortafuegos_off

    ;;

    status)

    iptables -L

    ;;

    *)

    echo "Sintaxis erronea. Valido = /etc/init.d/cortafuegos

    start|stop|status

    ;;

    esacExplicacin:

    Este ltimo script lo ponemos en /etc/init.d/ con el

    nombre cortafuegos. Entonces si queremos gestionar el firewall

    podemos usar el comando /etc/init.d/cortafuegos start.De la misma

    forma lo podemos parar o ver el estado.

    Ahora vamos a editar el archivo /etc/rc.local y ponemos algo

    como:/etc/init.d/cortafuegos start para que se inicie con el sistema.

    Pues bien. Este es la segunda parte. Espero que aporte algo a todos

    ustedes. En la prxima vemos Proxy e IDS.

  • 7/26/2019 Nat de linux

    18/30

    Ejemplos de reglas IPTABLES

    Muchas de las acciones que se listan abajo requieren ejecutarsecomo usuario root. Los siguientes comandos deberan funcionar en cualquier distro

    linux moderna. Esto NO es un tutorial de como configurar iptables. Puedes ver

    un tutorialaqu.Es ms bien una referencia rpida de loscomandos ms comunes de iptables.

    #1: Mostrando el estado de nuestrofirewallTeclea el siguiente comando como root:

    iptables -L -n -v

    Ejemplos de salidas:

    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source

    destinationChain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source

    destinationChain OUTPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source

    destination

    El resultado de arriba indica que el firewall no est activo. La siguientesalida es la del firewall activado:

    Chain INPUT (policy DROP 0 packets, 0 bytes)pkts bytes target prot opt in out source

    destination0 0 DROP all -- * * 0.0.0.0/0

    0.0.0.0/0 state INVALID394 43586 ACCEPT all -- * * 0.0.0.0/0

    0.0.0.0/0 state RELATED,ESTABLISHED93 17292 ACCEPT all -- br0 * 0.0.0.0/0

    0.0.0.0/01 142 ACCEPT all -- lo * 0.0.0.0/0

    0.0.0.0/0Chain FORWARD (policy DROP 0 packets, 0 bytes)pkts bytes target prot opt in out source

    destination

    http://www.cyberciti.biz/faq/rhel-fedorta-linux-iptables-firewall-configuration-tutorial/http://www.cyberciti.biz/faq/rhel-fedorta-linux-iptables-firewall-configuration-tutorial/http://www.cyberciti.biz/faq/rhel-fedorta-linux-iptables-firewall-configuration-tutorial/http://www.cyberciti.biz/faq/rhel-fedorta-linux-iptables-firewall-configuration-tutorial/
  • 7/26/2019 Nat de linux

    19/30

    0 0 ACCEPT all -- br0 br0 0.0.0.0/00.0.0.0/0

    0 0 DROP all -- * * 0.0.0.0/00.0.0.0/0 state INVALID

    0 0 TCPMSS tcp -- * * 0.0.0.0/00.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU

    0 0 ACCEPT all --*

    * 0.0.0.0/00.0.0.0/0 state RELATED,ESTABLISHED

    0 0 wanin all -- vlan2 * 0.0.0.0/00.0.0.0/0

    0 0 wanout all -- * vlan2 0.0.0.0/00.0.0.0/0

    0 0 ACCEPT all -- br0 * 0.0.0.0/00.0.0.0/0Chain OUTPUT (policy ACCEPT 425 packets, 113K bytes)pkts bytes target prot opt in out source

    destinationChain wanin (1 references)pkts bytes target prot opt in out source

    destinationChain wanout (1 references)pkts bytes target prot opt in out source

    destination

    Donde,

    -L: Muestra las reglas. -v: Muestra informacin detallada. -n: Muestra la direccin ip y puerto en formato numrico. No

    usa DNS para resolver nombres. Esto acelera la lista.

    #1.1:Para Inspeccionar el firewall con nmero de lineas:

    iptables -n -L -v --line-numbers

    Salida:

    Chain INPUT (policy DROP)num target prot opt source destination1 DROP all -- 0.0.0.0/0 0.0.0.0/0

    state INVALID2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0state RELATED,ESTABLISHED3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/04 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0Chain FORWARD (policy DROP)num target prot opt source destination1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/02 DROP all -- 0.0.0.0/0 0.0.0.0/0state INVALID3 TCPMSS tcp -- 0.0.0.0/0 0.0.0.0/0 tcpflags:0x06/0x02 TCPMSS clamp to PMTU4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

    state RELATED,ESTABLISHED5 wanin all -- 0.0.0.0/0 0.0.0.0/0

  • 7/26/2019 Nat de linux

    20/30

    6 wanout all -- 0.0.0.0/0 0.0.0.0/07 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0Chain OUTPUT (policy ACCEPT)num target prot opt source destinationChain wanin (1 references)num target prot opt source destination

    Chain wanout(1 references

    )num target prot opt source destination

    Podemos usar los nmeros de lnea para borrar o aadir nuevasreglas al firewall.

    #1.2: Mostrar las reglas de cadena de entrada y salida:

    iptables -L INPUT -n -viptables -L OUTPUT -n -v --line-numbers

    #2: Parar / Iniciar / Reiniciar elfirewallSi usas CentOS / RHEL / Fedora linux:

    service iptables stopservice iptables startservice iptables restart

    Tambin se puede usar propio comando iptables para detenerlo yborrar todas las reglas.

    iptables -Fiptables -Xiptables -t nat -Fiptables -t nat -Xiptables -t mangle -Fiptables -t mangle -Xiptables -P INPUT ACCEPTiptables -P OUTPUT ACCEPTiptables -P FORWARD ACCEPT

    Donde:

    -F: Borra todas las reglas. -X: Borra cadenas -t table_name: Selecciona una tabla y elimina reglas -P: Establece la poltica por defecto (como DROP, REJECT o

    ACCEPT)

    #3: Borrar reglas del firewallPara mostrar los nmeros de lnea junto a otra informacin para reglas

    existentes:

  • 7/26/2019 Nat de linux

    21/30

    iptables -L INPUT -n --line-numbersiptables -L OUTPUT -n --line-numbersiptables -L OUTPUT -n --line-numbers | lessiptables -L OUTPUT -n --line-numbers | grep 202.54.1.1

    Obtendrendremos la lista de IPs. Miramos el nmero de la izquierda ylo usamos para borrarla. Por ejemplo para borrar la lnea 4:

    iptables -D INPUT 4

    O para encontrar una ip de origen y borrarla de la regla

    iptables -D INPUT -s 202.54.1.1 -j DROP

    Donde:

    -D: Elimina una o ms reglas de la cadena seleccionada.

    #4: Insertar reglas:Para insertar una o ms reglas en la cadena seleccionada como elnmero de cadena dada usamos la siguiente sintaxis. Primeroencontramos el nmero de lnea:

    iptables -L INPUT -n --line-numbers

    Salida:

    Chain INPUT (policy DROP)num target prot opt source destination1 DROP all -- 202.54.1.1 0.0.0.0/02 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0state NEW,ESTABLISHED

    Para insertar una regla entre 1 y 2;

    iptables -I INPUT 2 -s 202.54.1.2 -j DROP

    Para ver las reglas actualizadas

    iptables -L INPUT -n --line-numbers

    Salida:

    Chain INPUT(policy DROP

    )num target prot opt source destination

    1 DROP all -- 202.54.1.1 0.0.0.0/0

  • 7/26/2019 Nat de linux

    22/30

    2 DROP all -- 202.54.1.2 0.0.0.0/03 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0state NEW,ESTABLISHED

    #5: Guardar reglas

    Para guardar reglas en CentOS / RHEL / Fedora Linux:

    service iptables save

    En este ejemplo, eliminamos una ip y guardamos las reglas delfirewall:

    iptables -A INPUT -s 202.5.4.1 -j DROPservice iptables save

    Para todas las dems distros usamos:

    iptables-save > /root/my.active.firewall.rulescat /root/my.active.firewall.rules

    #6: Restaurar reglasPara restaurar reglas desde un archivo llamado/root/my.active.firewall.rules:

    iptables-restore < /root/my.active.firewall.rules

    Bajo CentOS / RHEL / Fedora Linux:

    service iptables restart

    #7: Estableces polticas de firewallpor defectoPara borrar todo el trfico:

    iptables -P INPUT DROPiptables -P OUTPUT DROPiptables -P FORWARD DROPiptables -L -v -n## you will not able to connect anywhere as all traffic is dropped ###ping cyberciti.bizwget http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.2-rc5.tar.bz2

    #7.1: Solo trfico entrante bloqueado

    Para borrar todos los paquetes entrantes / enviados pero permitir eltrfico saliente:

  • 7/26/2019 Nat de linux

    23/30

    iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT ACCEPTiptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPTiptables -L -v -n# *** now ping and wget should work *** ###

    ping cyberciti.bizwget http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.2-rc5.tar.bz2

    #8: Borrar direcciones de redprivadas en la interfaz pblicaIP Spoofing es nada ms que para detener los siguientes rangos dedirecciones IPv4 para redes privadas en sus interfaces pblicas. Lospaquetes con direcciones de origen no enrutables deben rechazarsemediante la siguiente sintaxis:

    iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROPiptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

    #9: Bloqueando una direcin IP(BLOCK IP)PAra bloquear una ip atacante llamada 1.2.3.4:

    iptables -A INPUT -s 1.2.3.4 -j DROPiptables -A INPUT -s 192.168.0.0/24 -j DROP

    #10: Bloquear peticiones entrantesde un puerto (BLOCK PORT)Para bloquear todas las solicitudes de servicio en el puerto 80:

    iptables -A INPUT -p tcp --dport 80 -j DROPiptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

    Para bloquear el puerto 80 para una ip:

    iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROPiptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP

    #11: Bloquear ips de salidaPara bloquear el trfico saliente a un host o dominio en concreto comopor ejemplo cyberciti.biz:

    host -t a cyberciti.biz

    Salida:

    cyberciti.biz has address 75.126.153.206

  • 7/26/2019 Nat de linux

    24/30

    Una vez conocida la direccin ip, bloqueamos todo el trfico salientepara dicha ip as:

    iptables -A OUTPUT -d 75.126.153.206 -j DROP

    Se puede usar una subred como la siguiente:

    iptables -A OUTPUT -d 192.168.1.0/24 -j DROPiptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP

    #11.1: Ejemplo - Bloquear el dominio facebook.com

    Primero, encontrar la direccin ip de facebook.com

    host -t a www.facebook.com

    Salida:

    www.facebook.com has address 69.171.228.40

    Buscar el CIDR para 69.171.228.40:

    whois 69.171.228.40 | grep CIDR

    Salida:

    CIDR: 69.171.224.0/19

    Para prevenir el acceso externo a facebook.com:

    iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP

    Podemos usar tambin nombres de dominio:

    iptables -A OUTPUT -p tcp -d www.facebook.com -j DROPiptables -A OUTPUT -p tcp -d facebook.com -j DROP

    De la pgina del man de iptables:

    specifying any name to be resolved with a remote query such asDNS (e.g., facebook.com is a really bad idea), a network IP address(with /mask), or a plain IP address

    #12: Log y borrar paquetes

  • 7/26/2019 Nat de linux

    25/30

    Escribe lo siguiente para aadir al log y bloquear IP spoofing en unainterfaz pblica llamada eth1

    iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOFA: "

    iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

    Por defecto el log est en el archivo /var/log/messages

    tail -f /var/log/messagesgrep --color 'IP SPOOF'/var/log/messages

    #13: Log y borrar paquetes con unnmero limitado de entradas al logEl mdulo -m limit puede limitar el nmero de entradas al log creadas

    por tiempo. Se usa para prevenir que el archivo de log se inunde. Paraaadir al log y elminar spoofing cada 5 minutos, en rfagas de 7entradas:

    iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

    #14: Aceptar o denegar trfico desdedireccin MACiptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP## *only accept traffic for TCP port # 8080 from mac 00:0F:EA:91:04:07

    * ##iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source00:0F:EA:91:04:07 -j ACCEPT

    #15: Bloquear o permitir peticionesping ICMPPara bloquear peticiones ping ICMP

    iptables -A INPUT -p icmp --icmp-type echo-request -j DROPiptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP

    Las respuestas al ping tambin se puede limitar a ciertas redes ohosts.

    iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT

    Lo siguiente solo acepta limitados tipos de peticiones ICMP:

    ### ** assumed that default INPUT policy set to DROP ** #############iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

    iptables -A INPUT -p icmp --icmp-type destination-unreachable -jACCEPTiptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT

  • 7/26/2019 Nat de linux

    26/30

    ## ** all our server to respond to pings ** ##iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

    #16: Abrir un rango de puertosiptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010

    -j ACCEPT

    #17: Abrir un rango de direcciones ip## only accept connection to tcp port 80 (Apache) if ip is between

    192.168.1.100 and 192.168.1.200 ##iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range192.168.1.100-192.168.1.200 -j ACCEPT

    ## nat example ##iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25

    #19: Bloquear o abrir puertoscomunesReplace ACCEPT with DROP to block port:## open port ssh tcp port 22 ##iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -jACCEPTiptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT

    ## open cups (printing service) udp/tcp port 631 for LAN users ##iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j

    ACCEPTiptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -jACCEPT

    ## allow time sync via NTP for lan users (open udp port 123) ##iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

    ## open tcp port 25 (smtp) for all ##iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT

    # open dns server ports for all ##iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPTiptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

    ## open http/https (Apache) server port to all ##iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPTiptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

    ## open tcp port 110 (pop3) for all ##iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT

    ## open tcp port 143 (imap) for all ##iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT

    ## open access to Samba file server for lan users only ##iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --

    dport 137 -j ACCEPT

  • 7/26/2019 Nat de linux

    27/30

    iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPTiptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPTiptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT

    ## open access to proxy server for lan users only ##iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT

    ## open access to mysql server for lan users only ##iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

    #20: Restringir el nmero deconexiones paralelas a un servidorpor direccion Ip del cliente.Se puede usar connlimit para crear algunas restricciones. Parapermitir 3 conexiones ssh por cliente:

    iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

    Establecer las peticiones HTTP a 20:

    iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP

    donde:

    connlimit-above 3: Coincide si el nmero de conexionesexistentes est por encima de 3.

    connlimit-mask 24: Grupos de hosts usando el prefijo delongitud. Para IPv4, debe ser un nmero entre 0 y 32(incluyndolos.)

    #21: HowTO: Use iptables Like a ProPara ms informacin sobre iptables, chale un vistazo al manual:

    man iptables

    Para ver la ayuda en general o de un comando especfico:

    iptables -hiptables -j DROP -h

    #21.1: Probando nuestro firewall

    Conocer si hay puertos abiertos o no:

  • 7/26/2019 Nat de linux

    28/30

    netstat -tulpn

    Es recomendable instalarse unsniffercomo tcpdupm y ngrep paraprobar la configuracin de nuestro firewall.

    ConclusinEsta entrada solo lista las reglas bsicas para los usuarios nuevos enlinux. Se pueden crear reglas ms complejas. Requiere una buenacomprensin de TCP/IP, tunning del kernel linux via sysctl.conf y unbuen conocimiento de nuestra configuracin.

    Fuente original:cyberciti

    Ms reglas cortesa de Jker

    a)a. Reestablece las reglas por defecto.

    sudo suiptables -Fiptables -t nat -Fiptables -t mangle -Fiptables -X

    IPtables -nL para ver que estan vacias

    b)b. Configura la mquina para que slo se pueda acceder desde ellaa las webs http://www.google.es y http://www.iesgoya.com y a ningunaotra.

    iptables -A OUTPUT -d http://www.google.es -j ACCEPTiptables -A OUTPUT -d http://www.iesgoya.com -j ACCEPTiptables -A OUTPUT -p tcp dport 80 -j DROP # Mas exigente > iptables-A OUTPUT -p all -j DROP

    ##como google tiene muchas IPs puede que tengamos un problema

    para ello realizamos lo siguiente antes de la regla EXIGENTE:

    iptables -I OUTPUT 1 -d 212.106.221.0/24 -j ACCEPTiptables -I OUTPUT 1 -d 173.194.0.0/16 -j ACCEPT

    MOstrar las reglas que llevamoshasta el momento:iptables -nL line-numbers

    #Si queremos borrar reglas:

    iptables -D OUTPUT 5

    https://elbauldelprogramador.com/esnifando-la-red-pruebas-de-seguridadhttps://elbauldelprogramador.com/esnifando-la-red-pruebas-de-seguridadhttps://elbauldelprogramador.com/esnifando-la-red-pruebas-de-seguridadhttp://www.cyberciti.biz/tips/linux-iptables-examples.htmlhttp://www.cyberciti.biz/tips/linux-iptables-examples.htmlhttp://www.cyberciti.biz/tips/linux-iptables-examples.htmlhttp://www.cyberciti.biz/tips/linux-iptables-examples.htmlhttps://elbauldelprogramador.com/esnifando-la-red-pruebas-de-seguridad
  • 7/26/2019 Nat de linux

    29/30

    c)c. Cierra todos los puertos bien conocidos menos los necesariospara acceder a estas dos webs.

    iptables -A OUTPUT -p TCP dport 53 -j ACCEPTiptables -A OUTPUT -p UDP dport 53 -j ACCEPT

    iptables -A OUTPUT -p TCP dport 1:1024 -j DROPiptables -A OUTPUT -p UDP dport 1:1024 -j DROP

    d)d. Investiga de qu forma podras hacer que las peticiones entrantesa tu mquina virtual al puerto 81 por http vayan mediante NAT alpuerto 80 de la mquina local (arranca WAMP para comprobar quefunciona).

    Arrancamos wamp en la maquina fisica y comprobamos queaccedemos a wamp desde localhost.

    Comprobamos que podemos acceder desde la maquina virtual y seencuentra cortado

    Miramos la IP de la maquina virtual.Ahora desde la maquina fisica intentamos acceder desde el puerto 81con la IP esa.

    Habilitamos el enrutamiento entre tarjetas de red de nuestro equipo:

    echo 1 > /proc/sys/net/ipv4/ip_forward

    #Ejecutamos las siguientes reglas

    iptables -t nat -A PREROUTING -p tcp dport 81 -j DNAT to-destination 192.168.203.200:80

    iptables -t nat -A POSTROUTING -s 192.168.203.0/24 -j MASQUERADE

    #Para ver las reglas introducidas:

    iptables -t nat -nL line-numbers

    e)e. Permite slo los mensajes entrantes desde la IP del compaerode tu mquina fsica (prueba desde otro sitio para ver si funciona).

    iptables -A INPUT -s 192.168.203.200 -j ACCEPTiptables -A INPUT -j DROP

    iptables -A FORWARD -s 192.168.203.200 -j ACCEPTiptables -A FORWARD -s -j DROP

  • 7/26/2019 Nat de linux

    30/30

    f) #Activa el log sobre todas las reglas y verifica que se anotan losmensajes.

    Insertamos en IPTABLEs las reglas para activar el log:

    iptables -I FORWARD 1 -j LOG log-prefix IPTABLESFORWARD: iptables -I INPUT 1 -j LOG log-prefix IPTABLESINPUT:

    iptables -t nat -I PREROUTING 1 -j LOG log-prefixIPTABLESPREROUTING: iptables -t nat -I POSTROUTING 1 -j LOG log-prefixIPTABLESPREROUTING:

    iptables -I OUTPUT 1 -j LOG log-prefix IPTABLESOUTPUT:

    NOTA: hay que ponerlas las primeras para que haga log antes de

    rechazarlo.

    #Ahora editamos el archivo:

    gedit /etc/rsyslog.d/50-default.conf

    #E incluimos al final:

    kern.warning /var/log/iptables.log