Antes que nada, quiero dejar claro que este blog y sus autores (o sea, yo) me opongo rotundamente al pirateo, es decir, a andar por ahí con un parche en el ojo, un garfio (aunque un loro en el hombro) surcando los mares y abordando embarcaciones para quitarles su botín.
Para otras definiciones de “Piratear” que suelen andar por ahí, les comento que “Una obra ya divulgada puede ser reproducida sin autorización del autor cuando dicha reproducción se hace ‘para uso privado del copista’ y siempre que la copia no sea objeto de utilización colectiva ni lucrativa.”( http://i-barakaldo.com/yonosoyunpirata/)
En lineas generales tendría que alcanzar simplemente con instalar el programa para bajar/compartir contenidos (ver Comparación de programas Windows<->Linux e Instalar/Desinstalar programas).
Esto tendría que alcanzar para empezar, pero, faltaría un detalle que seria abrir algunos puertos para que se puedan usar la red al 100%
Como dije anteriormente, siempre es mas sencillo si usan la aplicación de configuración de su distribución de Linux. Esta guía esta apuntada a Linux en general, así que no voy a explicar como se hace usando las aplicaciones de configuración.
Para esto vamos a usar un par de utilidades que existen en la mayoría de las distribuciones que son, netstat para revisar el resultado de la configuración e iptables para setear las reglas del firewall.
Primero voy a explicar un poco como funciona IPTables, no voy a profundizar demasiado porque no viene al caso, pero sepan que es una herramienta muy potente y permite hacer mucho mas que abrir un par de puertos. IPTables permite cargar reglas sobre como tiene que manejar los paquetes que reciben las interfaces de red. IPTables no guarda una configuracion, sino que las reglas se cargan a través de un script cuando el sistema inicia, el script suele estar en /etc/init.d/ y tener un nombre como firewall o iptables.
IPTables se maneja con cadenas (chains) que pueden definirse por el usuario o estar pre-definidas. Las cadenas pre-definidas (y que nos importan) son: INPUT y OUTPUT (y puede que FORWARD).
INPUT: es la cadena que define las reglas para los paquetes que llegan a la interface.
OUTPUT: es la cadena que define las reglas para los paquetes que se generan en el equipo y salen de él.
FORWARD: es la cadena que contiene las reglas para los paquetes que se routean a través del equipo.
A su vez hay objetivos (targets) que hacen referencia a la accion que queremos que tomen las reglas, los objetivos son: ACCEPT, DROP, QUEUE, RETURN.
ACCEPT: Significa que el paquete tiene “permiso” para ser procesado.
DROP: El paquete tiene que descartarse, no tiene permisos para ser procesado y tampoco es necesario devolver un error al origen del paquete.
QUEUE: El paquete tiene que ponerse en una “cola” para procesarse, para una configuración básica esto es irrelevante.
RETURN: Termina de procesar esta cadena y continua en la siguiente, también es poco relevante para una configuración básica.
Las reglas que se cargan en IPTables se ejecutan en el orden en que se cargaron, esto quiere decir que si la primer regla es “DROP de TODOS los PAQUETES en la cadena INPUT”, la segunda regla de la cadena INPUT no se ejecutaría nunca, ya que ningún paquete pasaría la primer regla.
Ahora, a explicar un poco los comandos de este programejo:
Comandos básicos:
-A : Agrega un regla. Por ej: iptables -A INPUT …
-D : Borra una regla. Por ej: iptables -D INPUT 1 (borra la regla 1 de la cadena INPUT)
-F : Borra todas las reglas de una cadena, o de todas las cadenas si no se especifica nada. Por ej: iptables -F OUTPUT (borra todas las reglas de la cadena OUTPUT)
-P : Politica por defecto de la cadena, por ej: iptables -P INPUT DROP (dropea todos los paquetes entrantes que no coinciden con ninguna regla)
Switches:
-i : Interface de entrada, por ej: iptables -A INPUT -i eth0 …
-o : interface de salida, por ej: iptables -A OUTPUT -o lo …
-j : objetivo, por ej: iptables -A INPUT -i lo -j ACCEPT (Acepta todos los paquetes en la interface lo)
-p : protocolo, puede ser TCP o UDP, por ej: iptables -A OUTPUT -p TCP -j DROP (dropea todos los paquetes salientes, NO INTENTEN ESTO PORQUE LES VA A INUTILIZAR LA CONEXION hasta que hagan un iptables -F)
-dport : puerto de destino, acepta rangos, por ej: iptables -A INPUT -dport 6000:6999 -j ACCEPT (acepta todos los paquetes entrantes en los puertos 6000 al 6999)
-s : origen, una IP o mascara de red. Por ej: 192.168.0.0/24, también se puede preceder un signo de exclamación [!] que significa NO, entonces: !192.168.0.1 significaría cualquier IP excepto 192.168.0.1
-d : como -s pero es la IP de destino del paquete.
Bueno, con todos estos parámetros se pueden armar montones de reglas, recuerden que se tienen que armar en orden, así que suele ser una buena idea tener bien en claro como tienen que ejecutarse. También suele ser una buena idea armar un script que comience limpiando las reglas, así si hay algún problema, solo hay que modificar el script y ejecutarlo de nuevo.
Acá les dejo un ejemplo y los comentarios sobre que hace cada linea.
#/bin/sh
#Borrar todas las reglas
iptables -F#DROP a todos los paquetes entrantes por defecto
iptables -P INPUT DROP
#ACCEPT a todos los paquetes salientes por defecto
iptables -P OUTPUT ACCEPT#Permitir los paquetes entrantes de la interface eth0, protocolo TCP que accedan a
#los puertos 6881 al 6999, los puertos por defecto de BitTorrent
iptables -A INPUT -i eth0 -p TCP -dport 6881:6999 -j ACCEPT
#Como la politica por defecto de la cadena INPUT es DROP, no hay necesidad de aclarar que
#todo lo que no vaya a esos puertos se tiene que dropear#Acceso ilimitado en la interface lo (localhost)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUPUT -o lo -j ACCEPT#Descomentar la siguiente linea para permitir el acceso SSH
#iptables -A INPUT -p TCP -dport 22 -j ACCEPT
Este script lo puede guardar en /etc/init.d y crear un symlink en /etc/init.d/rc.3 para que se ejecute cada vez que se inicia el sistema. También pueden buscar si su sistema no tiene un archivo similar y modificarlo.
Para ver que puertos son necesarios habilitar, pueden usar el comando netstat.
El comando netstat muestra un listado que contiene las conexiones de red y su estado. Se puede ver que puertos están a la escucha de nuevas conexiones (abiertos), que conexiones están activas y que puerto y protocolo están usando. También se puede ver que programa esta generando la conexión.
Como todo buen comando, netstat acepta los siguientes parámetros (y algunos mas, pero con estos tendría que ser suficiente para un diagnostico básico del estado de las conexiones de nuestra PC)
-a : muestra todas las conexiones. Normalmente los sockets usados por procesos de servidor no se muestran.
-n : muestra números en vez del nombre de los puertos. Por ejemplo 21 en vez de “ftp”
-p [protocolo] : muestra solo los puertos del protocolo especificado. Por ej. netstat -p udp. En algunas distribuciones -p muestra el id de proceso del programa que abrió la conexión, en esos casos para mostrar las conexiones tcp usar -t y para las udp -u
Espero que esto cubra sus necesidades de P2P, y recuerden que siempre que puedan es conveniente usar las aplicaciones de configuración que traen las diferentes distribuciones, no solamente es mas fácil, sino que hacen las cosas de una manera mas prolija. Estas explicaciones son para cuando no hay mas opción que hacerlo a mano, ya sea porque la distribución no tiene herramientas de configuración, o queremos hacer algo que estas herramientas no permiten.


Pingback: Como usar iptables y abrir puertos en linux