{"id":6953,"date":"2019-04-29T23:49:26","date_gmt":"2019-04-30T03:49:26","guid":{"rendered":"https:\/\/extassisnetwork.com\/tutoriales\/?p=6953"},"modified":"2019-05-26T19:21:50","modified_gmt":"2019-05-26T23:21:50","slug":"iptables-asegurar-ubuntu-con-firewall","status":"publish","type":"post","link":"https:\/\/extassisnetwork.com\/tutoriales\/iptables-asegurar-ubuntu-con-firewall\/","title":{"rendered":"Iptables, Asegura tu Ubuntu con un Firewall de Linux"},"content":{"rendered":"<p>Iptables es el firewall de Linux que se utiliza para supervisar el tr\u00e1fico entrante y saliente a un servidor y filtrarlo basado en reglas definidas por el usuario para evitar que cualquier persona acceda al sistema.<\/p>\n<p>Utilizando Iptables puede definir reglas que s\u00f3lo permitir\u00e1n tr\u00e1fico selectivo en su servidor.<\/p>\n<p><strong>Nota<\/strong>: Para los usuarios de RHEL \/ CentOS hay un servicio denominado firewallD que ya est\u00e1 instalado en estos sistemas operativos. Si desea utilizar Iptables, pero primero debes desactivarlo.<\/p>\n<p>Antes de comenzar con el tutorial de Iptables, necesitar\u00e1s lo siguiente:<\/p>\n<ul>\n<li>Una m\u00e1quina local con el cliente SSH instalado (revisa el tutorial\u00a0sobre c\u00f3mo usar el cliente de putty ssh)<\/li>\n<li>VPS\/Dedicado\u00a0 corriendo Ubuntu<\/li>\n<\/ul>\n<h2><span id=\"Fundamentos-de-Iptables\">Fundamentos de Iptables<\/span><\/h2>\n<p>Todos los datos se env\u00edan en forma de paquetes a trav\u00e9s de Internet. El kernel de Linux proporciona una interfaz que filtra los paquetes de tr\u00e1fico entrante y saliente usando tablas de filtros de paquetes. Iptables es una aplicaci\u00f3n de l\u00ednea de comandos y un firewall de Linux que puedes configurar, mantener e inspeccionar estas tablas. Puedes definirse varias tablas. Cada tabla puede contener m\u00faltiples cadenas. Una cadena no es m\u00e1s que un conjunto de reglas. Cada regla define qu\u00e9 hacer con el paquete si coincide con ese paquete. Cuando el paquete es emparejado, se le da un\u00a0<strong>TARGET<\/strong>. Un objetivo puede ser otra cadena que coincida con o uno de los siguientes valores especiales:<\/p>\n<ul>\n<li><strong>ACCEPT<\/strong>: Significa que el paquete podr\u00e1 pasar.<\/li>\n<li><strong>DROP<\/strong>: Significa que no se permitir\u00e1 que el paquete pase.<\/li>\n<li><strong>RETURN<\/strong>: Significa omitir la cadena actual y volver a la siguiente regla de la cadena en la que fue llamado.<\/li>\n<\/ul>\n<p>Para el alcance de este tutorial de iptables, vamos a trabajar con una de las tablas por defecto llamada filtro (filter). La tabla de filtros tiene tres cadenas (conjuntos de reglas).<\/p>\n<ul>\n<li><strong>INPUT<\/strong>\u00a0\u2013 Esta cadena se utiliza para controlar los paquetes entrantes al servidor. Puede bloquear \/ permitir conexiones basadas en puerto, protocolo o direcci\u00f3n IP de origen.<\/li>\n<li><strong>FORWARD<\/strong>\u00a0\u2013 Esta cadena se utiliza para filtrar los paquetes que entran al servidor pero que deben ser reenviados en otro lugar.<\/li>\n<li><strong>OUTPUT<\/strong>\u00a0\u2013 Esta cadena se utiliza para filtrar los paquetes que salen del servidor<\/li>\n<\/ul>\n<h2><span id=\"Paso-1-8211-Instalacion-de-Iptables-Firewall-de-Linux\">1 \u2013 Instalaci\u00f3n de Iptables Firewall de Linux<\/span><\/h2>\n<h3>1. Instalaci\u00f3n de Iptables<\/h3>\n<p>Iptables viene preinstalado en casi todas las distribuciones de Linux. Pero si no lo tienes instalado en el sistema Ubuntu \/ Debian, usa:<\/p>\n<pre>sudo apt-get update\r\nsudo apt-get install iptables\r\n<\/pre>\n<h3>2. Comprobaci\u00f3n del estado actual de los iptables<\/h3>\n<p>Con este comando, puede comprobar el estado de su configuraci\u00f3n actual de Iptables. Aqu\u00ed se utiliza la opci\u00f3n\u00a0<b>-L<\/b>\u00a0para listar todas las reglas y la opci\u00f3n\u00a0<b>-v<\/b>\u00a0es para una lista m\u00e1s tediosa. Tenga en cuenta que estas opciones\u00a0<b>distinguen entre may\u00fasculas y min\u00fasculas<\/b>.<\/p>\n<pre>\t\r\nsudo iptables -L -v<\/pre>\n<p>Ejemplo:<\/p>\n<pre>Chain INPUT (policy ACCEPT 0 packets, 0 bytes)\r\npkts bytes target     prot opt in     out     source             destination         \r\n \r\nChain FORWARD (policy ACCEPT 0 packets, 0 bytes)\r\npkts bytes target     prot opt in     out     source             destination         \r\n \r\nChain OUTPUT (policy ACCEPT 0 packets, 0 bytes)\r\npkts bytes target     prot opt in     out     source             destination<\/pre>\n<p>Esta es la salida del comando anterior. Aqu\u00ed, las tres cadenas se establecen en la pol\u00edtica\u00a0<b>ACCEPT <\/b>predeterminada. Actualmente no hay reglas para ninguna de las cadenas.<\/p>\n<p>Para hacer m\u00e1s pr\u00e1ctico este tutorial de Iptables, modificaremos la cadena\u00a0<b>INPUT<\/b>\u00a0para filtrar el tr\u00e1fico entrante.<\/p>\n<h2><span id=\"Paso-2-8211-Definicion-de-reglas-de-cadena\">2 \u2013 Definici\u00f3n de reglas de cadena<\/span><\/h2>\n<p>Definir una regla significa a\u00f1adirla a la lista (cadena). Aqu\u00ed est\u00e1 el comando Iptables formateado con opciones regulares. No tenemos que especificar todos ellos.<\/p>\n<pre>sudo iptables -A  -i  -p  -s  --dport   -j<\/pre>\n<p>Aqu\u00ed\u00a0<b>-A<\/b>\u00a0significa a\u00f1adir. La cadena se refiere a la cadena en la que queremos a\u00f1adir nuestras reglas.\u00a0<strong>Interface<\/strong>\u00a0es la interfaz de red en la que se desea filtrar el tr\u00e1fico.\u00a0<strong>Protocol<\/strong>\u00a0se refiere al protocolo de la red de los paquetes que desea filtrar. Tambi\u00e9n puede especificar el puerto, no el del puerto en el que desea filtrar el tr\u00e1fico.<\/p>\n<p>Para obtener informaci\u00f3n m\u00e1s detallada sobre el comando Iptables y sus opciones, puede consultar\u00a0<a href=\"http:\/\/ipset.netfilter.org\/iptables.man.html\" target=\"_blank\" rel=\"noopener noreferrer\">la p\u00e1gina principal de Iptables<\/a>.<\/p>\n<h3>1. Habilitar el tr\u00e1fico en localhost<\/h3>\n<p>Queremos que todas las comunicaciones entre aplicaciones y bases de datos en el servidor contin\u00faen como de costumbre.<\/p>\n<pre>sudo iptables -A INPUT -i lo -j ACCEPT<\/pre>\n<p>Ejemplo:<\/p>\n<pre>Chain INPUT (policy ACCEPT 7 packets, 488 bytes)\r\npkts bytes target     prot opt in     out     source               destination         \r\n0     0 ACCEPT     all  --  lo     any     anywhere             anywhere<\/pre>\n<p><b>-A<\/b>\u00a0se utiliza una opci\u00f3n para a\u00f1adir la regla a la cadena\u00a0<b>INPUT<\/b>, aceptar todas las conexiones en la interfaz\u00a0<b>lo<\/b>. lo significa la interfaz de loopback. Se utiliza para todas las comunicaciones en el localhost, como las comunicaciones entre una base de datos y una aplicaci\u00f3n web en la misma m\u00e1quina.<\/p>\n<h3>2. Habilitaci\u00f3n de conexiones en el puerto HTTP, SSH y SSL<\/h3>\n<p>Si queremos que nuestras conexiones regulares HTTP (puerto 80), https (puerto 443), ssh (puerto 22) contin\u00faen como de costumbre. Introduce los siguientes comandos para habilitarlos. En los comandos siguientes, hemos especificado el protocolo con la opci\u00f3n\u00a0<b>-p<\/b>\u00a0y el puerto correspondiente para cada protocolo con la opci\u00f3n -dport (puerto de destino).<\/p>\n<pre>sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT\r\nsudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT\r\nsudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT<\/pre>\n<p>Ahora se aceptar\u00e1n todas las conexiones de protocolo TCP con puertos especificados.<\/p>\n<h3>3. Filtrado de paquetes basados en la fuente<\/h3>\n<p>Si desea aceptar o rechazar paquetes basados en la direcci\u00f3n IP de origen o en el intervalo de direcciones IP, puede especificarlo con la opci\u00f3n\u00a0<b>-s<\/b>. Por ejemplo, para aceptar paquetes desde la direcci\u00f3n 192.168.1.3 \u2013<\/p>\n<pre>sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT<\/pre>\n<p>Puede eliminar paquetes de una direcci\u00f3n IP con un comando similar con la opci\u00f3n\u00a0<b>DROP<\/b>.<\/p>\n<pre>sudo iptables -A INPUT -s 192.168.1.3 -j DROP<\/pre>\n<p>Si desea eliminar paquetes de un rango de direcciones IP, debe utilizar el m\u00f3dulo\u00a0<b>Iprange<\/b>\u00a0con la opci\u00f3n\u00a0<b>-m<\/b>y especificar el intervalo de direcciones IP con\u00a0<b>-src-range.<\/b><\/p>\n<pre>sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP<\/pre>\n<h3>4. Eliminar el resto del tr\u00e1fico<\/h3>\n<p>Nota: Es importante eliminar el resto del tr\u00e1fico despu\u00e9s de definir las reglas, ya que impide el acceso no autorizado a un servidor desde otros puertos abiertos.<\/p>\n<pre>sudo iptables -A INPUT -j DROP<\/pre>\n<p>Este comando descarta todo el tr\u00e1fico entrante distinto de los puertos mencionados en los comandos anteriores. Puede comprobar su conjunto de reglas ahora con:<\/p>\n<pre>sudo iptables -L -v<\/pre>\n<h3>5. Eliminaci\u00f3n de reglas<\/h3>\n<p>Si desea eliminar todas las reglas y comenzar con una pizarra limpia, puede utilizar el comando flush.<\/p>\n<pre>\t\r\nsudo iptables -F<\/pre>\n<p>Este comando borra todas las reglas actuales. Si deseas eliminar una regla espec\u00edfica, puede hacerlo con la opci\u00f3n\u00a0<b>-D<\/b>. En primer lugar, liste todas las reglas con n\u00fameros introduciendo el comando siguiente:<\/p>\n<pre>sudo iptables -L --line-numbers<\/pre>\n<p>A continuaci\u00f3n, obtendr\u00e1 una lista de reglas con n\u00fameros.<\/p>\n<pre>Chain INPUT (policy ACCEPT)\r\nnum  target     prot opt source               destination         \r\n1    ACCEPT     all  --  192.168.0.4          anywhere            \r\n2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https\r\n3    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http\r\n4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh<\/pre>\n<p>Para eliminar una regla, especifique el n\u00famero en la lista y la cadena de la regla. En nuestro caso, la cadena\u00a0<b>INPUT<\/b>\u00a0y el n\u00famero\u00a0<b>3<\/b>.<\/p>\n<pre>sudo iptables -D INPUT 3<\/pre>\n<h2>3 \u2013 Cambios persistentes<\/h2>\n<p>Las reglas de Iptables que hemos creado se guardan en la memoria. Eso significa que tenemos que redefinirlos en el reinicio. Para que estos cambios sean persistentes despu\u00e9s del reinicio, utilice el siguiente comando en los sistemas Ubuntu \/ Debian:<\/p>\n<pre>sudo \/sbin\/iptables-save<\/pre>\n<p>Este comando guarda las reglas actuales en el archivo de configuraci\u00f3n del sistema que se utiliza para reconfigurar las tablas en el momento del reinicio. Debe ejecutar este comando cada vez que realice cambios en las reglas. Para desactivar este cortafuegos, simplemente limpie todas las reglas y haga que los cambios sean persistentes.<\/p>\n<pre>sudo iptables -F\r\nsudo \/sbin\/iptables-save<\/pre>\n<p>En este tutorial de Iptables, hemos utilizado el firewall de Iptables Linux para permitir solamente tr\u00e1fico en puertos espec\u00edficos. Tambi\u00e9n nos hemos asegurado de que nuestras reglas se guardar\u00e1n despu\u00e9s del reinicio.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Iptables es el firewall de Linux que se utiliza para supervisar el tr\u00e1fico entrante y saliente a un servidor y filtrarlo basado en reglas definidas por el usuario para evitar que cualquier persona acceda al sistema. Utilizando Iptables puede definir reglas que s\u00f3lo permitir\u00e1n tr\u00e1fico selectivo en su servidor. Nota: Para los usuarios de RHEL [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6959,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[212,183,216],"class_list":{"0":"post-6953","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-linux","8":"tag-firewall","9":"tag-iptables","10":"tag-ubuntu"},"_links":{"self":[{"href":"https:\/\/extassisnetwork.com\/tutoriales\/wp-json\/wp\/v2\/posts\/6953","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/extassisnetwork.com\/tutoriales\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/extassisnetwork.com\/tutoriales\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/extassisnetwork.com\/tutoriales\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/extassisnetwork.com\/tutoriales\/wp-json\/wp\/v2\/comments?post=6953"}],"version-history":[{"count":0,"href":"https:\/\/extassisnetwork.com\/tutoriales\/wp-json\/wp\/v2\/posts\/6953\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/extassisnetwork.com\/tutoriales\/wp-json\/wp\/v2\/media\/6959"}],"wp:attachment":[{"href":"https:\/\/extassisnetwork.com\/tutoriales\/wp-json\/wp\/v2\/media?parent=6953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/extassisnetwork.com\/tutoriales\/wp-json\/wp\/v2\/categories?post=6953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/extassisnetwork.com\/tutoriales\/wp-json\/wp\/v2\/tags?post=6953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}