61 votos

iptables Consejos Y Trucos

Estoy seguro de que los administradores de sistemas Linux están bastante familiarizados con el iptables, el modo de usuario de la interfaz a la netfilter de filtrado de paquetes de marco.

Ahora, esta "Pregunta" está destinado a ser un Wiki de la Comunidad para recoger varios bits-n-piezas de iptables sabiduría. Nada es demasiado común o demasiado oscuro. Post algo que usted sabe que podría ayudar a otros a hacer la mayoría de iptables.

26voto

Bart De Vos Puntos 12724

El uso de la lista blanca y lista negra con iptables

#!/bin/bash

WHITELIST=/whitelist.txt
BLACKLIST=/blacklist.txt

#THIS WILL CLEAR ALL EXISTING RULES!
echo 'Clearing all rules'
iptables -F

#
## Whitelist
#

for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
        echo "Permitting $x..."
        $IPTABLES -A INPUT -t filter -s $x -j ACCEPT
done

#
## Blacklist
#

for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do
        echo "Denying $x..."
        $IPTABLES -A INPUT -t filter -s $x -j DROP
done

Script para abrir los puertos

#!/bin/bash
ALLOWEDTCP="80 3128 3784"
ALLOWEDUDP="3128 3784"

#
## Permitted Ports
#

for port in $ALLOWEDTCP; do
       echo "Accepting port TCP $port..."
       $IPTABLES -A INPUT -t filter -p tcp --dport $port -j ACCEPT
done

for port in $ALLOWEDUDP; do
        echo "Accepting port UDP $port..."
        $IPTABLES -A INPUT -t filter -p udp --dport $port -j ACCEPT
done

El bloqueo de portscan

# Attempt to block portscans
# Anyone who tried to portscan us is locked out for an entire day.
iptables -A INPUT   -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP

# Once the day has passed, remove them from the portscan list
iptables -A INPUT   -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove

# These rules add scanners to the portscan list, and log the attempt.
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

Falso/no Válido paquetes

# Reject spoofed packets
# These adresses are mostly used for LAN's, so if these would come to a WAN-only server, drop them.
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP

#Multicast-adresses.
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP

# Drop all invalid packets
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

Bloquear ataques de denegación de servicio

# Stop smurf attacks
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m icmp -j DROP

# Drop excessive RST packets to avoid smurf attacks
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT

Bloque de ICMP (también conocido como ping)

# Don't allow pings through
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP

26voto

pepoluan Puntos 3010

Optimizar el filtrado de la red del Rendimiento con el Uso de ipset

Si usted escribe un montón de reglas similares se basa en el simple IP, el puerto, o ambos, considere el uso de ipset para optimizar el filtrado de la red del rendimiento.

Por ejemplo:

iptables -s 192.168.1.11 -j ACCEPT
iptables -s 192.168.1.27 -j ACCEPT
iptables -s 192.168.1.44 -j ACCEPT
... hundreds of similar rules ...
iptables -s 192.168.251.177 -j ACCEPT

Esto significa que un paquete con la dirección de origen de 192.168.251.177 debe recorrer cientos de reglas antes de que pueda llegar a su veredicto de ACEPTAR.

Por supuesto, experimentados administradores de sistemas se divide en las reglas, por subred. Pero que todavía significa cientos de reglas.

ipset al rescate!

En primer lugar, definir una IP Set de ipmap tipo de:

ipset -N Allowed_Hosts ipmap --network 192.168.0.0/16

A continuación, rellenar con las direcciones:

for ip in $LIST_OF_ALLOWED_IP; do ipset -A Allowed_Hosts $ip; done

Finalmente, reemplazar los cientos de reglas iptables arriba con una regla:

iptables -m set --match-set Allowed_Hosts src -j ACCEPT

Cuando llega un paquete, netfilter llevará a cabo un muy rápida de mapa de bits de búsqueda para el paquete de la fuente (src) IP en contra de la Allowed_Hosts IP Set. Todos los paquetes que vienen desde 192.168.0.0/16 experimentará una regla. Y creo yo que la búsqueda de un mapa de bits, al menos, dos orden de magnitud más rápido que realizar cientos de regla iptables-comprobación.

ipset no está limitado a, las direcciones IP. También puede coincidir con base en los puertos, IP-puerto tupla, red/subred de direcciones IP-MAC tupla, y así sucesivamente y así sucesivamente. Y puede coincidir con los criterios de origen o de destino, o una mezcla de ambos (en el caso de tuplas).

Y, finalmente, ipset usted puede colocar de forma automática direcciones IP en listas negras/listas blancas. Estas listas negras/listas blancas también puede 'edad', por lo tanto la eliminación automática de la dirección IP después de un período de tiempo configurable ha pasado.

Por favor refiérase a ipset's página de manual para más detalles.

NOTA MUY IMPORTANTE:

Algunas distribuciones de Linux no tienen "out-of-the-box" apoyo para ipset. Dos distros sé que no admiten ipset fuera-de-la-caja de Ubuntu y Debian. Ejecución aptitude de ellos tentadoramente muestra que un ipset paquete está disponible, pero me fuertemente recomendamos no instalar ese paquete por dos razones: (1) Es una versión antigua de ipset, y (2) no funciona de todos modos.

En su lugar, descargue ipset's de la fuente de su sitio web: http://ipset.netfilter.org/install.html

Alternativamente, si usted usa xtables-addons, ipset está incluido en su origen: http://xtables-addons.sourceforge.net/

Edit: lo anterior es cierto para Ubuntu 10.04, la última LTS en el momento de la escritura. Ubuntu 12.04 tiene soporte incorporado para ipset y/o xtables-addons, en el sentido de que la instalación del paquete en cuestión correctamente permite que las características. No conozco la situación en Debian, a pesar de que, de no haberla utilizado durante bastante tiempo...

22voto

alexm Puntos 408

Añadir comentarios a sus normas:

-m comment --comment "Comments help to read output of iptables -nvL"

17voto

pepoluan Puntos 3010

Bloque TCP Conocidos Ataques

Agregar las siguientes reglas, de preferencia en -t raw -A PREROUTING

-p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-p tcp --tcp-flags SYN,RST SYN,RST -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP

Los ataques que están siendo bloqueados son, respectivamente:

  • SYN-FIN ataque
  • SYN-PRIMER ataque
  • X-Mas ataque
  • nmap ALETA de escaneo
  • NULLflags ataque
  • ALLflags ataque

(siéntase libre de editar los nombres de los ataques más arriba)

7voto

Kenny Rasschaert Puntos 5933

Habilitar NAT

  1. echo 1 > /proc/sys/net/ipv4/ip_forward
  2. /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Paso 1 establece el parámetro de kernel para permitir el reenvío de ip, paso 2, establece una regla iptables que permite a NAT en la interfaz eth0.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: