{"id":41,"date":"2009-08-25T19:08:27","date_gmt":"2009-08-25T22:08:27","guid":{"rendered":"http:\/\/www.softov.com.br\/blog\/?p=41"},"modified":"2009-08-25T19:08:27","modified_gmt":"2009-08-25T22:08:27","slug":"controle-de-trafego-com-tc-htb-e-iptables","status":"publish","type":"post","link":"https:\/\/softov.com.br\/blog\/2009\/08\/25\/controle-de-trafego-com-tc-htb-e-iptables\/","title":{"rendered":"Controle de tr\u00e1fego com TC, HTB e Iptables"},"content":{"rendered":"<p>Estava montando um servidor de Internet via r\u00e1dio e tive a necessidade de fazer o controle de tr\u00e1fego dos clientes ip por ip, pois determinados usu\u00e1rios teriam meros 128kbps de download enquanto outros teriam 256kbps e eu como admin teria meus meros 2048kbps de download.<\/p>\n<p>Em termos leigos, fucei e fucei na Internet at\u00e9 encontra o site do <a title=\"http:\/\/www.eriberto.pro.br\" rel=\"nofollow\" href=\"http:\/\/www.eriberto.pro.br\/\">Jo\u00e3o Eriberto Mota Filho<\/a>, aonde aprendi muito sobre as regras de controle de tr\u00e1fego utilizando o tc, htb e iptables, ent\u00e3o resolvi compartilhar com quem tamb\u00eam tem a necessidade de efectuar este controle.<\/p>\n<p>Muitas pessoas confundem controle de tr\u00e1fego com controle de banda.<\/p>\n<ul>\n<li> Banda (ou bandwidth):\u00a0 \u00e9 a diferen\u00e7a entre os limites superior e inferior de uma freq\u00fc\u00eancia, geralmente medida em hertz.<\/li>\n<li> Tr\u00e1fego:\u00a0 quantidade de informa\u00e7\u00f5es digitais transmitidas, geralmente medida em bits por segundo (b\/s).<\/li>\n<\/ul>\n<p>Assim, ao controlar um tr\u00e1fego de rede estaremos realizando um controle de tr\u00e1fego e n\u00e3o de banda, como muitos dizem. Para alterar as propriedades de uma banda, teremos que fazer altera\u00e7\u00f5es f\u00edsicas no meio.<\/p>\n<p>Agora imagine uma rede que possua Internet, com um link de 2 Mb\/s, e 50 m\u00e1quinas. Exemplos atuais: pr\u00e9dios, pequenas empresas, lan houses, faculdade (essa vai para o Bigu\u00e1),\u00a0 etc. Imagine ainda que nessa rede possa ser utilizado qualquer tipo de programa de acesso \u00e0 Internet.<\/p>\n<p>Numa rede liberal, programas como o EMule ou o Kazaa poder\u00e3o causar um enorme congestionamento. Um \u00fanico EMule instalado em um computador da rede poder\u00e1 abrir dezenas de conex\u00f5es simult\u00e2neas. Com isso, caso algum outro usu\u00e1rio, em outro computador, deseje visitar o GMail, por exemplo, teremos uma m\u00e1quina, estabelecendo uma conex\u00e3o, lutando contra outro computador com 60 conex\u00f5es (apenas um exemplo). Teremos, em outras palavras, 01 contra 60. \u00c9 \u00f3bvio que haver\u00e1 uma grande desvantagem para um dos dois. Isso ocorre porque, da forma como o Kernel Linux trabalha, normalmente, os pacotes s\u00e3o enfileirados em um buffer e saem na mesma ordem em que chegaram (FIFO, para os mais experientes, o primeiro que entra \u00e9 o primeiro que sai). Aumentar o link, ao contr\u00e1rio do que muitos desinformados pensam, n\u00e3o resolveria o caso, pois s\u00f3 estar\u00edamos dando mais &#8220;poder de fogo&#8221; ao usu\u00e1rio do EMule e continuar\u00edamos sendo o 60\u00ba da fila. <strong>O que fazer ent\u00e3o?<\/strong><\/p>\n<ul>\n<li> Bloquear o EMule, tornando-se um administrador radical e for\u00e7ando o usu\u00e1rio de tal programa a achar uma forma de burlar o controle (sempre h\u00e1 uma forma de fazer isso). Ainda, o EMule foi bloqueado mas outros programas similares n\u00e3o. Existem centenas deles.<\/li>\n<li> Controlar o tr\u00e1fego da rede, fazendo com que haja um equil\u00edbrio ou uma prioridade na navega\u00e7\u00e3o. Esta parece ser a forma mais sensata<!--more--><\/li>\n<\/ul>\n<p>Observe as seguintes id\u00e9ias:<\/p>\n<ul>\n<li> Em tr\u00e1fego de rede estaremos submetidos \u00e0 base decimal e n\u00e3o \u00e0 bin\u00e1ria, como em processamento, armazenamento e mem\u00f3ria. Assim, 1 KByte por segundo ser\u00e1 igual a 1000 bytes por segundo.<\/li>\n<li> A abreviatura de byte \u00e9 <strong>B<\/strong>.<\/li>\n<li> A abreviatura de bit \u00e9 <strong>b<\/strong>.<\/li>\n<li> 1 B = 8 b (um byte \u00e9 composto por 8 bits).<\/li>\n<\/ul>\n<p>Assim, 250 Kb\/s s\u00e3o iguais a 31,25 KB\/s que s\u00e3o iguais a 31250 B\/s.<\/p>\n<p>Agora cheguei em uma parte interessante: Como funciona o HTB.<\/p>\n<p>O HTB funciona de forma hier\u00e1rquica e, como todas as outras disciplinas, controla os pacotes que saem de uma determinada placa de rede. Isso se deve ao fato de que, quando um pacote chega a uma m\u00e1quina, ele n\u00e3o pode ficar parado no cabo de rede ou na onda de r\u00e1dio (wireless) esperando para entrar na placa. O pacote entra e \u00e9 armazenado no buffer. Assim, s\u00f3 resta controlar a sua sa\u00edda do buffer para a rede.<\/p>\n<p>Imagine um servidor Linux aonde temos duas placas de rede:<\/p>\n<ul>\n<li>eth0: ligada a rede interna<\/li>\n<li>eth1: ligada a internet<\/li>\n<\/ul>\n<p>A interface <em>eth0<\/em> ir\u00e1 controlar todo o download da Internet e a interface <em>eth1<\/em> todo o upload.<\/p>\n<p>No que tange \u00e0 hierarquia, o HTB possui um elemento principal conhecido como <em>root<\/em>, que receber\u00e1 a designa\u00e7\u00e3o num\u00e9rica <strong>1:0<\/strong> ou, simplesmente, <strong>1:<\/strong>. O <em>root<\/em> possui um subordinado imediato, que controla o tr\u00e1fego m\u00e1ximo total poss\u00edvel. Esse subordinado \u00e9 uma <em>classe<\/em> e receber\u00e1 a designa\u00e7\u00e3o <strong>1:1<\/strong>.<\/p>\n<blockquote><p>Os elementos superiores a cada classe s\u00e3o conhecidos como <em>pais<\/em>. A indica\u00e7\u00e3o para isso \u00e9 <em>parent<\/em>.<\/p><\/blockquote>\n<p>A seguir um exemplo de configura\u00e7\u00e3o do <em>root<\/em> e do parent de controle total de tr\u00e1fego, para a interface <em>eth0<\/em>, com o comando <em>tc<\/em>:<\/p>\n<p>[code=&#8217;shell&#8217;]<\/p>\n<p>tc qdisc add dev eth0 root handle 1:0 htb default 40<br \/>\ntc class add dev eth0 parent 1:0 classid 1:1 htb rate 100mbit<\/p>\n<p>[\/code]<\/p>\n<p>A primeira linha estabelece o <em>root<\/em>, para a interface <em>eth0<\/em>, com a designa\u00e7\u00e3o <em>1:0<\/em>, usando a disciplina HTB. A palavra <em>qdisc<\/em> \u00e9 a abreviatura de <em>Queue discipline<\/em> ou disciplina de enfileiramento. Em resumo, refere-se \u00e0 disciplina de controle de tr\u00e1fego. A primeira linha tamb\u00e9m estabelece que a classe default ser\u00e1 a <em>1:40<\/em>.<\/p>\n<blockquote><p>A classe default ser\u00e1 utilizada para receber pacotes que n\u00e3o foram designados para trafegar em qualquer outra classe.<\/p><\/blockquote>\n<p>A segunda linha estabelece que a classe <em>1:0<\/em> ser\u00e1 parent (pai) da <em>1:1<\/em>. Esta classe estabelece que a interface de rede <em>eth0<\/em> funcionar\u00e1 a 100 Mb\/s.<\/p>\n<p>Veja agora uma configura\u00e7\u00e3o do HTB j\u00e1 com algumas classes (dentro de um script em shell bash):<\/p>\n<p>[shell]<\/p>\n<p>#!\/bin\/bash<\/p>\n<p>tc qdisc del dev eth0 root<\/p>\n<p>tc qdisc add dev eth0 root handle 1:0 htb default 40<br \/>\ntc class add dev eth0 parent 1:0 classid 1:1 htb rate 100mbit<\/p>\n<p>tc class add dev eth0 parent 1:1 classid 1:10 htb rate 100kbit  ceil 300kbit  prio 0   # DNS \/ ACK \/ SYN \/ FIN<br \/>\ntc class add dev eth0 parent 1:1 classid 1:20 htb rate 500kbit  ceil 800kbit  prio 1   # E-mail<br \/>\ntc class add dev eth0 parent 1:1 classid 1:30 htb rate 1200kbit ceil 1600kbit prio 2   # HTTP \/ HTTPS<br \/>\ntc class add dev eth0 parent 1:1 classid 1:40 htb rate 300kbit  ceil 500kbit  prio 3   # Geral<\/p>\n<p>[\/shell]<\/p>\n<p>A primeira linha remove qualquer pr\u00e9-configura\u00e7\u00e3o existente. As duas linhas seguintes j\u00e1 foram analisadas. As pr\u00f3ximas linhas s\u00e3o as classes que ir\u00e3o controlar o tr\u00e1fego.<\/p>\n<p>A classe <em>1:10<\/em> \u00e9 filha da classe <em>1:1<\/em>. Ela permitir\u00e1 um tr\u00e1fego de 100 Kb\/s. Caso as outras classes estejam livres, sem tr\u00e1fego, esta classe poder\u00e1 emprestar um pouco do link que sobra nas outras, podendo chegar a 300 Kb\/s. Esta classe tem prioridade 0, ou seja, todas as outras ir\u00e3o parar para o seu tr\u00e1fego passar (caso isso seja necess\u00e1rio). No fim da linha h\u00e1 um coment\u00e1rio, que n\u00e3o \u00e9 obrigat\u00f3rio. Por interm\u00e9dio desse coment\u00e1rio, entendemos que a classe <em>1:10<\/em> ser\u00e1 utilizada para tr\u00e1fego DNS e para alguns pacotes com algumas flags TCP. A an\u00e1lise das demais classes segue o mesmo racioc\u00ednio. Apenas relembrando, a classe <em>1:40<\/em> \u00e9 a classe default e, tudo que n\u00e3o for enviado para as outras classes terminar\u00e1 passando por ela.<\/p>\n<p>A seguir, uma imagem que resume toda a situa\u00e7\u00e3o explanada at\u00e9 aqui:<\/p>\n<div>\n<div><span><a title=\"Htb1.jpg\" href=\"http:\/\/www.eriberto.pro.br\/wiki\/index.php?title=Imagem:Htb1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.eriberto.pro.br\/wiki\/images\/3\/3b\/Htb1.jpg\" border=\"0\" alt=\"\" width=\"438\" height=\"310\" \/><\/a><\/span><\/div>\n<\/div>\n<p>\u00c9 interessante fazer uma configura\u00e7\u00e3o para a interface <em>eth1<\/em> para controlar o upload. A configura\u00e7\u00e3o para a <em>eth1<\/em> segue os mesmos princ\u00edpios da <em>eth0<\/em>. Exemplo:<\/p>\n<p>[shell]<br \/>\n#!\/bin\/bash<\/p>\n<p>tc qdisc del dev eth1 root<\/p>\n<p>tc qdisc add dev eth1 root handle 1:0 htb default 40<br \/>\ntc class add dev eth1 parent 1:0 classid 1:1 htb rate 100mbit<\/p>\n<p>tc class add dev eth1 parent 1:1 classid 1:10 htb rate 100kbit ceil 300kbit prio 0   # DNS \/ ACK \/ SYN \/ FIN<br \/>\ntc class add dev eth1 parent 1:1 classid 1:20 htb rate 500kbit ceil 500kbit prio 1   # E-mail<br \/>\ntc class add dev eth1 parent 1:1 classid 1:30 htb rate 300kbit ceil 500kbit prio 2   # FTP<br \/>\ntc class add dev eth1 parent 1:1 classid 1:40 htb rate 300kbit ceil 500kbit prio 3   # Geral<\/p>\n<p>[\/shell]<\/p>\n<blockquote><p>Na classe 1:20, a op\u00e7\u00e3o <em>ceil 500kbit<\/em> poderia ter sido omitida, uma vez que tal <em>ceil<\/em> possui o mesmo valor de <em>rate<\/em>.<\/p><\/blockquote>\n<h2><span> A instala\u00e7\u00e3o do comando <em>tc<\/em> e da disciplina <em>HTB<\/em> no Debian GNU\/Linux <\/span><\/h2>\n<p>Para instalar o <em>tc<\/em> e o <em>HTB<\/em> no Debian, execute:<\/p>\n<p>[shell]<br \/>\n# apt-get install iproute<br \/>\n[\/shell]<\/p>\n<h2><span> A associa\u00e7\u00e3o do HTB com o Iptables <\/span><\/h2>\n<p>A divis\u00e3o do tr\u00e1fego pelas classes poder\u00e1 ser feito com o aux\u00edlio do Iptables, utilizando a tabela <em>mangle<\/em> e o alvo <em>CLASSIFY<\/em>. A seguir, um exemplo de script de configura\u00e7\u00e3o do Iptables:<\/p>\n<p>[shell]<br \/>\n#!\/bin\/bash<\/p>\n<p>PATH=\/bin:\/sbin:\/usr\/bin:\/usr\/sbin<\/p>\n<p>iptables -t mangle -F<\/p>\n<p># portas e-mail (entrada e saida)<\/p>\n<p>iptables -t mangle -A FORWARD -p tcp -m multiport &#8211;ports 25,110,995 -j CLASSIFY &#8211;set-class 1:20<\/p>\n<p># trafego HTTP entrando<\/p>\n<p>iptables -t mangle -A FORWARD -o eth0 -p tcp &#8211;sport 80 -j CLASSIFY &#8211;set-class 1:30<\/p>\n<p># trafego FTP saindo (upload)<\/p>\n<p>iptables -t mangle -A FORWARD -o eth1 -p tcp &#8211;dport 20 -j CLASSIFY &#8211;set-class 1:30<\/p>\n<p># DNS e ACK\/SYN\/FIN (pacotes com at\u00e9 60 bytes)<\/p>\n<p>iptables -t mangle -A FORWARD -p udp -m multiport &#8211;ports 53 -j CLASSIFY &#8211;set-class 1:10  # DNS<br \/>\niptables -t mangle -A FORWARD -m length &#8211;length 0:60 -j CLASSIFY &#8211;set-class 1:10         # Flags TCP<\/p>\n<p>[\/shell]<\/p>\n<blockquote><p>Note que nas classes <em>1:30<\/em>, em virtude das op\u00e7\u00f5es <em>-o eth0<\/em> e <em>-o eth1<\/em>, a interface <em>eth0<\/em> ser\u00e1 acionada somente para o tr\u00e1fego HTTP que entra e a interface <em>eth1<\/em> somente para o tr\u00e1fego FTP que sai (porta 20 &#8211; dados).<\/p><\/blockquote>\n<h2><span> A ordem das regras <\/span><\/h2>\n<p>Diferentemente das tabelas <em>filter<\/em> e <em>nat<\/em>, a tabela <em>mangle<\/em> l\u00ea todas as regras, at\u00e9 o final, mesmo que uma delas case com a situa\u00e7\u00e3o do pacote em tr\u00e1fego. Assim, deveremos colocar casos mais espec\u00edficos como \u00faltimas regras.<\/p>\n<p>Observe o exemplo a seguir:<\/p>\n<p>[shell]<br \/>\n# iptables -t mangle -A FORWARD -d 10.0.0.1 -p tcp &#8211;sport 110 -j CLASSIFY &#8211;set-class 1:65<br \/>\n# iptables -t mangle -A FORWARD -d 10.0.0.0\/8 -p tcp &#8211;sport 110 -j CLASSIFY &#8211;set-class 1:70<br \/>\n[\/shell]<\/p>\n<p>A id\u00e9ia das regras anteriores foi limitar a leitura de e-mails (protocolo POP3). A m\u00e1quina 10.0.0.1 vai utilizar a classe 1:65, enquanto que o resto da rede 10.0.0.0 vai ser enquadrada na classe 1:70. No entanto, na pr\u00e1tica, isso n\u00e3o ir\u00e1 acontecer, uma vez que a tabela <em>mangle<\/em> l\u00ea todas as regras existentes at\u00e9 o final. Assim, um pacote oriundo da m\u00e1quina 10.0.0.1 ser\u00e1 enquadrado pela primeira regra e, em seguida, pela segunda. Ent\u00e3o, valer\u00e1 a \u00faltima situa\u00e7\u00e3o. Ou seja, a ordem correta das regras dever\u00e1 ser a seguinte:<\/p>\n<p>[shell]<br \/>\n# iptables -t mangle -A FORWARD -d 10.0.0.0\/8 -p tcp &#8211;sport 110 -j CLASSIFY &#8211;set-class 1:70<br \/>\n# iptables -t mangle -A FORWARD -d 10.0.0.1 -p tcp &#8211;sport 110 -j CLASSIFY &#8211;set-class 1:65<br \/>\n[\/shell]<\/p>\n<h2><span> Tr\u00e1fego local <\/span><\/h2>\n<p>Como j\u00e1 foi dito, o controle de tr\u00e1fego dever\u00e1 ser feito no momento da sa\u00edda do pacote pela placa de rede. Assim, caso voc\u00ea tenha que controlar o tr\u00e1fego gerado pela m\u00e1quina que cont\u00e9m o HTB, dever\u00e1 ser utilizada a chain <em>OUTPUT<\/em> do Iptables. Isso ser\u00e1 \u00fatil se, por exemplo, voc\u00ea quiser liberar totalmente o acesso \u00e0 m\u00e1quina de controle. Se voc\u00ea n\u00e3o fizer isso, um ssh para tal m\u00e1quina, por exemplo, ser\u00e1 impratic\u00e1vel. A seguir, um exemplo de libera\u00e7\u00e3o do tr\u00e1fego:<\/p>\n<p>[shell]<br \/>\n# tc class add dev eth0 parent 1:1 classid 1:90 htb rate 100mbit prio 0<br \/>\n# iptables -t mangle -A OUTPUT -j CLASSIFY &#8211;set-class 1:90<br \/>\n[\/shell]<\/p>\n<h2><span> Verificando as <em>qdiscs<\/em> e as <em>classes<\/em> existentes <\/span><\/h2>\n<p>Para verificar as <em>qdiscs<\/em> e as <em>classes<\/em> configuradas na <em>eth0<\/em>, execute:<\/p>\n<p>[shell]<br \/>\n# tc qdisc show dev eth0<br \/>\n# tc class show dev eth0<br \/>\n[\/shell]<\/p>\n<p>Caso deseje ver tamb\u00e9m detalhes e estat\u00edsticas, acres\u00e7a as chaves <em>-d<\/em> e <em>-s<\/em>, da seguinte forma:<\/p>\n<p>[shell]<br \/>\n# tc -d -s qdisc show dev eth0<br \/>\n# tc -d -s class show dev eth0<br \/>\n[\/shell]<\/p>\n<h2><span> O m\u00f3dulo multiport do Iptables <\/span><\/h2>\n<p>O m\u00f3dulo <em>multiport<\/em> do Iptables \u00e9 um excelente elemento para ser utilizado em controle de tr\u00e1fego, uma vez que \u00e9 muito flex\u00edvel. Observe as regras a seguir:<\/p>\n<p>[shell]<br \/>\n# iptables -t mangle -A FORWARD -p tcp &#8211;sport 110 -j CLASSIFY &#8211;set-class 1:78<br \/>\n# iptables -t mangle -A FORWARD -p tcp &#8211;sport 995 -j CLASSIFY &#8211;set-class 1:78<br \/>\n[\/shell]<\/p>\n<p>Essas regras poderiam ser substitu\u00eddas por:<\/p>\n<p>[shell]# iptables -t mangle -A FORWARD -p tcp -m multiport &#8211;sport 110,995 -j CLASSIFY &#8211;set-class 1:78[\/shell]<\/p>\n<p>Ainda, observe:<\/p>\n<p>[shell]<br \/>\n# iptables -t mangle -A FORWARD -p tcp &#8211;sport 110 -j CLASSIFY &#8211;set-class 1:78<br \/>\n# iptables -t mangle -A FORWARD -p tcp &#8211;sport 995 -j CLASSIFY &#8211;set-class 1:78<\/p>\n<p># iptables -t mangle -A FORWARD -p tcp &#8211;dport 25 -j CLASSIFY &#8211;set-class 1:78<br \/>\n# iptables -t mangle -A FORWARD -p tcp &#8211;dport 465 -j CLASSIFY &#8211;set-class 1:78<\/p>\n<p>[\/shell]<\/p>\n<p>Essas regras poderiam ser substitu\u00eddas por:<\/p>\n<p>[shell]# iptables -t mangle -A FORWARD -p tcp -m multiport &#8211;port 25,110,465,995 -j CLASSIFY &#8211;set-class 1:78[\/shell]<\/p>\n<p>Outros m\u00f3dulos poder\u00e3o ser \u00fateis. Para aprender mais sobre eles, utilize o comando:<\/p>\n<p>[shell]# man iptables[\/shell]<\/p>\n<h2><span> As somas das velocidades das classes <\/span><\/h2>\n<p>As somas das velocidades das classes n\u00e3o necessariamente precisar\u00e3o ser menores do que a velocidade m\u00e1xima do link. Apenas como exemplo, admita um link Internet de 1 Mb\/s. Voc\u00ea poder\u00e1 trabalhar com as seguintes classes e prioridades:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.eriberto.pro.br\/wiki\/images\/4\/40\/Htb2.jpg\" border=\"0\" alt=\"\" width=\"400\" height=\"339\" \/><\/p>\n<p>Observando a figura anterior, podemos notar que a soma das velocidades \u00e9 1150 Kb\/s, enquanto o link total \u00e9 1000 Kb\/s. No entanto, como trabalhamos com prioridades, haver\u00e1 uma tend\u00eancia das classes com menos prioridade diminu\u00edrem as suas velocidades, proporcionalmente, quando o link estiver saturado, para que as classes com mais prioridade possam trafegar. Entretanto, em virtude das velocidades utilizadas, em caso de satura\u00e7\u00e3o do link, nenhuma das classes dever\u00e1 parar.<\/p>\n<blockquote><p>Observe que n\u00e3o h\u00e1 uma necessidade de seguir uma ordem crescente num\u00e9rica regular para numerar as classes e as prioridades. O mais importante \u00e9 fazer a correta liga\u00e7\u00e3o com os pais.<\/p><\/blockquote>\n<h2><span> Pense nisto&#8230; <\/span><\/h2>\n<p>Observe a figura a seguir e deixe a sua imagina\u00e7\u00e3o fluir&#8230;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.eriberto.pro.br\/wiki\/images\/c\/cd\/Htb3.jpg\" border=\"0\" alt=\"\" width=\"400\" height=\"228\" \/><\/p>\n<p>Agora, imagine a possibilidade de ramificar a classe 1:50 em mais duas ou tr\u00eas classes&#8230;<\/p>\n<p>fonte:\u00a0 <a title=\"Eriberto\" href=\"http:\/\/www.eriberto.pro.br\/wiki\/index.php?title=Controle_de_tr%C3%A1fego_com_TC%2C_HTB_e_Iptables\" target=\"_blank\"><\/a><a title=\"http:\/\/www.eriberto.pro.br\" rel=\"nofollow\" href=\"http:\/\/www.eriberto.pro.br\/\">Jo\u00e3o Eriberto Mota Filho<\/a><a title=\"Eriberto\" href=\"http:\/\/www.eriberto.pro.br\/wiki\/index.php?title=Controle_de_tr%C3%A1fego_com_TC%2C_HTB_e_Iptables\" target=\"_blank\"><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Estava montando um servidor de Internet via r\u00e1dio e tive a necessidade de fazer o controle de tr\u00e1fego dos clientes ip por ip, pois determinados usu\u00e1rios teriam meros 128kbps de download enquanto outros teriam 256kbps e eu como admin teria meus meros 2048kbps de download. Em termos leigos, fucei e fucei na Internet at\u00e9 encontra&hellip; <a class=\"more-link\" href=\"https:\/\/softov.com.br\/blog\/2009\/08\/25\/controle-de-trafego-com-tc-htb-e-iptables\/\">Continuar lendo <span class=\"screen-reader-text\">Controle de tr\u00e1fego com TC, HTB e Iptables<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29],"tags":[42,50,56,104,75,79],"_links":{"self":[{"href":"https:\/\/softov.com.br\/blog\/wp-json\/wp\/v2\/posts\/41"}],"collection":[{"href":"https:\/\/softov.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/softov.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/softov.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/softov.com.br\/blog\/wp-json\/wp\/v2\/comments?post=41"}],"version-history":[{"count":1,"href":"https:\/\/softov.com.br\/blog\/wp-json\/wp\/v2\/posts\/41\/revisions"}],"predecessor-version":[{"id":4617,"href":"https:\/\/softov.com.br\/blog\/wp-json\/wp\/v2\/posts\/41\/revisions\/4617"}],"wp:attachment":[{"href":"https:\/\/softov.com.br\/blog\/wp-json\/wp\/v2\/media?parent=41"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/softov.com.br\/blog\/wp-json\/wp\/v2\/categories?post=41"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/softov.com.br\/blog\/wp-json\/wp\/v2\/tags?post=41"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}