{"id":4748,"date":"2019-08-19T18:44:02","date_gmt":"2019-08-19T21:44:02","guid":{"rendered":"https:\/\/blog.clusterweb.com.br\/?p=4748"},"modified":"2019-08-19T18:44:02","modified_gmt":"2019-08-19T21:44:02","slug":"recursos-avancados-do-netfilter-iptables","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=4748","title":{"rendered":"Recursos avan\u00e7ados do netfilter \/ iptables"},"content":{"rendered":"<h3><span>Introdu\u00e7\u00e3o<\/span><\/h3>\n<p><span>\u00c9 comumente conhecido que o netfilter \/ iptables \u00e9 o firewall do sistema operacional Linux.\u00a0O que n\u00e3o \u00e9 comumente conhecido \u00e9 que o iptables tem muitas gemas escondidas que podem permitir que voc\u00ea fa\u00e7a coisas com seu firewall que voc\u00ea nunca imaginou.\u00a0Neste artigo, vou apresentar muitos desses recursos com alguns usos pr\u00e1ticos.\u00a0Se voc\u00ea n\u00e3o estiver\u00a0<\/span><em><span>au fait<\/span><\/em><span>\u00a0com as no\u00e7\u00f5es b\u00e1sicas de iptables, ent\u00e3o voc\u00ea deve ler o meu artigo anterior no Di\u00e1rio &#8221;\u00a0<\/span><span>Firewalling com netfilter \/ iptables<\/span><span>\u00a0&#8220;.<\/span><\/p>\n<p><!--more--><\/p>\n<p><span>Os seguintes recursos s\u00e3o discutidos:<\/span><\/p>\n<ol>\n<li><span>Especificando v\u00e1rias portas em uma regra<\/span><\/li>\n<li><span>Balanceamento de carga<\/span><\/li>\n<li><span>Restringindo o n\u00famero de conex\u00f5es<\/span><\/li>\n<li><span>Manter uma lista de conex\u00f5es recentes para combinar<\/span><\/li>\n<li><span>Correspond\u00eancia com uma cadeia na carga de dados de um pacote<\/span><\/li>\n<li><span>Regras baseadas em tempo<\/span><\/li>\n<li><span>Definindo cotas de transfer\u00eancia<\/span><\/li>\n<li><span>Correspond\u00eancia de pacotes com base nos valores de TTL<\/span><\/li>\n<\/ol>\n<p><span>Todos os recursos discutidos neste artigo s\u00e3o extens\u00f5es para os m\u00f3dulos de correspond\u00eancia de pacotes do iptables.\u00a0I utilizado apenas duas destas extens\u00f5es no artigo anterior: o\u00a0<\/span><code>--state<\/code><span>m\u00f3dulo que nos permitiu realizar uma filtragem pacotes com base em se eram\u00a0<\/span><code>NEW<\/code><span>,\u00a0<\/span><code>ESTABLISHED<\/code><span>,\u00a0<\/span><code>RELATED<\/code><span>ou\u00a0<\/span><code>INVALID<\/code><span>conex\u00f5es;\u00a0e a\u00a0<\/span><code>multiport<\/code><span>\u00a0extens\u00e3o, da qual eu irei detalhar mais neste artigo.<\/span><\/p>\n<p><span>Alguns dos m\u00f3dulos introduzidos neste artigo (marcados com um asterisco) ainda n\u00e3o entraram no kernel padr\u00e3o do Linux, mas um utilit\u00e1rio netfilter chamado &#8220;patch-o-matic&#8221; pode ser usado para adicion\u00e1-los ao seu pr\u00f3prio kernel e isso ser discutido no final do artigo.<\/span><\/p>\n<h3><span>1. Especificando M\u00faltiplas Portas com\u00a0<\/span><code>multiport<\/code><\/h3>\n<p><span>O\u00a0<\/span><code>multiport<\/code><span>m\u00f3dulo permite especificar um n\u00famero de portas diferentes em uma regra.\u00a0Isso permite menos regras e facilita a manuten\u00e7\u00e3o dos arquivos de configura\u00e7\u00e3o do iptables.\u00a0Por exemplo, se quisermos permitir acesso global \u00e0s portas SMTP, HTTP, HTTPS e SSH em nosso servidor, normalmente usar\u00edamos algo como o seguinte:<\/span><\/p>\n<pre class=\"code\"><span>-A INPUT -i eth0 -p tcp -m state --state NOVO --dport ssh -j ACCEPT<\/span><span>\r\n-A INPUT -i eth0 -p tcp -m state --state NOVO --dport smtp -j ACCEPT<\/span><span>\r\n-A INPUT -i eth0 -p tcp -m state --state NOVO --dport http -j ACCEPT<\/span><span>\r\n-A INPUT -i eth0 -p tcp -m state --state NOVO --dport https -j ACCEPT<\/span>\r\n<\/pre>\n<p><span>Usando o\u00a0<\/span><code>multiport<\/code><span>m\u00f3dulo de correspond\u00eancia, podemos agora escrever:<\/span><\/p>\n<pre class=\"code\"><span>-A INPUT -i eth0 -p tcp -m state --state NOVO -m multiport --dports ssh, smtp, http, https -j ACEITAR\r\n<\/span><\/pre>\n<p><span>Ele deve ser usado em conjunto com\u00a0<\/span><code>-p tcp<\/code><span>ou\u00a0<\/span><code>-p udp<\/code><span>somente at\u00e9 15 portas podem ser especificadas.\u00a0As op\u00e7\u00f5es suportadas s\u00e3o:<\/span><\/p>\n<blockquote>\n<dl>\n<dt><code>--sports port[,port,port...]<\/code><\/dt>\n<dd><span>corresponde \u00e0 (s) porta (s) de origem<\/span><\/dd>\n<dt><code>--dports port[,port,port...]<\/code><\/dt>\n<dd><span>corresponde ao (s) porto (es) de destino<\/span><\/dd>\n<dt><code>--ports port[,port,port...]<\/code><\/dt>\n<dd><span>corresponde \u00e0 (s) porta (s) de origem e destino<\/span><\/dd>\n<\/dl>\n<\/blockquote>\n<p><code>mport<\/code><sup><span>*<\/span><\/sup><span>\u00a0\u00e9 outra extens\u00e3o semelhante que tamb\u00e9m permite que voc\u00ea especifique intervalos de porta, por exemplo\u00a0<\/span><code>--dport 22,80,6000:6100<\/code><span>.<\/span><\/p>\n<h3><span>2. Balanceamento de carga com\u00a0<\/span><code>random<\/code><sup><span>*<\/span><\/sup><span>\u00a0ou\u00a0<\/span><code>nth<\/code><sup><span>*<\/span><\/sup><\/h3>\n<p><span>Tanto o\u00a0<\/span><code>random<\/code><span>e\u00a0<\/span><code>nth<\/code><span>extens\u00f5es podem ser usadas para balanceamento de carga.\u00a0Se, por exemplo, voc\u00ea desejasse equilibrar o tr\u00e1fego da Web recebido entre quatro servidores da Web espelhados, voc\u00ea poderia adicionar um dos seguintes conjuntos de regras \u00e0 sua<\/span><code>nat<\/code><span>tabela:<\/span><\/p>\n<pre class=\"code\"><span>-A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NOVO -m nth --contador 0 --todos os 4 --pacote 0 \\<\/span><span>\r\n    -j DNAT - para destino 192.168.0.5:80<\/span><span>\r\n-A PREROUTING -i eth0 -p tcp --dporta 80 -m state --state NEW -m nth --contador 0 --todos os 4 --pacote 1 \\<\/span><span>\r\n    -j DNAT - para destino 192.168.0.6:80<\/span><span>\r\n-A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NOVO -m nth --contador 0 --todos 4 --pacote 2 \\<\/span><span>\r\n    -j DNAT - para destino 192.168.0.7:80<\/span><span>\r\n-A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NOVO -m nth --contador 0 --todos 4 --pacote 3 \\<\/span><span>\r\n    -j DNAT - para destino 192.168.0.8:80<\/span>\r\n<\/pre>\n<p><span>ou:<\/span><\/p>\n<pre class=\"code\"><span>-A PREROUTING -i eth0 -p tcp --dporta 80 -m state --state NEW -m random - m\u00e9dia 25 \\<\/span><span>\r\n    -j DNAT - para destino 192.168.0.5:80<\/span><span>\r\n-A PREROUTING -i eth0 -p tcp --dporta 80 -m state --state NEW -m random - m\u00e9dia 25 \\<\/span><span>\r\n    -j DNAT - para destino 192.168.0.6:80<\/span><span>\r\n-A PREROUTING -i eth0 -p tcp --dporta 80 -m state --state NEW -m random - m\u00e9dia 25 \\<\/span><span>\r\n    -j DNAT - para destino 192.168.0.7:80<\/span><span>\r\n-A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NOVO \\<\/span><span>\r\n    -j DNAT - para destino 192.168.0.8:80<\/span>\r\n<\/pre>\n<p><span>A\u00a0<\/span><code>nth<\/code><span>extens\u00e3o correspondente permite que voc\u00ea corresponda ao en\u00e9simo pacote recebido pela regra.\u00a0Existem at\u00e9 16 (0 &#8230; 15) contadores para corresponder aos en\u00e9simos pacotes.\u00a0As quatro\u00a0<\/span><code>nth<\/code><span>regras\u00a0acima (\u00a0) usam o contador 0 para contar cada 4\u00ba pacote.\u00a0Depois que o 4\u00ba pacote \u00e9 recebido, o contador \u00e9 zerado.\u00a0A primeira regra corresponde ao primeiro pacote (\u00a0<\/span><code>--packet 0<\/code><span>) de cada quatro contados, a segunda regra corresponde ao segundo pacote (\u00a0<\/span><code>--packet 0<\/code><span>) e assim por diante.<\/span><\/p>\n<p><span>A\u00a0<\/span><code>random<\/code><span>extens\u00e3o correspondente permite combinar pacotes com base em uma determinada probabilidade.\u00a0A primeira regra do conjunto de\u00a0<\/span><code>random<\/code><span>regras acima corresponde a 25% (\u00a0<\/span><code>--average 25<\/code><span>) das conex\u00f5es TCP para a porta 80 e as redireciona para o primeiro servidor da Web espelhado.\u00a0Dos 75% de conex\u00f5es que n\u00e3o coincidem na primeira regra, 25% corresponder\u00e3o ao segundo e 25% corresponder\u00e3o ao terceiro.\u00a0Os restantes 25% ser\u00e3o apanhados pela quarta regra.<\/span><\/p>\n<p><span>Outro uso da\u00a0<\/span><code>random<\/code><span>extens\u00e3o seria simular uma conex\u00e3o de rede defeituosa para avaliar o desempenho do hardware \/ software de rede, etc.<\/span><\/p>\n<h3><span>3. Restringindo o n\u00famero de conex\u00f5es com\u00a0<\/span><code>limit<\/code><span>e\u00a0<\/span><code>iplimit<\/code><sup><span>*<\/span><\/sup><\/h3>\n<p><span>A\u00a0<\/span><code>limit<\/code><span>extens\u00e3o correspondente pode ser usada para limitar o n\u00famero de vezes que uma regra corresponde em um determinado per\u00edodo de tempo, enquanto a\u00a0<\/span><code>iplimit<\/code><span>extens\u00e3o pode restringir o n\u00famero de conex\u00f5es TCP paralelas de um determinado host ou rede.\u00a0Essas extens\u00f5es podem ser usadas para v\u00e1rias finalidades:<\/span><\/p>\n<ul>\n<li><span>proteger contra ataques do DOS (nega\u00e7\u00e3o de servi\u00e7o), como impedir uma inunda\u00e7\u00e3o de solicita\u00e7\u00f5es HTTP para seu servidor da Web, garantindo que todos os seus clientes tenham acesso ilimitado;<\/span><\/li>\n<li><span>impedir que um ataque de for\u00e7a bruta adivinhe senhas;<\/span><\/li>\n<li><span>limitar o uso da Internet pelos funcion\u00e1rios durante o hor\u00e1rio de trabalho;<\/span><\/li>\n<li><span>e muitos mais.<\/span><\/li>\n<\/ul>\n<p><span>Vamos considerar o caso em que queremos limitar o uso da Internet de nossos funcion\u00e1rios durante o hor\u00e1rio de trabalho.\u00a0N\u00f3s poder\u00edamos usar uma regra como:<\/span><\/p>\n<pre class=\"code\"><span>-A FORWARD -m state --state NOVO -p tcp -m multiport --dportar http, https -o eth0 -i eth1 \\<\/span><span>\r\n    -m limite - limite 50 \/ hora - limite-rajada 5 -j ACEITAR<\/span>\r\n<\/pre>\n<p><span>Esta regra assume que estamos agindo como um servidor proxy onde a conex\u00e3o externa \u00e9 via\u00a0<\/span><code>eth0<\/code><span>e se\u00a0<\/span><code>eth1<\/code><span>\u00a0conecta \u00e0 rede do nosso escrit\u00f3rio.\u00a0A regra limita todos os nossos computadores internos a apenas 50 novas conex\u00f5es HTTP ou HTTPS por hora e o uso\u00a0<\/span><code>--limit-burst<\/code><span>impede que qualquer funcion\u00e1rio use todos os 50 de uma s\u00f3 vez.\u00a0Os pacotes podem ser combinados\u00a0<\/span><code>\/day<\/code><span>,\u00a0<\/span><code>\/hour<\/code><span>,\u00a0<\/span><code>\/minute<\/code><span>ou\u00a0<\/span><code>\/sec<\/code><span>.<\/span><\/p>\n<p><span>O\u00a0<\/span><code>--limit-burst<\/code><span>par\u00e2metro pode ser bastante confuso no come\u00e7o.\u00a0No exemplo acima, ele garantir\u00e1 que, se todos os funcion\u00e1rios estiverem tentando acessar a Internet durante toda a hora, apenas 5 conex\u00f5es ser\u00e3o feitas a cada 5 minutos.\u00a0Se passar 30 minutos sem conex\u00f5es e depois houver uma corrida repentina pelos 30 minutos restantes, apenas 5 conex\u00f5es ser\u00e3o permitidas a cada 2,5 minutos.\u00a0Eu ouvi uma vez que explicou da seguinte forma:<\/span><\/p>\n<blockquote><p><em><span>Para cada\u00a0<\/span><\/em><code>limit<\/code>\u00a0<em><span>regra, h\u00e1 um &#8220;bucket&#8221; contendo &#8220;tokens&#8221;.\u00a0Sempre que a regra corresponde, um token \u00e9 removido e quando a contagem de token chega a zero, a regra n\u00e3o corresponde mais.<\/span><\/em><code>--limit<\/code>\u00a0<em><span>\u00e9 a taxa de recarga do balde.\u00a0<\/span><\/em><br \/>\n<code>--limit-burst<\/code>\u00a0<em><span>\u00e9 o tamanho do dep\u00f3sito (n\u00famero de tokens que ele pode conter).<\/span><\/em><\/p><\/blockquote>\n<p><span>A\u00a0<\/span><code>iplimit<\/code><span>extens\u00e3o nos permite restringir o n\u00famero de conex\u00f5es TCP paralelas de um determinado host ou rede.\u00a0Se, por exemplo, quisermos limitar o n\u00famero de conex\u00f5es HTTP feitas por qualquer endere\u00e7o IP a 5, poder\u00edamos usar:<\/span><\/p>\n<pre class=\"code\"><span>-A INPUT -p tcp -m state --state NOVO --dport http -m iplimit --iplimit-above 5 -j DROP\r\n<\/span><\/pre>\n<h3><span>4. Mantendo uma lista de\u00a0<\/span><code>recent<\/code><span>conex\u00f5es para combinar<\/span><\/h3>\n<p><span>Ao usar a\u00a0<\/span><code>recent<\/code><span>extens\u00e3o, \u00e9 poss\u00edvel criar dinamicamente uma lista de endere\u00e7os IP que correspondam a uma regra e, depois, corresponder a esses IPs de maneiras diferentes.\u00a0Um uso poss\u00edvel seria criar uma lista de &#8220;maus&#8221; tempor\u00e1rios, detectando poss\u00edveis varreduras de portas e, em seguida,\u00a0<\/span><code>DROP<\/code><span>todas as outras conex\u00f5es da mesma fonte por um determinado per\u00edodo de tempo.<\/span><\/p>\n<p><span>A porta 139 \u00e9 uma das portas mais perigosas para usu\u00e1rios do Microsoft Windows\u00ae, pois \u00e9 por meio dessa porta que o servi\u00e7o de compartilhamento de arquivos e impress\u00e3o do Windows \u00e9 executado.\u00a0Isso tamb\u00e9m torna essa porta uma das primeiras verificadas por muitos scanners de portas ou hackers em potencial e um alvo para muitos dos worms atuais.\u00a0Podemos usar a\u00a0<\/span><code>recent<\/code><span>extens\u00e3o correspondente para bloquear temporariamente qualquer IP de conex\u00e3o com a nossa m\u00e1quina que varre essa porta da seguinte maneira:<\/span><\/p>\n<pre class=\"code\"><span>-A FORWARD -m recente --name portscan --rcheck --segundos 300 -j DROP<\/span><span>\r\n-A FORWARD -p tcp -i eth0 --dport 139 -m recente --name portscan --set -j DROP<\/span>\r\n<\/pre>\n<p><span>Agora, qualquer um que tentar se conectar \u00e0 porta 139 em nosso firewall ter\u00e1 todos os seus pacotes ca\u00eddos at\u00e9 que 300 segundos tenham passado.\u00a0As op\u00e7\u00f5es suportadas incluem:<\/span><\/p>\n<blockquote>\n<dl>\n<dt><code>--name name<\/code><\/dt>\n<dd><span>O nome da lista para armazenar ou verificar o IP.\u00a0Se nenhum nome for dado, ent\u00e3o\u00a0<\/span><code>DEFAULT<\/code><span>ser\u00e1 usado<\/span><\/dd>\n<dt><code>--set<\/code><\/dt>\n<dd><span>Isso adicionar\u00e1 o endere\u00e7o de origem do pacote \u00e0 lista.\u00a0Se o endere\u00e7o de origem j\u00e1 estiver na lista, isso atualizar\u00e1 a entrada existente.<\/span><\/dd>\n<dt><code>--rcheck<\/code><\/dt>\n<dd><span>Isto ir\u00e1 verificar se o endere\u00e7o de origem do pacote est\u00e1 atualmente na lista.<\/span><\/dd>\n<dt><code>--update<\/code><\/dt>\n<dd><span>Isto ir\u00e1 verificar se o endere\u00e7o de origem do pacote est\u00e1 atualmente na lista.\u00a0Se for, ent\u00e3o essa entrada ser\u00e1 atualizada e a regra retornar\u00e1 verdadeira.<\/span><\/dd>\n<dt><code>--remove<\/code><\/dt>\n<dd><span>Isso verificar\u00e1 se o endere\u00e7o de origem do pacote est\u00e1 atualmente na lista e, em caso afirmativo, esse endere\u00e7o ser\u00e1 removido da lista e a regra retornar\u00e1 true.<\/span><\/dd>\n<dt><code>--seconds seconds<\/code><\/dt>\n<dd><span>Esta op\u00e7\u00e3o deve ser usada em conjunto com um dos\u00a0<\/span><code>--rcheck<\/code><span>ou\u00a0<\/span><code>--update<\/code><span>.\u00a0Quando usado, isso limitar\u00e1 a correspond\u00eancia a acontecer somente quando o endere\u00e7o estiver na lista e for visto dentro do \u00faltimo n\u00famero de segundos especificado.<\/span><\/dd>\n<dt><code>--hitcount hits<\/code><\/dt>\n<dd><span>Esta op\u00e7\u00e3o deve ser usada em conjunto com um dos\u00a0<\/span><code>--rcheck<\/code><span>ou\u00a0<\/span><code>--update<\/code><span>.\u00a0Quando usado, isso limitar\u00e1 a correspond\u00eancia a acontecer somente quando o endere\u00e7o estiver na lista e os pacotes tiverem sido recebidos como maiores ou iguais ao valor determinado.\u00a0Essa op\u00e7\u00e3o pode ser usada junto com &#8220;segundos&#8221; para criar uma correspond\u00eancia ainda mais restrita, exigindo um determinado n\u00famero de ocorr\u00eancias dentro de um per\u00edodo de tempo espec\u00edfico.<\/span><\/dd>\n<\/dl>\n<\/blockquote>\n<h3><span>5. Combinando com um\u00a0<\/span><code>string<\/code><sup><span>*<\/span><\/sup><span>\u00a0na carga de dados de um pacote<\/span><\/h3>\n<p><span>A\u00a0<\/span><code>string<\/code><span>extens\u00e3o permite combinar uma string em qualquer lugar na carga de dados de um pacote.\u00a0Embora essa extens\u00e3o tenha muitos usos v\u00e1lidos, recomendo cautela.\u00a0Digamos, por exemplo, que o nosso firewall Linux esteja protegendo uma rede interna com alguns computadores que executam o Microsoft Windows\u00ae e gostar\u00edamos de bloquear todos os arquivos execut\u00e1veis.\u00a0N\u00f3s podemos tentar algo como:<\/span><\/p>\n<pre class=\"code\"><span>-A FORWARD -m string --string '.com' -j DROP<\/span><span>\r\n-A FORWARD -m string --string '.exe' -j DROP<\/span>\r\n<\/pre>\n<p><span>Isso tem v\u00e1rios problemas:<\/span><\/p>\n<ul>\n<li><span>se o &#8216;\u00a0<\/span><code>.com<\/code><span>&#8216; ou &#8216;\u00a0<\/span><code>.exe<\/code><span>&#8216; estiver dividido em dois pacotes, ele n\u00e3o ser\u00e1 correspondido<\/span><\/li>\n<li><span>se algum pacote que estiver sendo transmitido contiver alguma das picadas, ele ser\u00e1 descartado;\u00a0isso inclui todos os pacotes de uma p\u00e1gina da Web que contenham essas cadeias de caracteres, de uma transmiss\u00e3o de e-mail, etc.<\/span><\/li>\n<\/ul>\n<h3><span>6. Regras Baseadas no Tempo com\u00a0<\/span><code>time<\/code><sup><span>*<\/span><\/sup><\/h3>\n<p><span>Podemos combinar regras com base na hora do dia e no dia da semana usando o\u00a0<\/span><code>time<\/code><span>m\u00f3dulo.\u00a0Isso pode ser usado para limitar o uso da equipe na hora do almo\u00e7o, para impedir que cada um de um conjunto de servidores espelhados fique fora de a\u00e7\u00e3o para backups automatizados ou manuten\u00e7\u00e3o do sistema, etc. O exemplo a seguir permite acesso \u00e0 web durante a hora do almo\u00e7o:<\/span><\/p>\n<pre class=\"code\"><span>-A FORWARD -p tcp -m multiportar --dportar http, https -o eth0 -i eth1 \\<\/span><span>\r\n    -m time --timestart 12:30 --timestop 13:30 --days seg, ter, qua, qui, sex -j ACEITAR<\/span>\r\n<\/pre>\n<p><span>Claramente os hor\u00e1rios de in\u00edcio e parada s\u00e3o de 24 horas com o formato\u00a0<\/span><code>HH:MM<\/code><span>.\u00a0O dia \u00e9 uma lista separada por v\u00edrgulas que \u00e9 sens\u00edvel e composta por\u00a0<\/span><code>Mon<\/code><span>,\u00a0<\/span><code>Tue<\/code><span>,\u00a0<\/span><code>Wed<\/code><span>,\u00a0<\/span><code>Thu<\/code><span>,\u00a0<\/span><code>Fri<\/code><span>,\u00a0<\/span><code>Sat<\/code><span>e \/ ou\u00a0<\/span><code>Sun<\/code><span>.<\/span><\/p>\n<h3><span>7. Definindo cotas de transfer\u00eancia com\u00a0<\/span><code>quota<\/code><sup><span>*<\/span><\/sup><\/h3>\n<p><span>Definir cotas de transfer\u00eancia pode ser muito \u00fatil em muitas situa\u00e7\u00f5es.\u00a0Como exemplo, muitos usu\u00e1rios de banda larga ter\u00e3o cotas de download definidas para eles por seu ISP e muitos podem cobrar extra por cada megabyte transferido al\u00e9m dessa cota.\u00a0Voc\u00ea pode usar o iptables para monitorar seu uso e interromp\u00ea-lo quando atingir sua cota (digamos, 2 GB) com uma regra semelhante \u00e0 seguinte:<\/span><\/p>\n<pre class=\"code\"><span>-A INPUT -p tcp -m quota --quota 2147483648 -j ACEITAR<\/span><span>\r\n-A INPUT -j DROP<\/span>\r\n<\/pre>\n<p><span>Voc\u00ea pode ent\u00e3o ver seu uso com o seguinte comando:<\/span><br \/>\n<code>$ iptables -v -L<\/code><\/p>\n<p><span>Voc\u00ea tamb\u00e9m precisar\u00e1 redefinir a cota todo m\u00eas manualmente (reiniciando iptables) ou com um cron job.\u00a0Claramente, seu computador precisaria estar &#8216;sempre ativo&#8217; para que este exemplo fosse de alguma utilidade, mas tamb\u00e9m h\u00e1 outras situa\u00e7\u00f5es em que a\u00a0<\/span><code>quota<\/code><span>\u00a0extens\u00e3o seria \u00fatil.<\/span><\/p>\n<h3><span>8. Correspond\u00eancia de pacotes baseada em valores TTL<\/span><\/h3>\n<p><span>O valor TTL (Time-To-Live) de um pacote \u00e9 um n\u00famero de 8 bits que \u00e9 decrementado por um cada vez que o pacote \u00e9 processado por um host intermedi\u00e1rio entre sua origem e destino.\u00a0O valor padr\u00e3o \u00e9 dependente do sistema operacional e geralmente varia de 32 a 128. Sua finalidade inclui garantir que nenhum pacote permane\u00e7a na rede por um per\u00edodo de tempo n\u00e3o razo\u00e1vel, fique preso em um loop infinito devido a tabelas de roteamento incorretas, etc. O valor de um pacote chega a 0 e \u00e9 descartado e uma mensagem \u00e9 enviada para sua origem, que pode decidir se deseja ou n\u00e3o reenvi\u00e1-la.<\/span><\/p>\n<p><span>Como um aparte interessante: \u00e9 realmente como o\u00a0<\/span><code>traceroute<\/code><span>comando funciona.\u00a0Ele envia um pacote para o destino com um TTL de 1 primeiro e recebe uma resposta do primeiro host intermedi\u00e1rio.\u00a0Em seguida, ele envia um pacote com um TTL de 2 e recebe uma resposta do segundo host intermedi\u00e1rio e assim por diante at\u00e9 atingir seu destino.<\/span><\/p>\n<p><span>A utilidade da correspond\u00eancia de pacotes com base no valor de TTL depende da sua imagina\u00e7\u00e3o.\u00a0Um poss\u00edvel uso \u00e9 identificar ataques &#8220;man-in-the-middle&#8221;.\u00a0Se voc\u00ea se conectar regularmente de casa para o trabalho, poder\u00e1 monitorar seus valores de TTL e estabelecer um valor m\u00e1ximo razo\u00e1vel na extremidade de recebimento.\u00a0Voc\u00ea pode usar isso para negar quaisquer pacotes que cheguem com um valor TTL mais alto, pois isso pode indicar um poss\u00edvel ataque &#8220;man-in-the-middle&#8221;;\u00a0algu\u00e9m interceptando seus pacotes, lendo \/ armazenando-os e reenviando-os para o destino.\u00a0Existem, \u00e9 claro, m\u00e9todos &#8220;man-in-the-middle&#8221; que n\u00e3o alterariam o valor do TTL, mas, como sempre, a seguran\u00e7a nunca \u00e9 absoluta, apenas incremental.\u00a0A correspond\u00eancia TTL tamb\u00e9m pode ser usada para depura\u00e7\u00e3o de rede ou para localizar hosts com valores TTL padr\u00e3o incorretos.<\/span><\/p>\n<p><span>Como um exemplo simples, vamos rejeitar todos os pacotes de um IP espec\u00edfico com um TTL menor que 40:<\/span><\/p>\n<pre class=\"code\"><span>-A INPUT -s 1.2.3.4 -m ttl - tll-lt 40 -j REJEITAR\r\n<\/span><\/pre>\n<p><span>Voc\u00ea tamb\u00e9m pode verificar os valores de TTL que s\u00e3o menores que (\u00a0<\/span><code>--ttl-gt<\/code><span>) ou iguais a (\u00a0<\/span><code>--ttl-eq<\/code><span>) um valor espec\u00edfico.<\/span><\/p>\n<h3><span>Corrigindo seu kernel com Patch-O-Matic (POM)<\/span><\/h3>\n<p><span>Alguns dos recursos mais recentes apresentados neste artigo n\u00e3o s\u00e3o considerados est\u00e1veis \u200b\u200bo suficiente pela equipe de desenvolvimento do netfilter para inclus\u00e3o no kernel atual do Linux.\u00a0Para us\u00e1-los, voc\u00ea precisar\u00e1 corrigir seu kernel usando um utilit\u00e1rio chamado patch-o-matic.\u00a0Isso n\u00e3o \u00e9 para os fracos de cora\u00e7\u00e3o e n\u00e3o vou fornecer instru\u00e7\u00f5es passo a passo aqui.\u00a0Vou simplesmente cobrir patch-o-matic e fornecer refer\u00eancias para mais informa\u00e7\u00f5es.<\/span><\/p>\n<p><span>Patch-o-matic pode ser baixado da p\u00e1gina inicial do netfilter,\u00a0<\/span><a href=\"http:\/\/www.netfilter.org\/\"><span>http:\/\/www.netfilter.org\/<\/span><\/a><span>\u00a0.\u00a0Voc\u00ea tamb\u00e9m precisar\u00e1 do c\u00f3digo-fonte do seu kernel (se voc\u00ea estiver usando um kernel fornecido com a sua distribui\u00e7\u00e3o, instale o\u00a0<\/span><code>kernel-source<\/code><span>pacote ou instale um novo kernel baixando o c\u00f3digo-fonte mais recente do kernel em\u00a0<\/span><a href=\"http:\/\/www.kernel.org\/\"><span>http:\/\/www.kernel.org\/<\/span><\/a><span>\u00a0) e o c\u00f3digo fonte do iptables que voc\u00ea tamb\u00e9m pode baixar da p\u00e1gina inicial do netfilter.\u00a0Depois de t\u00ea-los, descompacte-os e execute o\u00a0<\/span><code>runme<\/code><span>script em patch-o-matic da seguinte maneira:<\/span><br \/>\n<code>$ KERNEL_DIR=&lt;path to the kernel source code&gt; IPTABLES_DIR=&lt;path to the iptables source code&gt; .\/runme extra<\/code><\/p>\n<p><span>O script descreve cada nova extens\u00e3o e pergunta se deve ou n\u00e3o corrigir o kernel para isso.\u00a0Uma vez terminado, voc\u00ea precisar\u00e1 recompilar o kernel, os m\u00f3dulos do kernel do netfilter e os bin\u00e1rios do iptables.\u00a0Isso est\u00e1 fora do escopo deste artigo, mas voc\u00ea encontrar\u00e1 informa\u00e7\u00f5es \u00fateis sobre os seguintes sites:<\/span><\/p>\n<ul>\n<li><a href=\"http:\/\/www.netfilter.org\/documentation\/HOWTO\/netfilter-extensions-HOWTO.html\"><span>Como fazer extens\u00f5es do Netfilter?<\/span><\/a><\/li>\n<li><a href=\"http:\/\/www.digitalhermit.com\/linux\/Kernel-Build-HOWTO.html\"><span>Kernel Rebuild Guide<\/span><\/a><br \/>\n<span>(\u00a0<\/span><em><span>isso foi parte do\u00a0<\/span><a href=\"http:\/\/www.tldp.org\/\"><span>The Linux Documentation Project,<\/span><\/a><span>\u00a0mas foi removido para revis\u00e3o &#8211; esta \u00e9 a \u00faltima vers\u00e3o desse processo de revis\u00e3o, mas ainda est\u00e1 em desenvolvimento<\/span><\/em><span>\u00a0)<\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o \u00c9 comumente conhecido que o netfilter \/ iptables \u00e9 o firewall do sistema operacional Linux.\u00a0O que n\u00e3o \u00e9 comumente conhecido \u00e9 que o iptables tem muitas gemas escondidas que podem permitir que voc\u00ea fa\u00e7a coisas com seu firewall que voc\u00ea nunca imaginou.\u00a0Neste artigo, vou apresentar muitos desses recursos com alguns usos pr\u00e1ticos.\u00a0Se voc\u00ea n\u00e3o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1082,730,1,830,79,1062,42,51,495,68,548],"tags":[1396,366,117,1397,1177],"class_list":["post-4748","post","type-post","status-publish","format-standard","hentry","category-centos-7-rhel-7","category-clusterweb","category-viazap","category-debian","category-firewall","category-freenas","category-leitura-recomendada","category-linux-linuxrs","category-profissional-de-ti","category-redes-2","category-ubuntu-2","tag-avancados","tag-do","tag-iptables","tag-netfilter","tag-recursos"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4748","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4748"}],"version-history":[{"count":1,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4748\/revisions"}],"predecessor-version":[{"id":4749,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4748\/revisions\/4749"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}