¿Cómo permito ciertos ips y bloqueo todas las demás conexiones en iptables?
¿Cómo permito ciertos ips y bloqueo todas las demás conexiones en iptables?
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.
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 lo
y -o lo
ciertamente causará problemas para ciertas aplicaciones.
iptables -F
eso, se supone que borra todas las reglas, ni siquiera puedo hacer ping a ubuntu.com
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
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.
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
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ía 22
en su ejemplo a 2288
? 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 de DROP
porque REJECT
hace que el puerto sea idéntico al puerto cerrado y DROP
hace que los paquetes destinados a ese puerto estén negros. En la práctica, el atacante remoto puede detectar DROP
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)