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.
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.
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 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.
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.
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
0
Aquí está el ejemplo de trabajo completo.
También hace que las aplicaciones funcionen (re: mi comentario sobre keepass no se inicia)
Respuestas:
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
ipset
y 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.
Si solo desea hacer un permiso solo por IP, sin estado
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 lo
y-o lo
ciertamente causará problemas para ciertas aplicaciones.fuente
iptables -F
eso, se supone que borra todas las reglas, ni siquiera puedo hacer ping a ubuntu.comAquí 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.
fuente
lo
en el ejemplo anterior se excluye de la coincidencia de estado y siempre se permite.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.
fuente
yourIPaddress
podría agregar algunas direcciones IP y rangos? Y si estoy usando SSH en un puerto no estándar como 2888, entonces el comando cambiaría22
en su ejemplo a2288
? Además, ¿esto también bloqueará rsync, sftp, etc. a este servidor de todas las IP excepto las permitidas?-p tcp
aquí es importante porque--dport
no funciona sin él. También sugeriría usar en-j REJECT
lugar deDROP
porqueREJECT
hace que el puerto sea idéntico al puerto cerrado yDROP
hace que los paquetes destinados a ese puerto estén negros. En la práctica, el atacante remoto puede detectarDROP
puertos configurados desde puertos realmente cerrados.Aquí está el ejemplo de trabajo completo.
También hace que las aplicaciones funcionen (re: mi comentario sobre keepass no se inicia)
https://github.com/skironDotNet/linux-allow-only-single-ip
fuente