Usando la lista blanca y la lista negra con iptables
#!/bin/bash
WHITELIST=/whitelist.txt
BLACKLIST=/blacklist.txt
#THIS WILL CLEAR ALL EXISTING RULES!
echo 'Clearing all rules'
iptables -F
#
## Whitelist
#
for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
echo "Permitting $x..."
$IPTABLES -A INPUT -t filter -s $x -j ACCEPT
done
#
## Blacklist
#
for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do
echo "Denying $x..."
$IPTABLES -A INPUT -t filter -s $x -j DROP
done
Script para abrir puertos
#!/bin/bash
ALLOWEDTCP="80 3128 3784"
ALLOWEDUDP="3128 3784"
#
## Permitted Ports
#
for port in $ALLOWEDTCP; do
echo "Accepting port TCP $port..."
$IPTABLES -A INPUT -t filter -p tcp --dport $port -j ACCEPT
done
for port in $ALLOWEDUDP; do
echo "Accepting port UDP $port..."
$IPTABLES -A INPUT -t filter -p udp --dport $port -j ACCEPT
done
Bloqueo de escaneo de puertos
# Attempt to block portscans
# Anyone who tried to portscan us is locked out for an entire day.
iptables -A INPUT -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP
# Once the day has passed, remove them from the portscan list
iptables -A INPUT -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove
# These rules add scanners to the portscan list, and log the attempt.
iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
Paquetes falsos / inválidos
# Reject spoofed packets
# These adresses are mostly used for LAN's, so if these would come to a WAN-only server, drop them.
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP
#Multicast-adresses.
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP
# Drop all invalid packets
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
Bloquear ataques de pitufo
# Stop smurf attacks
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m icmp -j DROP
# Drop excessive RST packets to avoid smurf attacks
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT
Bloquear ICMP (también conocido como ping)
# Don't allow pings through
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
iptables
en la línea 8, y luego$IPTABLES
más adelante. ¿Es suficiente usarlo eniptables
todas partes? De lo contrario, supongo que deberías asignar algo comoIPTABLES=/sbin/iptables
¿no?Optimizar el rendimiento de netfilter utilizando
ipset
Si escribe muchas reglas similares basadas en meras IP, puertos o ambos, considere usar
ipset
para optimizar el rendimiento de netfilter.Por ejemplo:
Esto significa que un paquete con la dirección de origen 192.168.251.177 primero debe atravesar cientos de reglas antes de poder obtener su veredicto de ACEPTAR.
Por supuesto, los administradores de sistemas experimentados dividirán las reglas por subred. Pero eso todavía significa cientos de reglas.
ipset
¡al rescate!Primero, defina un conjunto de IP de
ipmap
tipo:Luego, complételo con las direcciones:
Finalmente, reemplace los cientos de reglas de iptables anteriores con una regla:
Cuando llega un paquete, netfilter realizará una búsqueda de mapa de bits muy rápida para la IP de origen (src) del paquete contra el
Allowed_Hosts
conjunto de IP. Todos los paquetes procedentes de 192.168.0.0/16 experimentarán una regla. Y créanme que buscar un mapa de bits es al menos dos órdenes de magnitud más rápido que realizar cientos de comprobaciones de reglas de iptables.ipset
no se limita a las direcciones IP. También puede coincidir en función de los puertos, la tupla de puerto IP, las direcciones de red / subred, la tupla de IP-MAC, y así sucesivamente. Y puede coincidir con esos criterios como origen o destino o una combinación de ambos (en el caso de las tuplas).Y finalmente, con
ipset
usted puede poner automáticamente las direcciones IP en listas negras / blancas. Estas listas negras / blancas también pueden "envejecer", eliminando así automáticamente la dirección IP después de que haya transcurrido un período de tiempo configurable.Consulte
ipset
la página de manual de '' para obtener más detalles.NOTA MUY IMPORTANTE:
Es posible que algunas distribuciones de Linux no tengan soporte 'listo para usar'
ipset
(por ejemplo, Ubuntu 10.04 tuvo este problema). En estos sistemas, un método es instalaripset
desde el código fuente.En su lugar, descargue
ipset
la fuente de su sitio web: http://ipset.netfilter.org/install.htmlAlternativamente, si usa
xtables-addons
, ipset se incluye en su fuente: http://xtables-addons.sourceforge.net/fuente
Agregue comentarios a sus reglas:
fuente
Bloquear ataques TCP bien conocidos
Agregue las siguientes reglas, preferiblemente en
-t raw -A PREROUTING
Los ataques que se bloquean son, respectivamente:
(siéntase libre de editar los nombres de los ataques anteriores)
fuente
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
podría eliminarse, ya-p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
que capturará cada paquete que pueda bloquear.Habilitar NAT
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
El paso 1 establece el parámetro del kernel para permitir el reenvío de ip, el paso 2 configura una regla de iptables que habilita NAT en la interfaz eth0.
fuente
/etc/sysctl.conf
net.ipv4.ip_forward = 1
. (Suponiendo Red Hat o derivado)Bloquear ataques ICMP
Agregue las siguientes reglas, preferiblemente en
-t raw -A PREROUTING
La primera regla bloquea todos los paquetes ICMP cuyo "indicador de fragmentación" no es 0. (ICMP nunca debe estar fragmentado; deben llevar pequeñas cargas útiles)
La segunda regla bloquea los paquetes ICMP no fragmentados de gran tamaño.
fuente
usando FireHOL - conveniente envoltorio de iptables
Lo encontré mucho más intuitivo que los comandos directos de iptables. Especialmente para personas con experiencia previa con otros firewalls:
fuente
(de mi archivo iptables_tricks.txt, compilado de muchos lugares: P)
Hace que iptables espere 15 segundos entre nuevas conexiones desde la misma IP en el puerto 22 (SSH):
fuente
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --rttl --name SSH -j DROP
Video tutoriales de IPTABLES
Episodio 1 http://www.youtube.com/watch?v=ldB8kDEtTZA&feature=player_embedded
Episodio 2 http://www.youtube.com/watch?v=aDaEXxRHeXY&feature=related
Episodio final
http://www.youtube.com/watch?v=JojqHKcSxpo&feature=player_embedded
Será un buen comienzo para cualquier novato.
fuente
Conjuntos de IP revisitados
Ya hay una respuesta que menciona los conjuntos de IP. Sin embargo, es más bien unidimensional porque se enfoca en las ganancias de rendimiento sobre las reglas clásicas y el hecho de que los conjuntos de IP mitigan el problema que se tiene con muchas direcciones IP individuales que no se pueden expresar fácilmente como una subred en notación CIDR.
Notación utilizada a continuación
Porque
ipset
usaré la notación leídaipset restore
y escrita poripset save
.En correspondencia con
iptables
(yip6tables
) reglas, usaré la notación como leídaiptables-restore
y escrita poriptables-save
. Esto hace una notación más corta y me permite resaltar posibles reglas solo IPv4 (prefijadas-4
) o solo IPv6 (prefijadas-6
).En algunos ejemplos, desviaremos el flujo de paquetes a otra cadena. Se supone que la cadena existe en ese punto, por lo que no se producen las líneas para crear las cadenas (ni se menciona el nombre de la tabla ni los comandos
COMMIT
al final).Conjuntos de IP avanzados
Los conjuntos de IP pueden hacer mucho más de lo que se mencionó en la otra respuesta y definitivamente debe leer la documentación del conjunto de IP (
ipset(8)
) junto coniptables-extensions(8)
esta breve entrada aquí.Por ejemplo voy a centrar principalmente en tres tipos de conjuntos:
hash:ip
,hash:net
ylist:set
, pero no son más que aquellos y todos ellos tienen casos de uso válidos.Por ejemplo, también puede hacer coincidir los números de puerto, no solo las direcciones IP .
Guardar y restaurar conjuntos de IP como con
iptables-save
yiptables-restore
Puede crear declaraciones de conjuntos de IP en masa e importarlas canalizándolas en
ipset restore
. Si desea que su comando sea más resistente frente a entradas ya existentes, useipset -exist restore
.Si sus reglas están en un archivo llamado
default.set
que usaría:Un archivo como ese puede contener entradas a
create
conjuntos y aadd
entradas en ellos. Pero, en general, la mayoría de los comandos de la línea de comandos parecen tener una versión correspondiente en los archivos. Ejemplo (crear un conjunto de servidores DNS):Aquí se crea un conjunto para IPv4 (
dns4
) y uno para IPv6 (dns6
).Tiempos de espera en conjuntos de IP
Los tiempos de espera en conjuntos de IP pueden establecerse como predeterminados por conjunto y también por entrada. Esto es muy útil para escenarios en los que desea bloquear a alguien temporalmente (por ejemplo, para escanear puertos o intentar forzar por fuerza bruta su servidor SSH).
La forma en que funciona es la siguiente (predeterminado durante la creación de conjuntos de IP):
Regresaremos a estos conjuntos en particular a continuación y la justificación de por qué están configurados como están.
Si desea establecer su tiempo de espera para una dirección IP en particular, simplemente puede decir:
Para bloquear IP 1.2.3.4 durante dos horas en lugar de la media hora predeterminada (establecida).
Si tuviera que ver eso con
ipset save ssh_dynblock4
un poco de tiempo, vería algo en la línea de:Advertencias de tiempo de espera
Kernel error received: Unknown error -1
).sudo ipset add ssh_dynblock4 1.2.3.4 timeout $((120*60))
Comprobando si existe una entrada en un conjunto de IP dado
Dentro de sus scripts puede ser útil ver si ya existe una entrada. Esto se puede lograr con lo
ipset test
que devuelve cero si la entrada existe y, de lo contrario, no es cero. Por lo tanto, las comprobaciones habituales se pueden aplicar en un script:Sin embargo, en muchos casos es preferible usar el
-exist
interruptor paraipset
que no se queje de las entradas existentes.Completar conjuntos de IP a partir de
iptables
reglasEsta, en mi opinión, es una de las características principales de los conjuntos de IP. No solo puede hacer coincidir las entradas de un conjunto de IP, sino que también puede agregar nuevas entradas a un conjunto de IP existente.
Por ejemplo, en esta respuesta a esta pregunta tienes:
... con la intención de limitar la velocidad de los intentos de conexión a SSH (puerto TCP 22). El módulo utilizado
recent
realiza un seguimiento de los intentos de conexión recientes. Sin embargo, en lugar delstate
módulo, prefiero elconntrack
módulo.En este caso, estoy redirigiendo el flujo a la
SSH
cadena de modo que no tenga que repetirme-p tcp --dport ssh
para cada regla.Reiterar:
-m set
se daiptables
cuenta de que estamos usando conmutadores delset
módulo (que maneja conjuntos de IP)--match-set ssh_dynblock4 src
le diceiptables
que haga coincidir la dirección de origen (src
) con el conjunto nombrado (ssh_dynblock4
)sudo ipset test ssh_dynblock4 $IP
(donde$IP
contiene la dirección IP de origen para el paquete)-j SET --add-set ssh_dynblock4 src --exist
agrega o actualiza la dirección de origen (src
) del paquete en el conjunto de IPssh_dynblock4
. Si existe una entrada (--exist
), simplemente se actualizará.sudo ipset -exist add ssh_dynblock4 $IP
(donde$IP
contiene la dirección IP de origen para el paquete)Si en cambio quisieras hacer coincidir la dirección de destino / destino, usarías en
dst
lugar desrc
. Consulte el manual para más opciones.Conjuntos de conjuntos
Los conjuntos de IP pueden contener otros conjuntos. Ahora, si siguió el artículo hasta aquí, se habrá preguntado si es posible combinar conjuntos. Y por supuesto que es. Para los conjuntos de IP de arriba, podemos crear dos conjuntos de conjuntos
ssh_dynblock
y,ssh_loggedon
respectivamente, contener los conjuntos solo IPv4 y solo IPv6:Y la siguiente pregunta que debería surgir en su mente es si esto nos permite hacer coincidir y manipular conjuntos de IP de una manera independiente de la versión de IP.
Y la respuesta a eso es un rotundo: ¡SÍ! (por desgracia, esto no se documentó explícitamente la última vez que lo verifiqué)
En consecuencia, las reglas de la sección anterior se pueden reescribir para leer:
lo cual es mucho más conciso. Y sí, esto está probado y probado y funciona de maravilla.
Poniendo todo junto: defensa de fuerza bruta SSH
En mis servidores, tengo un script ejecutado como un
cron
trabajo que toma un montón de nombres de host y los resuelve en direcciones IP, luego lo introduce en el conjunto de IP para "hosts de confianza". La idea es que los hosts de confianza tengan más intentos de iniciar sesión en el servidor y no estén necesariamente bloqueados por el tiempo que nadie más.Por el contrario, tengo países enteros bloqueados para conectarse a mi servidor SSH, con la excepción (potencial) de hosts confiables (es decir, el orden de las reglas es importante).
Sin embargo, eso se deja como un ejercicio para el lector. Aquí me gustaría agregar una solución ordenada que utilizará los conjuntos contenidos en el
ssh_loggedon
conjunto para permitir que los intentos de conexión posteriores se transmitan y no estén sujetos al mismo escrutinio que los otros paquetes.Es importante recordar los tiempos de espera predeterminados de 90 minutos
ssh_loggedon
y 30 minutosssh_dynblock
al observar las siguientesiptables
reglas:Ahora debería preguntarse cómo termina la dirección IP de conexión en los
ssh_loggedon
subconjuntos. Entonces sigue leyendo ...Bonificación: agregar la IP con la que inicia sesión durante el inicio de sesión SSH
Si ha experimentado con
sshrc
y amigos, se habrá enterado de sus defectos. Pero PAM viene al rescate. Un módulo llamadopam_exec.so
nos permite invocar un script durante el inicio de sesión SSH en un punto en el que sabemos que el usuario está admitido.A
/etc/pam.d/sshd
continuación, las entradaspam_env
ypam_selinux
agregan la siguiente línea:y asegúrese de que su versión del script (
/path/to/your/script
arriba) exista y sea ejecutable.PAM usa variables de entorno para comunicar lo que está sucediendo, por lo que puede usar un script simple como este:
Desafortunadamente, la
ipset
utilidad no parece tener la inteligencia incorporada de netfilter. Por lo tanto, debemos distinguir entre IPv4 e IPv6 IP al agregar nuestra entrada. Deipset
lo contrario , supondremos que queremos agregar otro conjunto al conjunto de conjuntos, en lugar de la IP. Y, por supuesto, es poco probable que haya un conjunto con el nombre de una IP :)Por lo tanto, verificamos
:
la dirección IP y agregamos6
el nombre del conjunto en tal caso y de4
otra manera.El fin.
fuente
Otra GUI que se puede utilizar para configurar iptables es Firewall Builder . Permite a los usuarios crear elementos de regla como objetos en una base de datos y luego arrastrar y soltar estos objetos en un editor de reglas para crear la política de firewall deseada. Luego, la aplicación genera un archivo de script con todos los comandos de iptables necesarios para implementar las reglas.
A diferencia de otras soluciones de GUI de iptables donde solo puede administrar una configuración de iptables a la vez, con Firewall Builder puede administrar una gran cantidad de configuraciones de iptables desde una sola aplicación. Firewall Builder se ejecuta en Linux, Windows y Mac OS X, ha existido durante más de 10 años y tiene miles de usuarios activos en todo el mundo.
Divulgación completa: soy el cofundador de NetCitadel, que es la compañía que desarrolla Firewall Builder.
fuente
registrar la conexión saliente con uid
puerto / reenvío de conexión:
fuente
NFLOG
objetivo. Permite un prefijo de línea más largo y el demonio de modo de usuario también puede iniciar sesión en bases de datos.Haga coincidir varios nombres de interfaz con un comodín
Ejemplo: ¿tiene
eth0
yeth1
desea permitir tráfico entre ellos?Lo he usado en el pasado para hacer coincidir las
veth<something>
interfaces creadas y nombradas dinámicamente por LXC. Entonces puedo combinar todo a la vez conveth+
.También mencioné intencionalmente algunas interfaces
_<something>
para hacer coincidir_+
.fuente
Bloquear valores de MSS poco comunes
Objetivo SYNPROXY para protección DDos
Establecer paquetes de sincronización en la tabla de seguimiento de conexiones en la tabla sin formato
Habilite synproxy para el servidor http:
Recurso: objetivo SYNPROXY del blog RHEL
fuente
Limitar todas las direcciones IP individuales a una cuota de ancho de banda saliente con conjuntos de IP
Puede configurar su servidor para permitir solo cada IP 15GiByte individual de uso de ancho de banda por mes, con la esperanza de reflejar o esquivar un ataque de uso de ancho de banda, tal vez para su cuota de ancho de banda medida en su ISP. Se puede lograr de la siguiente manera:
Primero cree los conjuntos de IP para IPv4 e IPv6:
Ahora agregue sus reglas de iptables. La primera línea agregará la IP al conjunto si aún no está allí. La segunda línea no coincidirá si los bytes transferidos para la IP en el conjunto son mayores que la cantidad especificada. Luego, se hace lo mismo para IPv6.
Esto evitará ataques como que un usuario solicite un archivo grande de su servidor web durante un largo período de tiempo, o de cualquier servicio para el caso. Lo mismo se puede hacer para la cadena INPUT.
fuente
Algo que hago, principalmente debido a mi ignorancia de una solución más elegante, es verificar manualmente mis registros de Nginx cada 4 horas y el servidor de correo registra cada 2 minutos para acceso excesivo por IP individuales. Ejecuto algunos scripts juntos que:
access.log
y enumere las 10 principales IP organizadas por la cantidad de visitas que tienen al servidoriptables.save
Así es como se ve:
autoBanIPs_mail.sh checkBadIPs_mail.shUna cosa que es MUY importante tener en cuenta aquí es que NECESITA configurar una lista blanca o comenzará a bloquear una gran cantidad de IP auténticas de los servidores de los que acaba de recibir una gran cantidad de correo electrónico o en el caso de otros registros, IP que simplemente golpea mucho tu servidor por razones legítimas. Mi lista blanca acaba de integrarse en este script agregando tuberías grep justo después | grep ']' | que se parece a esto "grep -v 127.0 |" .
BlockIPDebe tomarse el tiempo para enseñarle a su servidor qué IP de alto tráfico son legítimas y cuáles no. Para mí, esto significaba que tenía que pasar la primera semana más o menos revisando mis registros manualmente cada dos horas, buscando IP de alto tráfico en iplocation.net y luego agregando los legítimos como amazon, box.com o incluso mi hogar / oficina Los rangos de IP a esta lista blanca. Si no lo hace, probablemente será bloqueado de su propio servidor o comenzará a bloquear servidores legítimos de correo / web y causará interrupciones en el correo electrónico o el tráfico.
Una vez más, sé que esto es grosero como el infierno y probablemente haya un buen protocolo limpio y eficiente que haga todo esto, pero no lo sabía y esto ha estado funcionando durante un año o dos y mantiene a raya a los malos. Lo único que recomendaría SERIAMENTE es que tenga un proxy u otro servidor en las alas que pueda usar para acceder a su servidor principal. La razón es que si está haciendo desarrollo web algún día de la nada y usted haga ping 2000 veces en 5 horas para algunas pruebas que podría bloquear sin tener que volver a entrar, excepto por un proxy.
Puede ver que
checkBadIPs.sh
he puesto grep -v 127.0 y en mis archivos reales tengo un montón de reglas de ignorar mis propias IP y otros rangos de IP confiables, pero a veces su IP cambia, olvida actualizar y luego está bloqueado fuera de su propio servidor.De todos modos, espero que ayude.
ACTUALIZAR
He cambiado un poco las cosas para que ahora, en lugar de verificar cada dos horas, revise algunos registros cada 2 minutos, principalmente mi registro de autenticación ssh y el registro de correo, ya que estaban siendo machacados :(.
Configuré secuencias de comandos específicas para cada archivo de registro, aunque sería bastante fácil a partir de la secuencia de comandos manual que uso cuando quiero inspeccionar los registros. Se ve como esto:
Esto requiere 2 entradas cuando se ejecuta, el archivo de registro que desea escanear y qué tan atrás en el pasado desea escanear.
Entonces, si quisiera verificar mail.log para ver los conteos de IP, digamos 75 minutos en el pasado, ejecutaría:
fuente
ipset
lugar de alargar la cadena de iptables, pero la idea es genial y creo que los aplicaré a mis servidores de producción. ¡Gracias por compartir!Estoy de acuerdo con los comentarios sobre ipsets y tcp flags, pero todavía falta mucho:
Use xtables-addons geoip match en lugar de ipsets para las listas de países. Actualice los datos de geoip regularmente (al menos una vez al mes). Los datos son más dinámicos que una lista de ipset disparar y olvidar.
Considere el seguimiento del estado de conexión con banderas tcp. Por ejemplo, un tcp RST o ACK solo tiene sentido para una conexión establecida. SYN tiene sentido solo para conexiones nuevas y relacionadas. Un SYN para una conexión establecida significa que se perdió su SYN + ACK o un intento de pirateo y debe restablecerse ya que ambos lados de la conexión no están de acuerdo en cuanto al estado.
Aunque ninguno, SYN + RST y FIN + RST son combinaciones ilegales, SYN + FIN ahora es válido en TCP de apertura rápida (opción TCP 34), especialmente para DNS. Los paquetes SYN, incluso con apertura rápida, no deben fragmentarse. No considero que las reglas con las banderas PSH y URG sean útiles. No confunda el estado de seguimiento de la conexión con el estado TCP: se establece una respuesta RST a un paquete SYN para fines de seguimiento.
SYNPROXY es para paquetes reenviados y no agrega nada para los entregados localmente más allá del soporte de syncookie.
Los paquetes de error ICMP siempre estarán en el estado relacionado y de longitud 48: 576 si son válidos. Longitud 84: 1280 para IPv6. Todos los demás deben ser ignorados. Como su tamaño máximo es también el MTU mínimo, nunca deben fragmentarse. Las solicitudes de ICMP (pings, marcas de tiempo, etc.) siempre serán nuevas y las respuestas se establecerán. Descarte paquetes ICMP en otros estados.
Al igual que el ejemplo de SSH con una lista reciente y que acepta solo paquetes SYN posteriores, lo mismo debe hacerse para SMTP, y es similar a la "lista gris" en el dato de la dirección IP solo.
En la tabla de filtro, la primera regla (o la segunda, si acepta paquetes de estado establecidos primero) en las cadenas de entrada y salida debe aceptar todo en la interfaz de bucle invertido. Debe confiar en sus propios paquetes internos. Si no puede, tiene mayores problemas más allá de una solución de firewall.
Por último, no copie ciegamente las reglas a menos que realmente comprenda lo que hacen. Tantas listas similares de reglas hacen eso, y la mayoría de las veces, el resultado es ridículo.
fuente
fuente