Hay un servidor sin ninguna defensa de iptables :ACCEPT all..
Podría haber aplicaciones personalizadas en este servidor.
Si necesitamos endurecer este servidor (denegar todo y solo dejar lo que necesitan las aplicaciones) con estrictas reglas de iptables, tenemos que descubrir a mano qué aplicación usa cuál dst/src
port/protocol
y luego tenemos que escribir las reglas de iptables para ellos..
La pregunta : ¿hay algún script que pueda ayudar a recopilar esta información de una máquina en ejecución? (desde los registros?) - ¿Y generando automáticamente las reglas de iptables?
Como si hubiera el audit2allow
encendido SELinux
. Solo por iptables
!
¡La máquina no puede tener ninguna interrupción!
Ej .: el script "MAGIC" debería ejecutarse una semana / mes en la máquina, recolectando información, luego, después de una semana / mes, el script podrá producir un archivo de reglas de iptables que podamos usar.
Muchas personas podrían entrar en esta situación (cómo fortalecer un servidor con respecto a iptables). Y sería genial si hubiera un script / solución que pueda hacer esto: \
Respuestas:
Hazlo manualmente
o
Explicación:
fuente
Ejecutar
tcpdump
en la máquina durante una semana más o menos para capturar el tráfico promedio. Luego, puede navegar por el tráfico utilizando wireshark más adelante para ver qué puertos se están utilizando.El comando para esto sería
tcpdump -i <interface> -s 65535 -w <some-file>
Luego puede asignar esto de nuevo usando
netstat -tuanp
para ver qué PID / aplicaciones están usando qué puertos.Teóricamente esto podría ser programado.
fuente
Puede comenzar con una plantilla muy básica como: https://gist.github.com/jirutka/3742890 , que solo permite ssh y ping, y agrega cualquier otra cosa manualmente.
Un truco rápido de script para generar reglas de iptables para que su aplicación escuche en la interfaz pública (0.0.0.0) / tcp
También puede usar el
iptables -I INPUT <number>
para inyectar las reglas en una ubicación específica, que puede enumerar coniptables -nvL --line-numbers INPUT
fuente
Desafortunadamente, no hay tal script que haya visto que pueda ejecutarse en modo de aprendizaje o en modo pasivo registrando todo el uso de su red, tomando sus resultados y generando un firewall real usando
iptables
desde sus registros.Su mejor opción será comenzar de manera simple y seguir agregando continuamente las diversas piezas a medida que comience a comprender completamente qué servicios proporciona su sistema. Deberá utilizar herramientas como
netstat
ver qué puertos están en uso para los diversos servicios que aloja, así como qué direcciones IP están accediendo a ellos.NOTA: En lo anterior puede ver qué servicios tengo en un servidor que aceptan conexiones TCP, es decir, están "escuchando" las conexiones en varios puertos.
Comenzar con cosas como SSH (puerto 22) y HTTP (puerto 80) es muy fácil, si esto es típico de su sistema, por lo que haría este tipo de servicios en masa de una vez. Para otros servicios como LDAP o NIS, es posible que desee hacerlos de una manera más controlada, asegurándose de que las cosas no se rompan a medida que las presenta.
Las herramientas como FireHOL , Firewall Builder (fwbuilder) y eztables pueden ser útiles al atacar este proyecto, ya que proporcionan una buena capa de abstracción al tener que crear
FireHOLiptable
reglas personalizadas a mano, lo que puede ser complicado.ejemplo
fwbuilderejemplo
Usando Fail2Ban
Con un
extractoiptables
firewall rudimentario en su lugar, es probable que desee complementarlo utilizando una herramienta como Fail2Ban .El uso de herramientas como esta ayudará a limitar la exposición que su sistema tendrá que soportar a medida que continúe endureciéndolo. Incluso después de estar bastante convencido de que su sistema se ha fortalecido, es posible que desee seguir usando Fail2Ban como parte de sus medidas de seguridad.
Referencias
fuente
Use las reglas de iptable para registrar las nuevas conexiones, eso también registrará udp.
Puede especificar diferentes
--log-level
para tener los registros en otro archivo que no sea / var / log / messages (deberá configurar el demonio syslog).Creo que debería leer los registros de la aplicación principal, ya que algunos servidores tienen una actividad muy periódica como el mediodía, fin de semana, fin de mes (trimestre, año) para que no se pierda una importante actividad de red del servidor.
Como el servidor es crítico, crea la matriz de flujo de red del servidor en una bonita hoja de cálculo (fuente ip, destino ip, protocolo, puerto, aplicación) que lo ayudará a construir las reglas.
fuente
Sé que esto no es un script y no es una respuesta a la pregunta de OP, pero es una idea mía que quiero compartir con OP.
Tengo todos los puertos de escucha con:
Tal vez esto pueda acercarte más a escribir tu propio guión. :)
fuente
Puedes comenzar con algo como esto:
y luego seguir con
o
Lo que hace la primera línea es usar netstat para enumerar los procesos de escucha y sus puertos. Luego generará líneas "iptables" para permitir cada una de esas conexiones entrantes. La pequeña sustitución de regex sed se personalizó para la salida de netstat en mi servidor, por lo que podría requerir algunos ajustes para usted. Cuando funciona, debes terminar con algo parecido a:
Dos cosas importantes a tener en cuenta:
1) Estas reglas no hacen nada por usted hasta que coloca una línea DROP o RECHAZO al final o hace que sea la política predeterminada para paquetes no coincidentes. Estas reglas permiten paquetes, lo cual es discutible, si la política predeterminada es permitir algo que no coincida.
2) Estas reglas son ambivalentes sobre la IP de origen . Desde su puesto original, parece que quiere permitir que todos los clientes para utilizar el servidor y, a continuación, examine los registros para obtener fuente IP de ir con los puertos de destino. No conozco una herramienta para hacer eso, por lo que este script solo evitará que las personas realicen nuevos servicios en su servidor que escuchen en otros puertos ... que es algo .
fuente