Ir al contenido principal

Configuración de archivo de Logs para IpTables

I


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”

Comentarios

  1. Este comentario ha sido eliminado por un administrador del blog.

    ResponderEliminar
  2. suena util brother.
    pero 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?

    ResponderEliminar
  3. Hola sumi,

    la 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

    ResponderEliminar
  4. primero, gracias por contestar y reactivar un hilo tan antiguo.

    voy 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?

    ResponderEliminar
    Respuestas
    1. primero, gracias por contestar y reactivar un hilo tan antiguo.

      voy 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?

      Eliminar
  5. 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.

    Mi 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

    ResponderEliminar
  6. al contrario hermano.

    gracias 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.

    ResponderEliminar
  7. Si 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.

    Saludos.

    ResponderEliminar
  8. AndreS,

    está 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

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Exportar archivo de configuración de WinSCP

S i estamos trabajando con WinSCP seguro que ya hemos guardado distintas sesiones para acceder a ellas directamente en futuras ocasiones y evitar volver a introducir todos los parámetro de configuración. Seguro que también muchos de vosotros habéis agrupado las sesiones en carpetas dependiendo de la naturaleza de las mismas. Este trabajo ocupa un valioso tiempo que no nos podemos permitir repetirlo para todos los equipos que tenemos, por lo que lo más lógico es configurar todas las sesiones y exportar su configuración al resto de equipos , teniendo una sola versión y evitarnos tener que volver a configurar todas las sesiones en cada uno. El problema es que WinSCP no nos muestra la opción de exportar de una forma sencilla, por lo que tendremos que buscarnos la vida. Lo primero que debemos hacer es abrir el programa y acceder a Preferencias -> Almacenamiento (o su equivalente al inglés) En esta pantalla deberemos indicar que almacene la configuración en un archivo

Asignar valores por defecto a input=”file” y a textarea

S eguro que muchos os habéis estado rompiendo la cabeza buscando la forma de dar un valor por defecto a el tipo de dato input=”file” . Pues que sepáis que no se puede!!! No se puede dar un valor por defecto a los campos de este tipo, ya que hacen referencia a una ruta física local y podrían surgir problemas de seguridad. Lo que se puede hacer, por ejemplo, es mostrar la imagen o el nombre del dato que tenemos almacenado y si el usuario desea modificarla, ofrecerle la opción de cargar una nueva. La etiqueta textarea , aunque pueda parecérnoslo, no se trata de un input y para darle valor por defecto simplemente debemos mostrar el texto que deseemos entre su marca de apertura y de cierre. Es decir, en caso de que lo que deseemos mostrar por defecto sea una variable, introduciremos el siguiente código: <textarea id="txtobservaciones" name="txtobservaciones" rows="2" cols="40" class="txt" ><?=$_POST["txtobservaciones"] ?&