Duda sobre iptables

Tengo un monton de ips en un txt que me gustaria denegarlas el acceso con iptables , al estilo de por ejemplo :

$iptables -a INPUT -s 222.222.222.222 -j DROP

Podria poner en una orden directamente para que me deniegue todas esas ips que tengo en el txt ? o tengo que ponerlas una por una como la orden anterior ?.

Y otra duda mas sencilla , ¿esta orden esta correcta? :

$iptables -a INPUT -s 222.222.222.222/222.222.222.255. -j DROP

seria denegar el rango ultimo de la 222 a la 255 , creo que esta bien pero como siempre he utilizado para los rangos el /16 o /24 , no se si esta orden esta bien puesta.

Saludos.
Escrito originalmente por Anjel
Tengo un monton de ips en un txt que me gustaria denegarlas el acceso con iptables , al estilo de por ejemplo :

$iptables -a INPUT -s 222.222.222.222 -j DROP

Podria poner en una orden directamente para que me deniegue todas esas ips que tengo en el txt ? o tengo que ponerlas una por una como la orden anterior?.



Si tienes todas las ips del txt separadas por espacios o saltos de linea, lo puedes hacer con un simple comando (agregalo al script que uses):

for A in `cat nombredeltxt.txt`
do
iptables -a INPUT -s $A -j DROP
done


Eso hace lo que tu pides. (es mejor que hacer magia negra con las mascaras)



Y otra duda mas sencilla , ¿esta orden esta correcta? :

$iptables -a INPUT -s 222.222.222.222/222.222.222.255. -j DROP

seria denegar el rango ultimo de la 222 a la 255 , creo que esta bien pero como siempre he utilizado para los rangos el /16 o /24 , no se si esta orden esta bien puesta.


Lo que dices no es equivalente... ya que /24 no es 222.222.222.255

/16 /24 etc son las formas compactas de escribir las mascaras de subred.

/24 equivale a 255.255.255.255
/16 equivale a 255.255.255.0
/8 equilave a 255.255.0.0
etc etc

Es por el peso binario, /24 porque son 24 unos binarios (8 por cada octeto de la ip) 16 porque son 16 etc.

salu2[bye]
Gracias Segiox tu script y el comando cut me habeis ahorrado mucho tiempo , adoro linux XD esa parte esta solucionada .

Yo fijate que habia pensado en hacer algo asi pero al no encontrar informacion supuse que no se podia hacer , esto es lo que pensaba hacer.

Un alias al principio del script q sea :

ips_denegadas="ips_denegadas.txt"

y luego :

iptables -a INPUT -s $ips_denegadas -j DROP

O en vez de poner el txt poner las ips separadas por espacios o comas:

ips_denegadas="192.169.0.1 192.169.4.1 192.169.0.55" ... etc

Pero ni lo intente suponiendo que no es posible.

Lo que dices no es equivalente... ya que /24 no es 222.222.222.255

/16 /24 etc son las formas compactas de escribir las mascaras de subred.

/24 equivale a 255.255.255.255
/16 equivale a 255.255.255.0
/8 equilave a 255.255.0.0
etc etc

Es por el peso binario, /24 porque son 24 unos binarios (8 por cada octeto de la ip) 16 porque son 16 etc.


Lo de la mascara /24 , /16 y /8 se lo que significaba lo que yo me refiero es denegar este rango , ips inventadas.

192.168.0.1
192.168.0.80

Seria denegar esas 80 ips , solo esas 80 , espero ahora haberme explicado mejor , pero ya he encontrado solucion buscando por google , se trata de añadir un patch al iptables o bajarse la ultima version del iptables creo , se trata de la opcion iprange , un ejemplo :

iptables -A INPUT -m iprange --src-range 192.168.0.20-192.168.0.96 -j DROP .

Yo cuando actualice la mdk actualizare tb eso , espero que esto ultimo os sirva a alguno.

Ya por ultimo a ver si me puedes seguir ayudando , he puesto las reglas de esas ips para que se logeen al estilo :

iptables -t filter -N DENEGADAS
iptables -t filter -A DENEGADAS -j LOG --log-prefix "IPS_DENEGADAS"
iptables -t filter -A DENEGADAS -j DROP

Eso me logea en el log "syslog" cualquier intento de conexion de esas ips , pero el problema es que me estan haciendo un log muy grande y quiero guardar esos datos en otro archivo , yo habia pensado en utilizar grep pero no se como , por ejemplo :

cat syslog.log | grep IPS_DENEGADAS >> ips_denegadas.txt

Eso creo que me guardaria todas las entradas que tuviese IPS_DENEGADAS el nombre que le di al log en el txt que pongo al final , pero estas seguirian en el log original comiendome espacio.

La pregunta es , hay alguna opcion de grep para que al mostrarlas te las borre del log para quitar ese espacio ? o como se podria hacer si no es posible hacerlo con grep ?

Gracias de nuevo.
Para el tema del syslog, yo te recomendaría rotarlos e ir borrando los antiguos, pero para próximas veces que lo necesites, para quitar unas líneas de un fichero con grep lo puedes hacer así:
$ cat fichero | grep -v LOQUESEA > fichero


Quita las líneas que se ajusten a LOQUESEA.

Salu2.Ferdy
Hola ferdy , he probado el comando grep con la opcion -v como me habias puesto y no es lo que necesito , me explico.

Yo pongo :

cat syslog | grep -v LOQUESEA > fichero.txt

Y este me pasa todas las lineas menos las que tengan "LOQUESEA" al nuevo fichero , pero en el log original siguen estando esas lineas ocupando espacio.

Y lo que necesito es una opcion que me pase todas esas lineas que contengan "LOQUESEA" a otro fichero y estas se borren del original para ahorrar espacio , algo asi como cortar y pegar a otro fichero.

Saludos.
Pues metelo en el mismo fichero del syslog......... aunque sigo pensando que lo mejor es que los rotes y así no te ocupan espacio.

Salu2.Ferdy
Pues metelo en el mismo fichero del syslog......... aunque sigo pensando que lo mejor es que los rotes y así no te ocupan espacio.


Bueno aparte de ahorrar espacio , no quiere perder esa info y tenerla algo mas ordenada en otro fichero por eso lo decia.

Pero viendo que no es posible o que nadie sabe como hacerlo , pues lo dejare como esta.

Saludos.
6 respuestas