iptables: permite ciertos ips y bloquea todas las demás conexiones

26

¿Cómo permito ciertos ips y bloqueo todas las demás conexiones en iptables?

David
fuente
Como Gilles demuestra, el concepto es el siguiente: agregue reglas ACEPTAR para cada cosa específica que desee permitir, ya sea por IP de origen u otras calificaciones, luego configure la política predeterminada para RECHAZAR.
Caleb el

Respuestas:

27

Escribí una publicación de blog sobre reglas básicas de Iptables para el usuario de escritorio hace mucho tiempo y probablemente debería leerlo, y su artículo vinculado sobre el diseño de firewall con estado . Pero antes del kernel 2.6.39 (que incluye ipsety es posible que desee usarlo para incluir en la lista blanca las IP si tiene más de 10 para incluir en la lista blanca (donde 10 es arbitrario)).

Primero maneje los estados que sabemos que queremos aceptar o descartar, e interfaces.

iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept

Si solo desea hacer un permiso solo por IP, sin estado

iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

Sin embargo, es probable que tenga problemas para hacer esto, y le sugiero que use el estado para facilitarle la vida. Por ejemplo, no permitir -i loy -o lociertamente causará problemas para ciertas aplicaciones.

xenoterracida
fuente
44
En lugar de DROP, debe RECHAZAR los paquetes no deseados, ya que facilita mucho el diagnóstico de problemas y evita los tiempos de espera. Ver Rechazar paquetes IP con un error ICMP, o simplemente descartarlos?
Gilles 'SO- deja de ser malvado'
Intenté ambas configuraciones y KeePass2 no se inicia, ¿alguna idea? Además, si hago iptables -Feso, se supone que borra todas las reglas, ni siquiera puedo hacer ping a ubuntu.com
Pawel Cioch
@PawelCioch, ¿por qué KeePass2 necesitaría conexión a Internet de todos modos?
Alex
@Alex para almacenar el archivo DB en la ubicación remota, esto quiero una sola IP. Pero me doy cuenta de todo, la configuración es más complicada que el ejemplo aquí
Pawel Cioch
10

Aquí hay un ejemplo (¡no probado!) Que bloquea solo las conexiones entrantes . Se permiten conexiones a través de la interfaz de bucle invertido, que proviene de 192.168.3.x, ICMP o al puerto SSH. Todas las demás conexiones son rechazadas.

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
Gilles 'SO- deja de ser malvado'
fuente
@Gilles para usar adecuadamente los estados RELACIONADOS y ESTABLECIDOS, debe hacer coincidir el paquete inicial como un estado NUEVO. loen el ejemplo anterior se excluye de la coincidencia de estado y siempre se permite.
penguin359
@ penguin359: ¿Podría explicar por qué se necesita NUEVO? Estoy lejos de ser un experto en iptables, copié en parte estas reglas del enrutador de mi casa, que no coincide con NEW. Según tengo entendido, todo lo que queda después de la primera regla son paquetes NUEVOS (o SIN SEGUIMIENTO) de todos modos. (Si estoy demasiado lejos de la realidad y no se puede explicar en un comentario, publicar sus versiones con explicaciones como una respuesta y voy a eliminar la mía.)
Gilles parada SO ser maligno '
@Gilles Siempre abandono el estado NO VÁLIDO antes de aceptar cualquier cosa ... lo que hace que todo lo que no sea NO VÁLIDO, RELACIONADO, ESTABLECIDO, debe ser un estado NUEVO. Pero no sé por qué todo lo demás debe especificar NUEVO. Sin embargo, en teoría, si no maneja INVALID y no especifica NEW, podría terminar aceptando INVALID. Pero una vez que se maneja INVALID, me parece que verificar el estado NEW en cada regla simplemente requiere más procesamiento para el paquete.
xenoterracide
@Gilles también es una política predeterminada de rechazo, ya que envía un paquete de rechazo por cada paquete que se recibe, esto agrava un ataque de DOS.
xenoterracide
@xenoterracide: Buen punto. ¿Debería usarse RECHAZAR alguna vez? He preguntado: ¿ Rechazar paquetes IP con un error ICMP o simplemente descartarlos?
Gilles 'SO- deja de ser malvado'
7

La siguiente regla permitirá solo su IP y bloqueará todas las demás IP a través del puerto 22 o ssh. Pruebe con un nuevo terminal antes de desconectar.

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
Ishtiyaque Noori
fuente
3
Gracias por la breve respuesta. ¿Cómo cambiaría esto si quisiera permitir algunas IP y rangos de IP? En lugar de ¿ yourIPaddresspodría agregar algunas direcciones IP y rangos? Y si estoy usando SSH en un puerto no estándar como 2888, entonces el comando cambiaría 22en su ejemplo a 2288? Además, ¿esto también bloqueará rsync, sftp, etc. a este servidor de todas las IP excepto las permitidas?
PKHunter
1
Tenga en cuenta que -p tcpaquí es importante porque --dportno funciona sin él. También sugeriría usar en -j REJECTlugar de DROPporque REJECThace que el puerto sea idéntico al puerto cerrado y DROPhace que los paquetes destinados a ese puerto estén negros. En la práctica, el atacante remoto puede detectar DROPpuertos configurados desde puertos realmente cerrados.
Mikko Rantalainen