pTables se usa para configurar, mantener e inspeccionar las tablas de reglas de filtrado de IPs en el kernel de Linux, pero por defecto, su sistema de logs no es todo lo completo esperamos.
Por defecto, la mayoría de los logs del sistema se guardan en el fichero /var/log/messages pero en este caso vamos a configurar un nuevo fichero para que almacene únicamente los logs que generaremos con algunas reglas en IpTables, creando así su propio archivo de bitácora.
Lo primero que debemos hacer es configurar el archivo /etc/syslog.conf, que se trata de un archivo de configuración en el que se indica el modo en que los mensajes del sistema son bitacorizados a través de la utilidad syslogd que se instala y configura por defecto en todos los sistemas GNU/Linux. Debemos añadir al final del fichero la siguiente sentencia:
kern.warning /var/log/iptables.log
Con esto indicamos que se almacenen los mensajes provienen del kernel con prioridad 4 o superior ('warning' es el nivel de prioridad 4) en el archivo /var/log/iptables.log y se ignora el resto de prioridad inferior (debug, info y notice que son del 3 hacía abajo) generalmente irrelevantes.
Guardamos el fichero y reiniciamos el servicio:
/etc/init.d/sysklogd restart para Debian / Ubuntu
/etc/init.d/syslog restart para Red Hat/Cent OS/Fedora Core
Debemos añadir que los mensajes del sistema también seguirán guardándose en /var/log/messages y en otros ficheros que se encuentren definidos en /etc/syslog.conf.
Por último solo nos queda añadir las reglas al firewall Iptables que monitorizarán los mensajes de error. Estas reglas se han de añadir justo antes de cortar un tráfico determinado. Un ejemplo del fichero de configuración de IpTables con las reglas de log añadidas (basado en el artículo de creación de firewall con IpTables) es el siguiente:
## Vaciamos las reglas
iptables -F
iptables -X
iptables -t nat -F
## Establecemos politicas predeterminada
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
# Aceptamos todo de localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT
# A nuestra IP le dejamos todo
iptables -A INPUT -s 192.168.2.1 -j ACCEPT
# A otra ip interna le permitimos todo
iptables -A INPUT -s 192.168.2.99 -j ACCEPT
iptables -A INPUT -s 192.168.2.100 -j ACCEPT
# A una subred interna le permitimos todo
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
# O a un rango de una subred
iptables -I INPUT -m iprange --src-range 192.168.1.2-192.168.1.100 -j ACCEPT
# Permitimos una conexion a ssh y telnet (22 y 23) desde un equipo
iptables -A INPUT -s 192.168.2.10 -p tcp --dport 22:23 -j ACCEPT
# A otro le permitimos acceso FTP
iptables -A INPUT -s 212.176.121.111 -p tcp --dport 20:21 -j ACCEPT
# El puerto 80 y 8080 (www) abierto, para un servidor web.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
# Y el resto, lo cerramos
# Inidcamos que se almacenen los accesos a los puertos que vamos a cerrar
iptables -A INPUT -p tcp -m tcp --dport 22:23 -j LOG --log-prefix 'INTENTO DE ACCESO A SSH ' --log-level 4
iptables -A INPUT -p tcp -m tcp --dport 20:21 -j LOG --log-prefix 'INTENTO DE ACCESO A FTP ' --log-level 4
iptables -A INPUT -p tcp -m tcp --dport 6001 -j LOG --log-prefix 'INTENTO DE ACCESO A 6001 ' --log-level 4
iptables -A INPUT -p tcp --dport 20:21 -j DROP
iptables -A INPUT -p tcp --dport 22:23 -j DROP
iptables -A INPUT -p tcp --dport 6001 -j DROP
# Cerramos rango de los puertos privilegiados. Cuidado con este tipo de
# barreras, antes hay que abrir a los que si tienen acceso.
iptables -A INPUT -p tcp --dport 1:1024 -j DROP
iptables -A INPUT -p udp --dport 1:1024 -j DROP
# impedimos iniciar conexion los puertos altos
# (puede que ftp no funcione)
iptables -A INPUT -p tcp --syn --dport 1025:65535 -j DROP
# Cerramos otros puertos que estan abiertos
iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp --dport 10000 -j DROP
Reiniciamos el servicio IpTables y a partir de ahora podremos consultar los mensajes del log de IpTables en el fichero /var/log/iptables.log.
También te puede interesar:
Crear firewall con Iptables en Linux
Problema al iniciar IpTables: “no chain/target/match by that name”
Este comentario ha sido eliminado por un administrador del blog.
ResponderEliminarsuena util brother.
ResponderEliminarpero por ahora tengo otro problema, mira ...
cuando uno usa iptables en linea de comando, puede pedir que la instruccion sea persistente (que se mantenga en sucesivas corridas de iptables, o sea que no hace falta teclearla en el proximo arranque), pero ... hace dos o tres años hicimos precisamente esto (yo se que estuvo mal, vale.), escribir una instruccion de emergencia, funciono, y la dejamos, pero las circunstancias cambiaron y ahora debo modificar esa instruccion.
la pregunta es: donde se guardo?
creo haberlo visto en alguna parte, pero no lo documente, y aqui me tienes.
puedes ayudar? o alguien de la comunidad puede ayudar?
Hola sumi,
ResponderEliminarla verdad que no entiendo muy bien como hiciste para introducir esa regla que dieces en el iptables, pero te adjunto un trozo de texto que encontré buscando en Google en forja.rediris.es donde se indican las dos formas de introducir reglas en iptables:
"Se puede implementar un script de inicio en /etc/rc.d/init.d (o /etc/init.d ) con el que hagamos que
iptables se “inicie o pare” como un servidor más. También se pueden salvar las reglas aplicadas con
el comando iptables-save en un fichero y gestionar ese fichero con una aplicación o front-end desde
la X o desde webmin.
Se pueden reutilizar las reglas del cortafuegos, bien a través del script correspondiente, bien a través
de guardarlas. Para ello, se dispone de las instrucciones iptables-save e iptables-restore.
Para salvar las reglas, hay que utilizar la instrucción
iptables-save > /directorio/fichero_reglas"
Supongo q habrás utilizado la segunda forma... por lo que te recomiendo que busques algún directorio o archivo que se llame iptables.
Espero que te sirva de algo.
Un saludo
Saludo sumidero
Eliminarprimero, gracias por contestar y reactivar un hilo tan antiguo.
ResponderEliminarvoy a investigar un poco mas.
el sabado estaba apresurado, por lo que leo tienes toda la razon.
te dare mas detalles, para empezar.
hace tres años cambiamos servidor pero preferi no desechar el anterior, lo escondi debajo de un escritorio y espere.
tres años despues mi server fallo por un problema de fuente, ahi capitalice el haber guardado el server anterior, en principio bastaria con conectarlo y listo en 5 minutos. y funciono.
pero, ... hace unos cuatro años tuvimos un intento de penetracion por parte de una direccion ip, asi que en el arranque iptables hacia algo con esa direccion, no recuerdo detalles; ahora resulta que no siguieron pagando el derecho de ese nombre, digamos eran .org y ahora son .biz, pero la instruccion del server viejo hace referencia al .org, y en el arranque reporta error al no encontrar ese nombre en el servidor de nombres.
si lo vemos bien no pasa nada grave, pero llama la atencion en el arranque.
por lo demas todo anda bien en el server.
se me ocurre como una solucion rapida, pero no definitiva, incluir el nombre viejo (con .org) en /etc/hosts para que el iptables lo encuentre inmediatamente y no haga la consulta al DNS.
Claro, esto no quiere decir que no tenga que leer el archivo de configuracion del iptables y buscar el otro archivo donde estan todas las instrucciones del iptables.
que te parece?
primero, gracias por contestar y reactivar un hilo tan antiguo.
Eliminarvoy a investigar un poco mas.
el sabado estaba apresurado, por lo que leo tienes toda la razon.
te dare mas detalles, para empezar.
hace tres años cambiamos servidor pero preferi no desechar el anterior, lo escondi debajo de un escritorio y espere.
tres años despues mi server fallo por un problema de fuente, ahi capitalice el haber guardado el server anterior, en principio bastaria con conectarlo y listo en 5 minutos. y funciono.
pero, ... hace unos cuatro años tuvimos un intento de penetracion por parte de una direccion ip, asi que en el arranque iptables hacia algo con esa direccion, no recuerdo detalles; ahora resulta que no siguieron pagando el derecho de ese nombre, digamos eran .org y ahora son .biz, pero la instruccion del server viejo hace referencia al .org, y en el arranque reporta error al no encontrar ese nombre en el servidor de nombres.
si lo vemos bien no pasa nada grave, pero llama la atencion en el arranque.
por lo demas todo anda bien en el server.
se me ocurre como una solucion rapida, pero no definitiva, incluir el nombre viejo (con .org) en /etc/hosts para que el iptables lo encuentre inmediatamente y no haga la consulta al DNS.
Claro, esto no quiere decir que no tenga que leer el archivo de configuracion del iptables y buscar el otro archivo donde estan todas las instrucciones del iptables.
que te parece?
Pues... personalmente te recomendaría que te las apañases para buscar esa regla porque.. temporalmente puede que sirvas lo que dices, pero al final te acabará dando problemas.
ResponderEliminarMi experiencia me dice que lo mejor es solucionar los problemas que tienes porque sino, después será más complicado.
Seguro que buscando en nuestro amigo san google o en foros encuentras algo.
Siento no poder ayudarte más.
Un saludo
al contrario hermano.
ResponderEliminargracias por tu tiempo.
en cuanto lo resuelva en definitiva procurare publicarlo por si le sirve a alguien mas.
pero claro, tienes toda la razon, lo mejor sera resolver el problema desde la raiz.
hasta pronto.
HERMANO!
EliminarSi estamos hablando de un Firewall, no considero que los mensajes debug, info y notice sean irrelevantes. Ojo, estamos hablando del "autorizador de la red interna hacia otras redes", por lo tanto tener una bitácora de los que por allí pasa es sumamente necesario.
ResponderEliminarSaludos.
Saludos
EliminarAndreS,
ResponderEliminarestá claro que de cuanta más información dispongamos, siempre será mejor, pero en caso de que almacenemos todos los mensajes, debemos tener un buen gestor de bitácoras o ser muy ágiles.
Está claro que si solo queremos ver los eventos más importantes con definir a partir del nivel 4 es suficiente, sino, podemos definirlos todos.
Gracias por tus apreciaciones
Buen comentario
Eliminar