Introducción
Una guía básica para asegurar el acceso a su servidor con iptables.
Requisitos
Servidor con CentOS 6.5 o anterior (estas instrucciones también podrían funcionar con otras distribuciones de Linux, aunque con ligeros cambios según la distribución; este artículo funcionará con CentOS 6.5)
Si aún no tiene un servidor, considere activar un servidor privado virtual desde Atlantic.Net
iptables instalados
Comenzando con IPTables básicos a través de la línea de comandos
Primero, verifiquemos que iptables esté instalado y activo (todos estos comandos requerirán privilegios de root, así que asegúrese de que su usuario tenga acceso a estos privilegios o, si lo prefiere, eleve a root y evite la necesidad de prefaciar todos tus comandos con 'sudo')
sudo service iptables status
estado de servicio de iptables
Para este nuevo servidor, iptables no se está ejecutando, por lo que actualmente permite la entrada de todo el tráfico. No es bueno. Arreglemos eso.
Para cubrir algunos conceptos básicos, configuraremos el comportamiento predeterminado para descartar todo el tráfico y permitir solo cierto tráfico (esta es una práctica de seguridad a menudo llamada "lista blanca"). Primero lo haremos todo en la línea de comando y luego lo configuraremos para que esas reglas sean persistentes en los reinicios.
Primero, iniciemos el servicio y luego verifiquemos qué se está ejecutando.
sudo service iptables start
sudo service iptables status
Tenga en cuenta que la política predeterminada en cada una de estas cadenas es aceptar tráfico. Cambiemos el valor predeterminado de INPUT para eliminar el tráfico. (ADVERTENCIA:asegúrese de tener al menos una regla ACCEPT en la cadena INPUT para permitir la dirección IP de su estación de trabajo o el puerto 22 si está accediendo a este servidor de forma remota a través de ssh. En la salida anterior del estado de iptables, tenga en cuenta que el tráfico TCP a se acepta el puerto 22 ("tcp dpt:22"). Si esa regla no estuviera allí, ¡podríamos quedarnos fuera de este servidor!)
sudo iptables -P INPUT DROP
El '-P ' indica que realizaremos un cambio en la política general, 'INPUT ' es la cadena particular a editar, y 'DROP ' es el objetivo de política predeterminado.
Ahora, agreguemos algunas reglas específicas.
Primero, permitiremos el acceso al tráfico HTTP y HTTPS, al que queremos acceder desde cualquier dirección IP. Al agregar reglas a iptables, es importante prestar atención al orden de esas reglas, ya que iptables analiza las reglas en orden y procesará el tráfico de acuerdo con el objetivo indicado en la regla y luego saldrá de la cadena (en la mayoría de los casos). En el resultado anterior, tenga en cuenta que la última regla rechazará el tráfico. Si agregamos una regla de permiso al final de esta cadena, nunca se invocará, ya que la regla de rechazo anterior rechazará el tráfico y dejará de procesar cualquier regla siguiente en la cadena INPUT.
Entonces, averigüemos en qué número de línea queremos insertar nuestra nueva regla:
sudo iptables -nL INPUT --line-numbers
Estado de iptables
El '-NL ‘ combina un par de banderas:‘n ‘ omite la resolución de DNS (para que podamos ver qué direcciones IP examina cada regla); 'L ‘ enumera cada regla en la cadena indicada. La última opción, '–line-numbers ‘, apropiadamente, agrega números de línea a cada entrada de regla. (Esta salida es similar a lo que podría obtener con 'estado de iptables del servicio sudo ', pero ese comando proporciona las reglas para todas las cadenas, mientras que 'iptables El comando anterior nos brinda los medios para reducir el alcance de la salida por cadena individual).
En este caso, insertaremos nuestras reglas justo encima de la regla de rechazo:
sudo iptables -I INPUT 5 -m tcp -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 6 -m tcp -p tcp --dport 443 -j ACCEPT
Lista de iptables con números de línea
¿Qué significa todo esto?
* ‘-Yo ‘ indica que insertaremos esta regla en el número de línea indicado (el número que sigue al nombre de la cadena dentro de la cual estamos insertando la regla).
* ‘-m tcp -p tcp –dport 80 ‘ especifica que esta regla coincidirá con los paquetes TCP que lleguen con un puerto de destino de 80 (o 443, en el caso de la segunda regla).
* '-j ACEPTAR ' indica que, si esta regla coincide, entonces "salta" este paquete al destino ACCEPT (que es la forma larga de decir que está permitido).
Tenga en cuenta que una vez que ingresamos el primer comando, la regla de rechazo se desplazaría hasta la línea número 6, por eso la segunda regla se inserta en la línea número 6.
Ahora, agreguemos una regla para permitir el acceso desde una IP en particular, independientemente del tipo de tráfico o puerto.
sudo iptables -I INPUT 4 -s 192.168.0.1 -j ACCEPT
Aquí estamos insertando esta regla justo encima de la regla que permite todo el tráfico ssh en la línea 4. La '-s ' especifica la IP de origen. Podríamos haber permitido fácilmente un rango de IP de origen utilizando la notación CIDR también, para permitir todo el rango 192.168.0.0/24:
sudo iptables -I INPUT 4 -s 192.168.0.0/24 -j ACCEPT
Podríamos hacer esta regla más específica, digamos que solo queremos poder acceder a este servidor desde esa dirección 192.168.0.1. ¡Sigamos adelante y agreguemos un comentario!
sudo iptables -R INPUT 4 -s 192.168.0.1 -m tcp -p tcp --dport 22 -j ACCEPT -m comment --comment "Only home workstation can ssh in"
Primero, dado que esta regla reemplazará a la anterior, tenga en cuenta el '-R '-esto significa 'reemplazar' en el número de línea indicado en lugar de insertar. Esta regla combina la verificación de la IP de origen y el puerto de destino, por lo que para permitir el tráfico, tendremos que hacer coincidir ambos. La opción de coincidencia final para el comentario es opcional, pero puede ser muy útil cuando se enumeran las reglas de iptables para indicar brevemente por qué se aplica esa regla, lo que puede ser muy útil cuando las reglas de iptables se involucran más o cuando hay reglas que no son válidas. no es inmediatamente evidente cuando se enumera (como el de la interfaz de bucle invertido, para el que agregué el comentario anteriormente).
Podríamos, en este punto, eliminar la regla que permite que cualquier IP acceda a este servidor a través de ssh:
sudo iptables –D INPUT 5
(La '-D ’ especifica que se eliminará el número de línea indicado en esta cadena).
Una vez que haya terminado de agregar reglas, asegúrese de guardar:
sudo service iptables save
Esto guardará las reglas de iptables que se están ejecutando actualmente en /etc/sysconfig/iptables para que, la próxima vez que reinicie su servidor, cargue automáticamente las reglas que ingresó aquí. Si desea editar su archivo iptables con comentarios más descriptivos (o administrar un conjunto más grande e intrincado de reglas de firewall), consulte el artículo sobre Configuración básica del archivo IPTables.