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-seguridad7/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