Usando lista branca e lista negra com 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 portas
#!/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
Bloquear portscan
# 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
Pacotes falsificados / 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 Smurf
# 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 (também conhecido como ping)
# Don't allow pings through
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
iptables
na linha 8 e depois$IPTABLES
mais tarde. É o suficiente apenas para usar emiptables
qualquer lugar? Caso contrário, suponho que você precise atribuir algo como oIPTABLES=/sbin/iptables
certo?Otimize o desempenho do netfilter usando
ipset
Se você escrever muitas regras semelhantes baseadas em mero IP, porta ou ambas, considere usar
ipset
para otimizar o desempenho do netfilter.Por exemplo:
Isso significa que um pacote com o endereço de origem 192.168.251.177 deve primeiro percorrer centenas de regras antes de obter o veredicto de ACEITAR.
Obviamente, administradores de sistemas experientes dividirão as regras por sub-rede. Mas isso ainda significa centenas de regras.
ipset
para o resgate!Primeiro, defina um conjunto de IPs do
ipmap
tipo:Em seguida, preencha-o com os endereços:
Por fim, substitua as centenas de regras do iptables acima por uma regra:
Quando um pacote chega, o netfilter executará uma pesquisa de bitmap muito rápida pelo IP de origem (src) do pacote no
Allowed_Hosts
conjunto de IPs. Todos os pacotes provenientes de 192.168.0.0/16 experimentarão uma regra. E acredite em mim: pesquisar um bitmap é pelo menos duas ordens de magnitudes mais rápido do que realizar centenas de verificação de regras do iptables.ipset
não está limitado a endereços IP. Também pode corresponder com base em portas, tupla de porta IP, endereços de rede / sub-rede, tupla de IP-MAC e assim por diante. E pode corresponder a esses critérios como origem ou destino ou uma combinação de ambos (no caso de tuplas).E, finalmente,
ipset
você pode colocar automaticamente os endereços IP nas listas negras / brancas. Essas listas negras / listas brancas também podem "envelhecer", excluindo automaticamente o endereço IP após um período configurável.Por favor, consulte a
ipset
página do manual para mais detalhes.NOTA MUITO IMPORTANTE:
Algumas distribuições de Linux podem não ter suporte 'pronto para uso'
ipset
(por exemplo, Ubuntu 10.04 teve esse problema). Nestes sistemas, um método é instalar aipset
partir do código fonte.Em vez disso, faça o download
ipset
da fonte do site: http://ipset.netfilter.org/install.htmlComo alternativa, se você usar
xtables-addons
, o ipset será incluído em sua fonte: http://xtables-addons.sourceforge.net/fonte
Adicione comentários às suas regras:
fonte
Bloquear ataques TCP conhecidos
Adicione as seguintes regras, de preferência em
-t raw -A PREROUTING
Os ataques bloqueados são, respectivamente:
(fique à vontade para editar os nomes dos ataques acima)
fonte
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
pode ser removido, pois-p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
captura todos os pacotes que pode bloquear.Ativando o NAT
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
A etapa 1 define o parâmetro do kernel para permitir o encaminhamento de ip, a etapa 2 configura uma regra de tabelas de ip que habilita o NAT na interface eth0.
fonte
/etc/sysctl.conf
net.ipv4.ip_forward = 1
. (Assumindo Red Hat ou derivado.)Bloquear ataques de ICMP
Adicione as seguintes regras, de preferência em
-t raw -A PREROUTING
A primeira regra bloqueia todos os pacotes ICMP cujo "sinalizador de fragmentação" não é 0. (ICMP nunca deve ser fragmentado; eles devem estar carregando pequenas cargas úteis)
A segunda regra bloqueia pacotes ICMP não fragmentados de tamanho grande.
fonte
usando FireHOL - wrapper conveniente do iptables
Achei muito mais intuitivo do que os comandos diretos do iptables. Especialmente para pessoas com experiência anterior com outros firewalls:
fonte
(do meu arquivo iptables_tricks.txt, recompilado de vários lugares: P)
Faz o iptables esperar 15 segundos entre novas conexões do mesmo IP na porta 22 (SSH):
fonte
-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
Tutoriais em vídeo IPTABLES
Episódio 1 http://www.youtube.com/watch?v=ldB8kDEtTZA&feature=player_embedded
Episódio 2 http://www.youtube.com/watch?v=aDaEXxRHeXY&feature=related
Episódio final
http://www.youtube.com/watch?v=JojqHKcSxpo&feature=player_embedded
Será um bom começo para qualquer novato.
fonte
Conjuntos de IP revisitados
Já existe uma resposta mencionando conjuntos de IPs. No entanto, é bastante unidimensional, pois se concentra nos ganhos de desempenho em relação às regras clássicas e no fato de que os conjuntos de IP atenuam o problema que se tem com muitos endereços IP individuais que não podem ser facilmente expressos como uma sub-rede na notação CIDR.
Notação usada abaixo
Pois
ipset
usarei a notação lidaipset restore
e escrita poripset save
.Correspondentemente, para as regras
iptables
(eip6tables
), usarei a notação conforme lidaiptables-restore
e escrita poriptables-save
. Isso contribui para uma notação mais curta e me permite destacar regras em potencial apenas IPv4 (prefixadas-4
) ou somente IPv6 (prefixadas-6
).Em alguns exemplos, desviaremos o fluxo de pacotes para outra cadeia. Presume-se que a cadeia exista nesse ponto; portanto, as linhas para criar as cadeias não são produzidas (nem o nome da tabela é mencionado ou os comandos são
COMMIT
exibidos no final).Conjuntos de IP avançados
Os conjuntos de IPs podem fazer muito mais do que o mencionado na outra resposta e você deve definitivamente ler a documentação do conjunto de IPs (
ipset(8)
),iptables-extensions(8)
além desta breve entrada aqui.Por exemplo, eu vou concentrar-se principalmente em três tipos de conjunto:
hash:ip
,hash:net
elist:set
, mas há mais do que aqueles e todos eles têm casos de uso válidos.Você pode, por exemplo, também combinar números de porta, não apenas endereços IP .
Salvar e restaurar conjuntos de IPs como
iptables-save
eiptables-restore
Você pode criar declarações de conjunto de IP em massa e importá-las, canalizando-as para
ipset restore
. Se você deseja tornar seu comando mais resistente a entradas já existentes, useipset -exist restore
.Se suas regras estiverem em um arquivo chamado,
default.set
você usaria:Um arquivo como esse pode conter entradas para
create
conjuntos eadd
entradas para eles. Mas geralmente a maioria dos comandos da linha de comando parece ter uma versão correspondente nos arquivos. Exemplo (criando um conjunto de servidores DNS):Aqui, um conjunto é criado para IPv4 (
dns4
) e outro para IPv6 (dns6
).Tempo limite em conjuntos de IP
Os tempos limites nos conjuntos de IPs podem ser definidos como padrão por conjunto e também por entrada. Isso é muito útil para cenários em que você deseja bloquear alguém temporariamente (por exemplo, para varredura de porta ou tentativa de força bruta no servidor SSH).
A maneira como isso funciona é a seguinte (padrão durante a criação de conjuntos de IP):
Voltaremos a esses conjuntos específicos abaixo e à lógica de por que eles são definidos da maneira que são.
Se você deseja definir o tempo limite para um endereço IP específico, basta dizer:
Para bloquear o IP 1.2.3.4 por duas horas, em vez da meia hora padrão (definida).
Se você analisar isso
ipset save ssh_dynblock4
daqui a pouco, verá algo como:Advertências de tempo limite
Kernel error received: Unknown error -1
).sudo ipset add ssh_dynblock4 1.2.3.4 timeout $((120*60))
Verificando se existe uma entrada em um determinado conjunto de IPs
Dentro de seus scripts, pode ser útil verificar se uma entrada já existe. Isso pode ser alcançado com o
ipset test
qual retorna zero se a entrada existir e diferente de zero. Portanto, as verificações usuais podem ser aplicadas em um script:No entanto, em muitos casos, você prefere usar a
-exist
opçãoipset
para direcioná-la a não reclamar das entradas existentes.Preenchendo conjuntos de IPs de
iptables
regrasEste, na minha opinião, é um dos principais recursos dos conjuntos de IPs. Além de poder corresponder às entradas de um conjunto de IPs, você também pode adicionar novas entradas a um conjunto de IPs existente.
Por exemplo, nesta resposta a esta pergunta, você tem:
... com a intenção de limitar a taxa de tentativas de conexão ao SSH (porta TCP 22). O módulo usado
recent
controla as tentativas recentes de conexão. Em vez dostate
módulo, eu prefiro oconntrack
módulo, no entanto.Nesse caso, estou redirecionando o fluxo para a
SSH
cadeia, de modo que não precise me repetir-p tcp --dport ssh
para todas as regras.Reiterar:
-m set
tornaiptables
conscientes de que estamos usando interruptores doset
módulo (que lida com conjuntos IP)--match-set ssh_dynblock4 src
informaiptables
para combinar o endereço de origem (src
) com o conjunto nomeado (ssh_dynblock4
)sudo ipset test ssh_dynblock4 $IP
(onde$IP
contém o endereço IP de origem do pacote)-j SET --add-set ssh_dynblock4 src --exist
adiciona ou atualiza o endereço de origem (src
) do pacote no conjunto de IPsssh_dynblock4
. Se existir uma entrada (--exist
), ela será simplesmente atualizada.sudo ipset -exist add ssh_dynblock4 $IP
(onde$IP
contém o endereço IP de origem do pacote)Se você deseja corresponder ao endereço de destino / destino, use em
dst
vez desrc
. Consulte o manual para mais opções.Conjuntos de conjuntos
Os conjuntos de IPs podem conter outros conjuntos. Agora, se você seguiu o artigo até aqui, terá se perguntado se é possível combinar conjuntos. E é claro que é. Para os conjuntos de IPs acima, podemos criar dois conjuntos de juntas
ssh_dynblock
e,ssh_loggedon
respectivamente, para conter os conjuntos somente de IPv4 e somente IPv6:E a próxima pergunta que deve aparecer em sua mente é se isso nos permite combinar e manipular conjuntos de IP de maneira independente de versão de IP.
E a resposta para isso é retumbante: SIM! (infelizmente, isso não foi documentado explicitamente da última vez que verifiquei)
Consequentemente, as regras da seção anterior podem ser reescritas para ler:
o que é muito mais conciso. E sim, isso é experimentado e testado e funciona como um encanto.
Juntando tudo: defesa da força bruta do SSH
Nos meus servidores, eu tenho um script executado como um
cron
trabalho que pega vários nomes de host e os resolve para endereços IP, depois alimenta-o no conjunto de IPs para "hosts confiáveis". A idéia é que os hosts confiáveis obtenham mais tentativas de logon no servidor e não sejam necessariamente bloqueados pelo tempo que mais alguém.Por outro lado, países inteiros impediram de se conectar ao meu servidor SSH, com a exceção (potencial) de hosts confiáveis (ou seja, a ordem das regras é importante).
No entanto, isso é deixado como um exercício para o leitor. Aqui, eu gostaria de adicionar uma solução elegante que utilizará os conjuntos contidos no
ssh_loggedon
conjunto para permitir que tentativas subseqüentes de conexão sejam realizadas e não sejam sujeitas ao mesmo escrutínio que os outros pacotes.É importante lembrar os tempos limite padrão de 90 minutos
ssh_loggedon
e 30 minutosssh_dynblock
ao observar as seguintesiptables
regras:Agora, você deve se perguntar como o endereço IP de conexão termina nos
ssh_loggedon
subconjuntos. Então continue a ler ...Bônus: adicionando o IP com o qual você efetua login durante o logon SSH
Se você já fez experiências com
sshrc
amigos, já aprendeu suas deficiências. Mas o PAM vem em socorro. Um módulo chamadopam_exec.so
permite invocar um script durante o logon SSH em um ponto em que sabemos que o usuário é admitido.No
/etc/pam.d/sshd
abaixo dopam_env
epam_selinux
entradas adicione a seguinte linha:e verifique se a sua versão do script (
/path/to/your/script
acima) existe e é executável.O PAM usa variáveis de ambiente para comunicar o que está acontecendo, para que você possa usar um script simples como este:
Infelizmente, o
ipset
utilitário não parece ter as esperanças internas do netfilter. Portanto, precisamos distinguir entre o conjunto de IPs IPv4 e IPv6 ao adicionar nossa entrada. Caso contrárioipset
, assumiremos que queremos adicionar outro conjunto ao conjunto de conjuntos, em vez do IP. E é claro que é improvável que exista um conjunto com o nome de um IP :)Portanto, verificamos
:
o endereço IP e anexamos6
ao nome do conjunto nesse caso ou4
não.O fim.
fonte
Outra GUI que pode ser usada para configurar o iptables é o Firewall Builder . Ele permite que os usuários criem elementos de regra como objetos em um banco de dados e, em seguida, arraste e solte esses objetos em um editor de regras para criar a política de firewall desejada. O aplicativo gera um arquivo de script com todos os comandos iptables necessários para implementar as regras.
Diferentemente de outras soluções da GUI do iptables, nas quais você só pode gerenciar uma configuração de iptables por vez, com o Firewall Builder, você pode gerenciar um grande número de configurações de iptables, tudo a partir de um único aplicativo. O Firewall Builder roda em Linux, Windows e Mac OS X, existe há mais de 10 anos e possui milhares de usuários ativos em todo o mundo.
Divulgação total - Sou co-fundador da NetCitadel, que é a empresa que desenvolve o Firewall Builder.
fonte
log de conexão de saída com uid
encaminhamento de porta / conexão:
fonte
NFLOG
alvo. Ele permite um prefixo de linha mais longo e o daemon do modo de usuário também pode efetuar logon nos bancos de dados.Combine vários nomes de interface com um curinga
Exemplo: você tem
eth0
eeth1
gostaria de permitir algum tráfego entre eles?Eu usei isso no passado para corresponder às
veth<something>
interfaces criadas dinamicamente e nomeadas pelo LXC. Para que eu possa combinar tudo de uma vez comveth+
.Também intencionalmente nomeei algumas interfaces
_<something>
para comparar_+
.fonte
Bloquear valores incomuns de MSS
Alvo SYNPROXY para proteção de DDos
Definir pacotes syn para a tabela de rastreamento de conexão na tabela bruta
Ative o synproxy para o servidor http:
Recurso: alvo SYNPROXY do blog RHEL
fonte
Limitando todos os endereços IP individuais a uma cota de largura de banda de saída com conjuntos de IP
Você pode configurar seu servidor para permitir apenas cada IP 15GiByte individual de uso de largura de banda por mês, na esperança de refletir ou evitar um ataque de uso de largura de banda, talvez para sua cota de largura de banda medida no seu ISP. Pode ser realizado da seguinte maneira:
Primeiro, crie os conjuntos de IPs para IPv4 e IPv6:
Agora adicione suas regras do iptables. A primeira linha adicionará o IP ao conjunto se ele ainda não estiver lá. A segunda linha não corresponderá se os bytes transferidos para o IP no conjunto forem maiores que a quantidade especificada. O mesmo é feito para o IPv6.
Isso impedirá ataques como um usuário solicitando um arquivo grande do seu servidor da web por um longo período de tempo ou de qualquer serviço nesse sentido. O mesmo pode ser feito para a cadeia INPUT.
fonte
Algo que faço, principalmente devido à minha ignorância de uma solução mais elegante, é verificar manualmente meus logs do Nginx a cada 4 horas e o servidor de email a cada 2 minutos para acesso excessivo por IPs individuais. Eu corro alguns scripts juntos que:
access.log
e liste os 10 principais IPs organizados por quantos hits eles têm no servidoriptables.save
Aqui está o que parece:
autoBanIPs_mail.sh checkBadIPs_mail.shUma coisa que é MUITO importante notar aqui é que você PRECISA configurar uma lista de permissões ou começa a bloquear muitos IPs autênticos de servidores, para os quais você recebe muitos emails de ou no caso de outros logs, IPs que basta acessar muito o servidor por razões legítimas. Minha lista de permissões é incorporada neste script adicionando grep pipes logo após | grep ']' | que se parece com isso "grep -v 127.0 |" .
BlockIPVocê precisa reservar um tempo para ensinar ao servidor quais IPs de alto tráfego são legítimos e quais não são. Para mim, isso significava que eu tinha que passar a primeira semana mais ou menos verificando meus logs manualmente a cada duas horas, procurando ips de alto tráfego no iplocation.net e adicionando os legítimos como amazon, box.com ou até minha casa / escritório O intervalo de IPs para esta lista de permissões. Caso contrário, você provavelmente será bloqueado em seu próprio servidor ou começará a bloquear servidores de correio / web legítimos e causará interrupções no email ou no tráfego.
Novamente, eu sei que isso é bruto como o inferno e provavelmente existe um protocolo eficiente, limpo e eficiente, que faz tudo isso, mas eu não sabia disso e isso já dura um ano ou dois e mantém os bandidos à distância. A única coisa que eu seriamente recomendo seriamente que você tenha um proxy ou outro servidor disponível para acessar o servidor principal. A razão é que, se você estiver desenvolvendo um dia um dia, do nada, e você efetue ping 2000 vezes em 5 horas para alguns testes, você poderá ser bloqueado sem retorno, exceto por um proxy.
Você pode ver que em
checkBadIPs.sh
eu coloquei grep -v 127.0 e em meus arquivos reais eu tenho várias regras de ignorar para meus próprios IPs e outros intervalos de IP confiáveis, mas às vezes seu IP muda, você esquece de atualizar e fica bloqueado fora do seu próprio servidor.Enfim, espero que ajude.
ATUALIZAR
Eu mudei um pouco as coisas para que, agora, em vez de verificar a cada duas horas, alguns logs sejam verificados a cada 2 minutos, principalmente meu log de autenticação ssh e o log de email, pois eles estavam sendo pressionados :(.
Eu configuro scripts específicos para cada arquivo de log, embora seja fácil o suficiente com o script manual que uso quando desejo inspecionar logs. Se parece com isso:
Isso requer 2 entradas ao executar, o arquivo de log que você deseja verificar e a que distância do passado você deseja verificar.
Portanto, se eu quisesse verificar mail.log para as contagens de IP, digamos 75 minutos no passado, eu executaria:
fonte
ipset
ao invés de alongar a cadeia iptables, mas a ideia é ótima e acho que vou aplicá-las aos meus servidores de produção. Obrigado por compartilhar!Concordo com os comentários sobre ipsets e sinalizadores tcp, mas ainda falta muito:
Use xtables-addons geoip match em vez de ipsets para listas de países. Atualize os dados geoip regularmente (pelo menos uma vez por mês). Os dados são mais dinâmicos que uma lista de ipsets de ignorar.
Considere o rastreamento do estado da conexão com sinalizadores tcp. Por exemplo, um tcp RST ou ACK só faz sentido para uma conexão estabelecida. O SYN faz sentido apenas para conexões novas e relacionadas. Um SYN para uma conexão estabelecida significa que seu SYN + ACK foi perdido ou uma tentativa de invasão e deve ser redefinido, pois os dois lados da conexão não concordam quanto ao estado.
Embora nenhum, SYN + RST e FIN + RST sejam combinações ilegais, o SYN + FIN é válido agora em TCP de abertura rápida (opção TCP 34), especialmente para DNS. Pacotes SYN, mesmo com abertura rápida, não devem ser fragmentados. Não considero regras com os sinalizadores PSH e URG como úteis. Não confunda o estado de rastreamento de conexão com o estado TCP: Uma resposta RST a um pacote SYN é estabelecida para fins de rastreamento.
O SYNPROXY é para pacotes encaminhados e não adiciona nada para os entregues localmente além do suporte ao syncookie.
Os pacotes de erro ICMP sempre estarão no estado relacionado e com comprimento 48: 576, se forem válidos. Comprimento 84: 1280 para IPv6. Todos os outros devem ser ignorados. Como o tamanho máximo também é o MTU mínimo, eles nunca devem ser fragmentados. As solicitações do ICMP (pings, registros de data e hora etc.) sempre serão novas e as respostas serão estabelecidas. Solte pacotes ICMP em outros estados.
Como o exemplo SSH com uma lista recente e aceitando apenas pacotes SYN subsequentes, o mesmo deve ser feito para o SMTP e é semelhante a "lista cinza" apenas no dado de endereço IP.
Na tabela de filtros, a primeira regra (ou a segunda, se aceitar pacotes de estado estabelecidos primeiro) nas cadeias de entrada e saída deve aceitar tudo na interface de loopback. Você deve confiar em seus próprios pacotes internos. Se não puder, você terá problemas maiores além de uma solução de firewall.
Por fim, não copie cegamente as regras, a menos que você realmente entenda o que elas fazem. Muitas listas de regras semelhantes fazem isso e, na maioria das vezes, o resultado é ridículo.
fonte
fonte