<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>iptables - Soi57.net</title>
	<atom:link href="https://soi57.net/blog/tag/iptables/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>soi57.net/blog</description>
	<lastBuildDate>Tue, 08 Sep 2020 14:56:46 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7</generator>

<image>
	<url>https://soi57.net/blog/wp-content/cropped-logo_soi57.net_half_ico-32x32.jpg</url>
	<title>iptables - Soi57.net</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Acceder a servicio en ip publica mapeada a tu propia maquina con iptables</title>
		<link>https://soi57.net/blog/acceder-a-servicio-en-ip-publica-mapeada-a-tu-propia-maquina-con-iptables/</link>
					<comments>https://soi57.net/blog/acceder-a-servicio-en-ip-publica-mapeada-a-tu-propia-maquina-con-iptables/#comments</comments>
		
		<dc:creator><![CDATA[root]]></dc:creator>
		<pubDate>Thu, 31 Dec 2009 10:07:03 +0000</pubDate>
				<category><![CDATA[guias]]></category>
		<category><![CDATA[dnat]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[puertos]]></category>
		<category><![CDATA[snat]]></category>
		<guid isPermaLink="false">http://soi57.net/articles/?p=215</guid>

					<description><![CDATA[<p>La semana pasada tuve que mapear un puerto de una ip del firewall para que llegase a una máquina de una subred interna que tenía como puerta de enlace una &#8230; </p>
<p>La entrada <a href="https://soi57.net/blog/acceder-a-servicio-en-ip-publica-mapeada-a-tu-propia-maquina-con-iptables/">Acceder a servicio en ip publica mapeada a tu propia maquina con iptables</a> se publicó primero en <a href="https://soi57.net/blog">Android, administracion de sistemas y seo</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>La semana pasada tuve que <strong>mapear</strong> un puerto de una ip del <strong>firewall</strong> para que llegase a una máquina de una subred interna que tenía como puerta de enlace una <strong>ip de la subred interna</strong> del firewall.  Accediendo desde afuera de nuestra red el puerto funcionaba sin problemas haciendo la redirección con rinetd o con las siguientes reglas en <strong>iptables</strong>.</p>
<blockquote><p>
iptables -A INPUT -i INTERFAZ_PUBLICO_FIREWALL -p tcp &#8211;dport PUERTO_PUBLICO_FIREWALL -j ACCEPT<br />
iptables -A PREROUTING -i INTERFAZ_PUBLICO_FIREWALL -t nat -p tcp &#8211;dport PUERTO_PUBLICO_FIREWALL -j DNAT &#8211;to IP_SERVICIO_RED_INTERNA:PUERTO_SERVICIO_RED_INTERNA<br />
iptables -A FORWARD -i INTERFAZ_PUBLICO_FIREWALL -p tcp -d IP_SERVICIO_RED_INTERNA &#8211;dport PUERTO_SERVICIO_RED_INTERNA -j ACCEPT</p></blockquote>
<p>De esta manera todos los paquetes que vengan de Internet al <strong>puerto publico</strong> de mi <strong>firewall</strong> irán al <strong>puerto del servicio</strong> que está corriendo en la ip de la máquina de la subred interna. El problema es cuando te intentas conectar desde un host de la <strong>misma red local</strong> a la que pertenece el servidor interno (conectándote a la ip pública del firewall) . No se puede. Es un <strong>problema de enrutado</strong>: comenzaremos estudiando lo que ocurre en el caso normal. Veamos que ocurre paso a paso:</p>
<li>El paquete deja la máquina de la red interna para dirigirse a ip pública del firewall.</li>
<li>El paquete llega al cortafuegos.</li>
<li>El paquete sufre la traducción <strong>DNAT</strong> y todas las acciones necesarias se toman en consecuencia, si bien al paquete no se le efectúa ninguna traducción <strong>SNAT</strong> y mantiene la misma dirección IP de origen (es decir una ip de la red interna) </li>
<li>El paquete sale del cortafuegos y alcanza la máquina que está corriendo el servicio</li>
<p>.</p>
<li>El servidor interno intenta responder al paquete y observa en las tablas de enrutado que el<br />
   paquete viene de una máquina local de la misma red, por lo que intenta enviar el paquete<br />
   directamente a la dirección IP de origen (que a partir de ese momento se convierte en la dirección IP<br />
   de destino).</p>
<li>
<li> El paquete llega al cliente, que no sabe qué hacer puesto que el paquete devuelto no proviene del<br />
   host al que envió la petición original. Por éllo el cliente desecha el paquete y continúa esperando la<br />
   respuesta válida.</li>
<h2>Solución</h2>
<p>Una solución es hacer una traducción <strong>SNAT</strong> a todos los paquetes que entren al <strong>cortafuegos</strong> y a los que sabemos que también se les va a aplicar la traducción <strong>DNAT</strong>. Por ej., vamos a efectuar una traducción SNAT a los paquetes que entren al firewall y estén destinados a la ip interna de nuestro servicio en el puerto correspondiente, de forma que parecerá que provengan de la ip de la <strong>subred interna</strong> del <strong>firewall</strong>. Ésto forzará al servidor interno a devolver los paquetes a través del cortafuegos, que invertirá la traducción <strong>DNAT</strong> y los reenviará al cliente. </p>
<blockquote><p>
iptables -A INPUT -i INTERFAZ_PUBLICO_FIREWALL -p tcp &#8211;dport PUERTO_PUBLICO_FIREWALL -j ACCEPT<br />
iptables -t nat -A PREROUTING &#8211;dst IP_PUBLICA_FIREWALL -p tcp &#8211;dport PUERTO_PUBLICO_FIREWALL -j DNAT &#8211;to-destination IP_SERVIDOR_INTERNO:PUERTO_SERVICIO_INTERNO<br />
iptables -t nat -A POSTROUTING -p tcp &#8211;dst IP_SERVIDOR_INTERNO &#8211;dport IP_SERVICIO_INTERNO -j SNAT  &#8211;to-source IP_INTERNA_FIREWALL<br />
iptables -t nat -A OUTPUT &#8211;dst IP_PUBLICA_FIREWALL -p tcp &#8211;dport PUERTO_PUBLICO_FIREWALL -j DNAT &#8211;to-destination IP_SERVIDOR_INTERNO:PUERTO_SERVICIO_INTERNO<br />
iptables -A FORWARD -i INTERFAZ_PUBLICO_FIREWALL -p tcp -d IP_SERVIDOR_INTERNO &#8211;dport PUERTO_SERVICIO_INTERNO -j ACCEPT
</p></blockquote>
<p>No sé si lo he explicado claro y si hay alguna forma mejor de hacerlo, pero a mi me ha funcionado.</p>
<div style='text-align:left' class='yasr-auto-insert-visitor'></div><p>La entrada <a href="https://soi57.net/blog/acceder-a-servicio-en-ip-publica-mapeada-a-tu-propia-maquina-con-iptables/">Acceder a servicio en ip publica mapeada a tu propia maquina con iptables</a> se publicó primero en <a href="https://soi57.net/blog">Android, administracion de sistemas y seo</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://soi57.net/blog/acceder-a-servicio-en-ip-publica-mapeada-a-tu-propia-maquina-con-iptables/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Iptables para limitar el número de conexiones entrantes.</title>
		<link>https://soi57.net/blog/iptables-para-limitar-el-numero-de-conexiones-entrantes/</link>
					<comments>https://soi57.net/blog/iptables-para-limitar-el-numero-de-conexiones-entrantes/#comments</comments>
		
		<dc:creator><![CDATA[root]]></dc:creator>
		<pubDate>Mon, 15 Sep 2008 11:29:49 +0000</pubDate>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[filtrado paquetes]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[recent]]></category>
		<guid isPermaLink="false">http://soi57.net/articles/?p=71</guid>

					<description><![CDATA[<p>Iptables tiene módulos muy útiles que extienden sus funcionalidades .Uno de los más interesantes es el módulo recent que permite monitorizar las conexiones recientes y limitarlas a un número que &#8230; </p>
<p>La entrada <a href="https://soi57.net/blog/iptables-para-limitar-el-numero-de-conexiones-entrantes/">Iptables para limitar el número de conexiones entrantes.</a> se publicó primero en <a href="https://soi57.net/blog">Android, administracion de sistemas y seo</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Iptables</strong> tiene módulos muy útiles que extienden sus funcionalidades .Uno de los más interesantes es el <strong>módulo <em>recent</em></strong> que permite monitorizar las conexiones recientes y limitarlas a un número que decidamos.</p>
<p>Esto puede ser muy útil, si por ejemplo queremos evitar ataques de denegación de servicio, ataques por fuerza bruta,&#8230;</p>
<p>Si normalmente ves en /var/log/auth.log registros de este tipo:</p>
<p>sshd[x]: Illegal user admin from aa.bb.cc.dd<br />
sshd[x]: Illegal user test from  aa.bb.cc.dd<br />
sshd[x]: Illegal user guest from aa.bb.cc.dd</p>
<p>podrías usar algunas reglas del <em><strong>recent</strong></em> para denegar el acceso temporalmente a clientes remotos que están intentado conectarse demasiadas veces.</p>
<p>La forma de funcionar del <strong>módulo <em>recent</em></strong> es muy simple. Básicamente es añadir ips a una lista con la que posteriormente compararemos las ips de los nuevos intentos de conexión. Esto nos va a permitir limitar el número de conexiones, por intervalo de tiempo o por número de intentos.</p>
<p>Vamos a utilizar un ejemplo para ilustrarlo. Las siguientes 2 reglas limitarán las conexiones entrantes al puerto 22, a no más de 3 intentos en un minuto, y todo lo demas será descartado por el <strong>firewall</strong>.</p>
<p>iptables -I INPUT -p tcp &#8211;dport 22 -i eth0 -m state &#8211;state NEW -m recent \<br />
&#8211;set<br />
iptables -I INPUT -p tcp &#8211;dport 22 -i eth0 -m state &#8211;state NEW -m recent \<br />
&#8211;update &#8211;seconds 60 &#8211;hitcount 4 -j DROP</p>
<p>El flag &#8211;state toma una lista de los posibles estados de una conexión tcp, en el ejemplo «&#8211;state NEW», hará que solo se monitoricen las conexiones con el flag de new activado.</p>
<p>El flag &#8211;set en la primera línea asegurará que la ip del host que está iniciando las conexiones se añaadirá a la <em><strong>&#8216;lista reciente</strong></em>&#8216;, donde posteriormente se comparará con las ips que se detecten en la segunda regla de nuestro ejemplo.</p>
<p>La segunda regla es donde el filtrado ocurrirá realmente. El flag &#8211;update comparará si las ips de las nuevas conexiones al puerto 22 ya existen (el parámetro &#8211;set habrá hecho que se incluyan en la<em><strong> lista reciente</strong></em>)</p>
<p>El flag &#8211;seconds establece el intervalo de tiempo en segundos. El &#8211;hitcount es el número de ocurrencias que deben haber de este tipo de paquetes, para aplicar el target de la regla.</p>
<p>La segunda regla hará un drop de una conexión entrante si:</p>
<p>&#8211; la ip que inicia la conexión ya está en la lista reciente,<br />
&#8211; la ip ha mandado algún paquete en los últimos 60 segundos,<br />
&#8211; esta ip ha mandado mas de 4 paquetes en total.</p>
<p>Ya sólo tienes que jugar con los parámetros para ajustarlo al servicio que quieras proteger, ya sea ssh, ftp, web,&#8230;<br />
Con netcat puedes simular intentos de conexión. Aquí va un ejemplo:</p>
<p>#!/bin/bash</p>
<p>for i in `seq 1 5` ; do<br />
echo &#8216;exit&#8217; | nc 192.168.1.1 22 ;<br />
done</p>
<p>Si vas a hacer pruebas deberias flushear reglas y tablas:</p>
<p>iptables -F<br />
iptables -X</p>
<p>Y por último, si no estamos seguros de los parámetros que tenemos que definir para filtrar el tráfico, loguear los paquetes y analizarlos,y asi no interferir en el funcionamiento de los clientes del servicio.</p>
<div style='text-align:left' class='yasr-auto-insert-visitor'></div><p>La entrada <a href="https://soi57.net/blog/iptables-para-limitar-el-numero-de-conexiones-entrantes/">Iptables para limitar el número de conexiones entrantes.</a> se publicó primero en <a href="https://soi57.net/blog">Android, administracion de sistemas y seo</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://soi57.net/blog/iptables-para-limitar-el-numero-de-conexiones-entrantes/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
