Ejemplos de reglas entrantes y salientes (SSH y HTTP) para servidores expuestos a internet.
Permitir conexiones entrantes
Cuando la política por defecto es DROP para las cadenas de entrada (INPUT) y salida (OUTPUT), por cada regla de firewall de salida (OUTPUT), es necesario especificar las siguientes dos reglas.
Permitir conexiones entrantes SSH
1. Petición de regla: Esta es la petición que llega desde el cliente al servidor para la conexión entrante.
2. Respuesta de regla: Esto es para la respuesta que sale desde el servidor hasta el cliente (para la solicitud de entrada correspondiente).
Ejemplo 1: Permitir conexión entrante SSH
Esto es para permitir la conexión SSH desde el exterior hacia el servidor.
Esto implica dos pasos. En primer lugar, tenemos que permitir nuevas conexiones SSH entrantes. Una vez que la conexión ssh entrante está permitida, también tenemos que permitir la respuesta para esa conexión ssh entrante.
En primer lugar, Permitir solicitud de conexión entrante SSH, como se muestra a continuación.
En el ejemplo anterior vemos:
iptables-A INPUT
Anexar la nueva regla a la cadena INPUT, para obtener solicitud de conexión entrante, esto siempre tiene que ser INPUT.
-i eth0
Se refiere a la interfaz de entrada. Para las conexiones entrantes, esto siempre tiene que ser '-i' y debe ser la que esta conectada a internet.
-p tcp
Esto indica que el protocolo es TCP.
--dport 22
Esto se refiere al puerto de destino para la conexión entrante. El puerto 22 es para ssh.
-m state
Esto indica el módulo coincidente (match) que se utiliza es "state"
--state NEW,ESTABLISHED
Opciones para el módulo correspondiente "state". En este ejemplo, sólo los nuevos (NEW) y establecidos (ESTABLISHED) están permitidos. La primera vez cuando una solicitud de conexión SSH es iniciada desde el cliente al servidor, se utiliza el estado nuevo (NEW). Estado ESTABLISHED se utiliza para toda petición nueva del cliente al servidor.
En este caso recomiendo mejorar la seguridad, no queremos que entre cualquiera (al menos eso yo no quiero).
Cambiando 208.67.220.220 por la ip que desea conectarse, o un rango de ips 192.168.0.0/32, o varias ips 208.67.220.220,208.67.222.222
A continuación, Permitir salir (en estado ESTABLISHED) la respuesta para la conexión SSH (para la correspondiente solicitud entrante de la conexión SSH).
En el ejemplo anterior vemos:
iptables -A OUTPUT
Añada la nueva regla a la cadena OUTPUT. Puesto que esto es para la regla de respuesta (para la solicitud de entrada correspondiente) que sale desde el servidor, este debe ser OUTPUT.
-o eth0
Se refiere al interfaz de salida. Para las conexiones salientes, esto siempre tiene que ser '-o' y debe ser la que esta conectada a internet.
-p tcp
Esto indica que el protocolo es TCP.
--sport 22
Se refiere al puerto de origen para la conexión de salida. El puerto 22 es para ssh. Desde la petición de entrada (de la regla anterior) llegó al "destino", la respuesta saliente pasará por el puerto de origen.
-m state
Esto indica el módulo coincidente (match) que se utiliza es "state"
--state ESTABLISHED
Dado que esta es una regla de respuesta, indica que la conexión sólo se establece (no acepta una nueva conexión).
Ejemplo 2 : Permitir conexión entrante HTTP
Esto es para permitir la conexión HTTP desde el exterior hacia el servidor. Es decir, puede ver su sitio web que se ejecuta en el servidor desde el exterior.
Al igual que las anteriores reglas SSH entrantes, esto también implica dos pasos. En primer lugar, tenemos que permitir nuevas conexiones HTTP entrantes. Una vez que la conexión HTTP entrante está permitida, también tenemos que permitir la respuesta para esa conexión HTTP entrante.
En primer lugar, Permitir solicitud de conexión entrante HTTP, como se muestra a continuación.
A continuación, Permitir salir (en estado ESTABLISHED) la respuesta para la conexión HTTP (para la correspondiente solicitud entrante de la conexión HTTP).
Nota: En la anterior petición HTTP y la regla de respuesta, todo es lo mismo que el ejemplo SSH, excepto el número de puerto.
Permitir conexiones salientes
Cuando la política por defecto es DROP para las cadenas de entrada (INPUT) y salida (OUTPUT), por cada regla de firewall de salida (OUTPUT), es necesario especificar los siguientes dos reglas.
1. Respuesta de regla: Esto es para la respuesta que sale desde el servidor hasta el cliente (para la solicitud de entrada correspondiente)
2. Petición de regla: Esta es la petición que llega desde el cliente al servidor para la conexión entrante.
Permitir conexiones salientes SSH
Esto es para permitir la conexión SSH desde el servidor al exterior.
Esto implica dos pasos. En primer lugar, tenemos que permitir la conexión saliente de SSH. Una vez que la conexión saliente ssh se permite, también es necesario permitir la entrada de la respuesta para esa conexión ssh saliente.
En primer lugar, Permitir la salida de conexión SSH, como se muestra a continuación.
En el ejemplo anterior vemos:
iptables -A OUTPUT
Añada la nueva regla a la cadena OUTPUT. Para obtener conexión saliente, esto siempre tiene que ser OUTPUT.
-o eth0
Se refiere al interfaz de salida. Para las conexiones salientes, esto siempre tiene que ser '-o' y debe ser la que esta conectada a internet.
-p tcp
Esto indica que el protocolo es TCP.
--dport 22
Esto se refiere al puerto de destino para la conexión saliente.
--m state
Esto indica el módulo coincidente (match) que se utiliza es "state"
--state NEW,ESTABLISHED
Opciones para el módulo correspondiente "state". En este ejemplo, sólo los nuevos (NEW) y establecidas (ESTABLISHED) están permitidos. La primera vez cuando una solicitud de conexión SSH es iniciada desde el cliente al servidor, se utiliza el estado nuevo (NEW). Estado ESTABLISHED se utiliza para toda nueva petición del cliente al servidor.
A continuación, Permitir entrar (en estado ESTABLISHED) la respuesta para la conexión SSH (para la correspondiente solicitud entrante de la conexión SSH).
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
En el ejemplo anterior vemos:
iptables -A INPUT
Anexar la nueva regla a la cadena INPUT , para obtener solicitud de conexión entrante, esto siempre tiene que ser INPUT.
-i eth0
Se refiere al interfaz de entrada. Para las conexiones entrantes, esto siempre tiene que ser '-i' y debe ser la que esta conectada a internet.
-p tcp
Esto indica que el protocolo es TCP.
--sport 22
Se refiere al puerto de origen para la conexión de entrada. Desde la petición de salida (de la regla anterior) llegó al puerto de "destino", la respuesta entrante pasará por el puerto de origen.
--m state
Esto indica el módulo coincidente (match) que se utiliza es "state"
--state ESTABLISHED
Dado que esta es una regla de respuesta, indica que la conexión sólo se establece (no acepta una nueva conexión).
Poniendo todo junto:
Vamos a crear un script reglas.sh y que hace lo siguiente:
Eliminar todas las reglas existentes
Establecer políticas por defecto
Permitir entrada SSH
Permitir entrada HTTP
Permitir salida SSH
Primero, cree reglas.sh
nano reglas.sh
A continuación, como administrador dar permisos de ejecución, ejecute reglas.sh y observamos el resultado.
Utilizando esto como base usted debe ser capaz de escribir sus propias reglas de iptables que entran y salen del cortafuegos.
Amigos espero sus comentarios, el que pueda guarde a favoritos para leer otro día cuando lo necesite.
Permitir conexiones entrantes
Cuando la política por defecto es DROP para las cadenas de entrada (INPUT) y salida (OUTPUT), por cada regla de firewall de salida (OUTPUT), es necesario especificar las siguientes dos reglas.
Permitir conexiones entrantes SSH
1. Petición de regla: Esta es la petición que llega desde el cliente al servidor para la conexión entrante.
2. Respuesta de regla: Esto es para la respuesta que sale desde el servidor hasta el cliente (para la solicitud de entrada correspondiente).
Ejemplo 1: Permitir conexión entrante SSH
Esto es para permitir la conexión SSH desde el exterior hacia el servidor.
Esto implica dos pasos. En primer lugar, tenemos que permitir nuevas conexiones SSH entrantes. Una vez que la conexión ssh entrante está permitida, también tenemos que permitir la respuesta para esa conexión ssh entrante.
En primer lugar, Permitir solicitud de conexión entrante SSH, como se muestra a continuación.
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
En el ejemplo anterior vemos:
iptables-A INPUT
Anexar la nueva regla a la cadena INPUT, para obtener solicitud de conexión entrante, esto siempre tiene que ser INPUT.
-i eth0
Se refiere a la interfaz de entrada. Para las conexiones entrantes, esto siempre tiene que ser '-i' y debe ser la que esta conectada a internet.
-p tcp
Esto indica que el protocolo es TCP.
--dport 22
Esto se refiere al puerto de destino para la conexión entrante. El puerto 22 es para ssh.
-m state
Esto indica el módulo coincidente (match) que se utiliza es "state"
--state NEW,ESTABLISHED
Opciones para el módulo correspondiente "state". En este ejemplo, sólo los nuevos (NEW) y establecidos (ESTABLISHED) están permitidos. La primera vez cuando una solicitud de conexión SSH es iniciada desde el cliente al servidor, se utiliza el estado nuevo (NEW). Estado ESTABLISHED se utiliza para toda petición nueva del cliente al servidor.
En este caso recomiendo mejorar la seguridad, no queremos que entre cualquiera (al menos eso yo no quiero).
iptables -A INPUT -i eth0 -d 208.67.220.220 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
Cambiando 208.67.220.220 por la ip que desea conectarse, o un rango de ips 192.168.0.0/32, o varias ips 208.67.220.220,208.67.222.222
A continuación, Permitir salir (en estado ESTABLISHED) la respuesta para la conexión SSH (para la correspondiente solicitud entrante de la conexión SSH).
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
En el ejemplo anterior vemos:
iptables -A OUTPUT
Añada la nueva regla a la cadena OUTPUT. Puesto que esto es para la regla de respuesta (para la solicitud de entrada correspondiente) que sale desde el servidor, este debe ser OUTPUT.
-o eth0
Se refiere al interfaz de salida. Para las conexiones salientes, esto siempre tiene que ser '-o' y debe ser la que esta conectada a internet.
-p tcp
Esto indica que el protocolo es TCP.
--sport 22
Se refiere al puerto de origen para la conexión de salida. El puerto 22 es para ssh. Desde la petición de entrada (de la regla anterior) llegó al "destino", la respuesta saliente pasará por el puerto de origen.
-m state
Esto indica el módulo coincidente (match) que se utiliza es "state"
--state ESTABLISHED
Dado que esta es una regla de respuesta, indica que la conexión sólo se establece (no acepta una nueva conexión).
Ejemplo 2 : Permitir conexión entrante HTTP
Esto es para permitir la conexión HTTP desde el exterior hacia el servidor. Es decir, puede ver su sitio web que se ejecuta en el servidor desde el exterior.
Al igual que las anteriores reglas SSH entrantes, esto también implica dos pasos. En primer lugar, tenemos que permitir nuevas conexiones HTTP entrantes. Una vez que la conexión HTTP entrante está permitida, también tenemos que permitir la respuesta para esa conexión HTTP entrante.
En primer lugar, Permitir solicitud de conexión entrante HTTP, como se muestra a continuación.
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
A continuación, Permitir salir (en estado ESTABLISHED) la respuesta para la conexión HTTP (para la correspondiente solicitud entrante de la conexión HTTP).
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Nota: En la anterior petición HTTP y la regla de respuesta, todo es lo mismo que el ejemplo SSH, excepto el número de puerto.
Permitir conexiones salientes
Cuando la política por defecto es DROP para las cadenas de entrada (INPUT) y salida (OUTPUT), por cada regla de firewall de salida (OUTPUT), es necesario especificar los siguientes dos reglas.
1. Respuesta de regla: Esto es para la respuesta que sale desde el servidor hasta el cliente (para la solicitud de entrada correspondiente)
2. Petición de regla: Esta es la petición que llega desde el cliente al servidor para la conexión entrante.
Permitir conexiones salientes SSH
Esto es para permitir la conexión SSH desde el servidor al exterior.
Esto implica dos pasos. En primer lugar, tenemos que permitir la conexión saliente de SSH. Una vez que la conexión saliente ssh se permite, también es necesario permitir la entrada de la respuesta para esa conexión ssh saliente.
En primer lugar, Permitir la salida de conexión SSH, como se muestra a continuación.
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
En el ejemplo anterior vemos:
iptables -A OUTPUT
Añada la nueva regla a la cadena OUTPUT. Para obtener conexión saliente, esto siempre tiene que ser OUTPUT.
-o eth0
Se refiere al interfaz de salida. Para las conexiones salientes, esto siempre tiene que ser '-o' y debe ser la que esta conectada a internet.
-p tcp
Esto indica que el protocolo es TCP.
--dport 22
Esto se refiere al puerto de destino para la conexión saliente.
--m state
Esto indica el módulo coincidente (match) que se utiliza es "state"
--state NEW,ESTABLISHED
Opciones para el módulo correspondiente "state". En este ejemplo, sólo los nuevos (NEW) y establecidas (ESTABLISHED) están permitidos. La primera vez cuando una solicitud de conexión SSH es iniciada desde el cliente al servidor, se utiliza el estado nuevo (NEW). Estado ESTABLISHED se utiliza para toda nueva petición del cliente al servidor.
A continuación, Permitir entrar (en estado ESTABLISHED) la respuesta para la conexión SSH (para la correspondiente solicitud entrante de la conexión SSH).
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
En el ejemplo anterior vemos:
iptables -A INPUT
Anexar la nueva regla a la cadena INPUT , para obtener solicitud de conexión entrante, esto siempre tiene que ser INPUT.
-i eth0
Se refiere al interfaz de entrada. Para las conexiones entrantes, esto siempre tiene que ser '-i' y debe ser la que esta conectada a internet.
-p tcp
Esto indica que el protocolo es TCP.
--sport 22
Se refiere al puerto de origen para la conexión de entrada. Desde la petición de salida (de la regla anterior) llegó al puerto de "destino", la respuesta entrante pasará por el puerto de origen.
--m state
Esto indica el módulo coincidente (match) que se utiliza es "state"
--state ESTABLISHED
Dado que esta es una regla de respuesta, indica que la conexión sólo se establece (no acepta una nueva conexión).
Poniendo todo junto:
Vamos a crear un script reglas.sh y que hace lo siguiente:
Eliminar todas las reglas existentes
Establecer políticas por defecto
Permitir entrada SSH
Permitir entrada HTTP
Permitir salida SSH
Primero, cree reglas.sh
nano reglas.sh
#1. Eliminar todas las reglas existentes
iptables -F
# 2. Establecer políticas por defecto
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# 3. Ejemplo 1: Permitir conexión entrante SSH
iptables -A INPUT -i eth0 -d 208.67.220.220 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
# 4. Ejemplo 2 : Permitir conexión entrante HTTP
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
# 5. Permitir conexiones salientes SSH
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
A continuación, como administrador dar permisos de ejecución, ejecute reglas.sh y observamos el resultado.
chmod u+x reglas.sh
./reglas.sh
iptables -L
Utilizando esto como base usted debe ser capaz de escribir sus propias reglas de iptables que entran y salen del cortafuegos.
Amigos espero sus comentarios, el que pueda guarde a favoritos para leer otro día cuando lo necesite.