LinuxParty

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

Linux trae un firewall basado en host llamado Netfilter. Según el sitio oficial del proyecto:

netfilter es un conjunto de ganchos dentro del kernel de Linux que permite a los módulos del kernel registrar las funciones de devolución de llamada con la pila de red. Una función de devolución de llamada registrada se llama de nuevo para cada paquete que atraviesa el gancho respectivo dentro de la pila de red.

Este firewall basado en Linux es controlado por el programa llamado iptables para controlar de filtrado para IPv4 e ip6tables adminitrando el filtrado para IPv6.

Ejemplo de Reglas iptables

  • La mayor parte de las acciones enumeradas en este artículo están escritos con la suposición de que serán ejecutados por el usuario root desde la bash shell  o cualquier otro shell moderna. No escriba los comandos en un sistema remoto, ya que podrá llegar a desconectar su acceso.
  • Para fines de demostración he usado RHEL 6.x, pero el siguiente comando debería funcionar con cualquier distribución Linux moderno.
  • Esto no es un tutorial sobre cómo configurar iptables. Es una hoja de trucos rápido a los comandos de iptables comunes.

# 1: Visualizar el estado del servidor de seguridad

Escriba el siguiente comando como root:

# iptables -L -n -v

Salidas de la muestra:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

La salida anterior indica que el servidor de seguridad no está activo. El siguiente ejemplo muestra un firewall activo:

# iptables -L -n -v

Salidas de la muestra:

 Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID
  394 43586 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
   93 17292 ACCEPT     all  --  br0    *       0.0.0.0/0            0.0.0.0/0
    1   142 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  br0    br0     0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID
    0     0 TCPMSS     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    0     0 wanin      all  --  vlan2  *       0.0.0.0/0            0.0.0.0/0
    0     0 wanout     all  --  *      vlan2   0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  br0    *       0.0.0.0/0            0.0.0.0/0
Chain OUTPUT (policy ACCEPT 425 packets, 113K bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain wanin (1 references)
 pkts bytes target     prot opt in     out     source               destination
Chain wanout (1 references)
 pkts bytes target     prot opt in     out     source               destination

Cuando,

  • -L.: Lista las reglas.
  • -v: Muestra información detallada. Esta opción hace que el comando de lista muestre el nombre de la interfaz, las opciones de la regla, y las máscaras TOS. Los contadores de paquetes y bytes también se enumeran, con el sufijo "K", "M" o "G" para 1000, 1.000.000 y 1.000.000.000 multiplicadores respectivamente.
  • -n: Visualiza la dirección IP y el puerto en formato numérico. No utilice DNS para resolver nombres. Esto acelerará el listado.

# 1.1: Inspeccionar firewall con números de línea, escriba:

# iptables -n -L -v --line-numbers

Salidas de la muestra:

Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    DROP       all  --  0.0.0.0/0            0.0.0.0/0           state INVALID
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
Chain FORWARD (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
2    DROP       all  --  0.0.0.0/0            0.0.0.0/0           state INVALID
3    TCPMSS     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU
4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
5    wanin      all  --  0.0.0.0/0            0.0.0.0/0
6    wanout     all  --  0.0.0.0/0            0.0.0.0/0
7    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
Chain wanin (1 references)
num  target     prot opt source               destination
Chain wanout (1 references)
num  target     prot opt source               destination

Puede utilizar los números de línea para eliminar o insertar nuevas reglas en el firewall.

# 1.2: Para mostrar las reglas de entrada o la cadena OUTPUT, escriba:

# iptables -L INPUT -n -v
# iptables -L OUTPUT -n -v --line-numbers

# 2: Parar / Iniciar / Reiniciar el Firewall

Si está utilizando CentOS / RHEL / Fedora Linux, introduzca:

# service iptables stop
# service iptables start
# service iptables restart

Puede usar el comando iptables en sí para detener el servidor de seguridad y eliminar todas las reglas:

# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -F
# iptables -t mangle -X
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEPT

Cuando,

  • -F: Elimina (flushing) todas las reglas.
  • -X: Eliminar cadena.
  • -t nombre_tabla: Seleccionar tabla (llamada nat o mangle) y borrar / limpia las reglas.
  • -P: Establecer la política por omisión (como DROP, REJECT, o ACCEPT).

# 3: Eliminar las reglas del cortafuegos

Para mostrar el número de líneas junto con otra información de las normas existentes, entre:

# iptables -L INPUT -n --line-numbers
# iptables -L OUTPUT -n --line-numbers
# iptables -L OUTPUT -n --line-numbers | less
# iptables -L OUTPUT -n --line-numbers | grep 202.54.1.1


Usted obtendrá la lista de IP. Observe el número de la izquierda, a continuación, utilice el número para eliminarlo. Por ejemplo eliminar la línea número 4, escriba:

# iptables -D INPUT 4


O encontrar IP de origen 202.54.1.1 y eliminar de regla:

# iptables -D INPUT -s 202.54.1.1 -j DROP


Cuando,

  • -D: Eliminar una o varias reglas de la cadena seleccionada

# 4: Inserte reglas del cortafuegos

Para insertar una o más reglas en la cadena seleccionado como el número de la regla dada, utilice la siguiente sintaxis. Primero averiguar los números de línea, escriba:
# iptables -L INPUT -n --line-numbers
Salidas de la muestra:

Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    DROP       all  --  202.54.1.1           0.0.0.0/0
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state NEW,ESTABLISHED 

Para insertar regla entre 1 y 2, escriba:

# iptables -I INPUT 2 -s 202.54.1.2 -j DROP


Para ver las reglas actualizadas, entre:

# iptables -L INPUT -n --line-numbers


Salidas de la muestra:

Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    DROP       all  --  202.54.1.1           0.0.0.0/0
2    DROP       all  --  202.54.1.2           0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state NEW,ESTABLISHED

# 5: Guardar las reglas del cortafuegos

Para guardar las reglas de firewall bajo CentOS / RHEL / Fedora Linux, introduzca:

# service iptables save


En este ejemplo, retirar (drop) una IP y guardar las reglas de firewall:

# iptables -A INPUT -s 202.5.4.1 -j DROP
# service iptables save


Para todas las demás distros utilizan: iptables-save:

# iptables-save > /root/my.active.firewall.rules
# cat /root/my.active.firewall.rules

# 6: Restaurar las reglas del cortafuegos

Para restaurar las reglas del cortafuegos almacenadas en un archivo llamado /root/my.active.firewall.rules, escriba:

# iptables-restore < /root/my.active.firewall.rules


Para restaurar las reglas del cortafuegos bajo CentOS / RHEL / Fedora Linux, introduzca:

# service iptables restart

# 7: establecer el valor predeterminado Políticas de Firewall

Para excluir a todo el tráfico:

# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
# iptables -L -v -n
#### you will not able to connect anywhere as all traffic is dropped ###
# ping cyberciti.biz
# wget http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.2-rc5.tar.bz2

# 7.1: Sólo Bloquear tráfico entrante

Para descartar todos los paquetes entrantes / reenviados, pero permitir el tráfico saliente, ingrese:

# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -L -v -n
### *** now ping and wget should work *** ###
# ping cyberciti.biz
# wget http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.2-rc5.tar.bz2

# 8: Suprimir direcciones privadas de red en la interfaz pública

IP spoofing es nada más que para detener a los siguientes rangos de direcciones IPv4 para redes privadas en sus interfaces públicas. Los paquetes con direcciones de origen no enrutables deben ser rechazados con la siguiente sintaxis:

# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

# 8.1: Intervalos de direcciones IPv4 para redes privadas (que asegúrese de bloquearlos en la interfaz pública)

  • 10.0.0.0/8 -j (A)
  • 172.16.0.0/12 (B)
  • 192.168.0.0/16 (C)
  • 224.0.0.0/4 (MULTICAST D)
  • 240.0.0.0/5 (E)
  • 127.0.0.0/8 (BUCLE)

# 9: El bloqueo de una dirección IP (BLOQUE IP)

Para bloquear una dirección IP atacante llamado 1.2.3.4, escriba:

# iptables -A INPUT -s 1.2.3.4 -j DROP
# iptables -A INPUT -s 192.168.0.0/24 -j DROP

# 10: Solicitudes Bloquear Puertos Entrantes (BLOCK PORT)

Para bloquear todas las solicitudes de servicio en el puerto 80, escriba:

# iptables -A INPUT -p tcp --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

Para bloquear el puerto 80 sólo para obtener una dirección IP 1.2.3.4, escriba:

# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP

# 11: bloque de direcciones IP saliente

Para bloquear el tráfico saliente a un host o dominio como cyberciti.biz, escriba:

# host -t a cyberciti.biz


Salidas de la muestra:

cyberciti.biz has address 75.126.153.206

Anote su dirección IP y escriba lo siguiente para bloquear todo el tráfico de salida a 75.126.153.206:

# iptables -A OUTPUT -d 75.126.153.206 -j DROP


Puede utilizar una subred de la siguiente manera:

# iptables -A OUTPUT -d 192.168.1.0/24 -j DROP
# iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP

# 11.1: Ejemplo - Bloquear Facebook.com dominio

En primer lugar, averiguar todas las direcciones ip de facebook.com, escriba:

# host -t a www.facebook.com


Salidas de la muestra:

www.facebook.com has address 69.171.228.40

Encuentra CIDR para 69.171.228.40, escriba:

# whois 69.171.228.40 | grep CIDR


Salidas de la muestra:

CIDR:           69.171.224.0/19

Para evitar el acceso de salida a www.facebook.com, escriba:

# iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP


También puede utilizar el nombre de dominio, escriba:

# iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP
# iptables -A OUTPUT -p tcp -d facebook.com -j DROP

Desde la página del manual de iptables:

... Especificar cualquier nombre que se resuelve con una consulta remota como DNS (por ejemplo, facebook.com es realmente una mala idea), una dirección IP de red (con / máscara), o la dirección IP sin formato ...

# 12: Drop, Registro (log) y paquetes

Escriba lo siguiente para iniciar la sesión y la suplantación de direcciones IP bloqueadas en la interfaz pública llamada eth1

# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP


Por defecto todo se registra al archivo de registro / var / / mensajes.

# tail -f /var/log/messages
# grep --color 'IP SPOOF' /var/log/messages

# 13: Registro y Drop paquetes de con limitado número de entradas de registro

El módulo limit -m puede limitar el número de entradas de registro creadas por el tiempo. Esto se utiliza para evitar la inundación de su archivo de registro. Para iniciar la sesión y soltar suplantación por 5 minutos, en ráfagas de como máximo 7 entradas.

# iptables -A ENTRADA -i eth1 -s -m 10.0.0.0/8 límite --limit 5 / m --limit-estallido 7 -j LOG --log-prefix "ip_spoof rpcinfo A:"
# iptables -A ENTRADA -i eth1 -s 10.0.0.0/8 -j DROP

# 14: Drop o Accept tráfico de Mac Address

Utilice la siguiente sintaxis:

# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

# 15: Bloquear o Permitir solicitud ICMP Ping

Escriba el siguiente comando para bloquear las solicitudes de ping ICMP:

# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP


Respuestas de ping también pueden limitarse a ciertas redes o hosts:

# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT


La siguiente sólo acepta tipo limitado de peticiones ICMP:

### ** assumed that default INPUT policy set to DROP ** #############
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
## ** all our server to respond to pings ** ##
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# 16: Abrir Rango de Puertos

Utilice la siguiente sintaxis para abrir una serie de puertos:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

# 17: Abra el rango de direcciones IP

Utilice la siguiente sintaxis para abrir un rango de direcciones IP:

## Sólo aceptar la conexión con el puerto TCP 80 (Apache) si ip está entre 192.168.1.100 y 192.168.1.200 ##
iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT

## Ejemplo nat ##
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25

# 18: Establecido Conexiones y restaring El Firewall

Cuando reinicie el servicio de iptables se limpiarán las conexiones establecidas, ya que se descargarán los módulos bajo los sistemas RHEL / Fedora / CentOS Linux. Editar /etc1/sysconfig/iptables-config y establecer IPTABLES_MODULES_UNLOAD de la siguiente manera:

IPTABLES_MODULES_UNLOAD = no

# 19: Ayuda Flooding My Server Screen

Utilice el nivel de registro crítico para enviar mensajes a un archivo de registro en lugar de la consola:

iptables -A INPUT -s 1.2.3.4 -p tcp --destination-port 80 -j LOG --log-level crit

# 20: Bloquear o Abrir puertos comunes

A continuación se muestra la sintaxis para abrir y cerrar TCP común y UDP:

 
Replace ACCEPT with DROP to block port:
## open port ssh tcp port 22 ##
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
 
## open cups (printing service) udp/tcp port 631 for LAN users ##
iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT
 
## allow time sync via NTP for lan users (open udp port 123) ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT
 
## open tcp port 25 (smtp) for all ##
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
 
# open dns server ports for all ##
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
 
## open http/https (Apache) server port to all ##
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
 
## open tcp port 110 (pop3) for all ##
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT
 
## open tcp port 143 (imap) for all ##
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT
 
## open access to Samba file server for lan users only ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT
 
## open access to proxy server for lan users only ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT
 
## open access to mysql server for lan users only ##
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

# 21: Restringir el número de conexiones paralelas a un servidor por cliente IP

Usted puede utilizar el módulo connlimit poner tales restricciones. Para permitir 3 conexiones ssh por host cliente, entre:

# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Establecer las peticiones HTTP a 20:

# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP


Cuando,

  1. --connlimit-above 3: Que si el número de las conexiones existentes es superior a 3.
  2. --connlimit-mask 24: Grupo de hosts utilizando la longitud del prefijo. Para IPv4, esto debe ser un número entre (incluido) 0 y 32.

# 22: Cómo: Utilizar iptables como un profesional

Para obtener más información sobre iptables, consulte la página de manual escribiendo man iptables desde la línea de comandos:

$ man iptables


Usted puede ver la ayuda con la siguiente sintaxis también:

# iptables -h


Para ver ayuda sobre los mandatos y objetivos específicos, entre:

# iptables -j DROP -h

# 22.1: Realizar pruebas de Firewall

Averigüe si los puertos están abiertos o no, entre:

# netstat -tulpn


Averigüe si el puerto TCP 80 abierto o no, entre:

# netstat -tulpn | grep :80


Si el puerto 80 no está abierto, inicie el Apache, escriba:

# service httpd start


Asegúrese de iptables que nos permiten el acceso al puerto 80:

# iptables -L INPUT -v -n | grep 80


De lo contrario utilice iptables para todos los usuarios:

# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
# service iptables save


Utilice el comando telnet para ver si el firewall permite conectarse al puerto 80:

$ telnet www.cyberciti.biz 80


Salidas de la muestra:

Trying 75.126.153.206...
Connected to www.cyberciti.biz.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

Usted puede utilizar nmap para sondear su propio servidor utilizando la siguiente sintaxis:

$ nmap -sS -p 80 www.cyberciti.biz


Salidas de la muestra:

Starting Nmap 5.00 ( http://nmap.org ) at 2011-12-13 13:19 IST
Interesting ports on www.cyberciti.biz (75.126.153.206):
PORT   STATE SERVICE
80/tcp open  http
Nmap done: 1 IP address (1 host up) scanned in 1.00 seconds

También recomiendo instalar y utilizar sniffer como tcpdupm y ngrep para probar la configuración del firewall.

Conclusión:

Este blog sólo lista de reglas básicas para nuevos usuarios de Linux. Puede crear y construir reglas más complejas. Esto requiere una buena comprensión de TCP / IP, tuning kernel Linux a través sysctl.conf, y buen conocimiento de su propia configuración. Manténgase en sintonía para los próximos temas:

Puede contratar ExtreHost para temas profesionales con sus servidores. No lo dude, contáctenos.
Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías

We use cookies

Usamos cookies en nuestro sitio web. Algunas de ellas son esenciales para el funcionamiento del sitio, mientras que otras nos ayudan a mejorar el sitio web y también la experiencia del usuario (cookies de rastreo). Puedes decidir por ti mismo si quieres permitir el uso de las cookies. Ten en cuenta que si las rechazas, puede que no puedas usar todas las funcionalidades del sitio web.