{"id":197,"date":"2009-01-11T10:18:52","date_gmt":"2009-01-11T13:18:52","guid":{"rendered":"http:\/\/www.subterfugios.net\/blog\/arquivos\/2009\/01\/11\/proxy-transparente-com-ubuntu\/"},"modified":"2009-01-11T10:18:52","modified_gmt":"2009-01-11T13:18:52","slug":"proxy-transparente-com-ubuntu","status":"publish","type":"post","link":"https:\/\/www.subterfugios.net\/blog\/proxy-transparente-com-ubuntu\/","title":{"rendered":"Proxy Transparente com Ubuntu"},"content":{"rendered":"<p>Apresento a seguir alguns passos para se configurar um proxy transparente com o Ubuntu. O objetivo \u00e9 ter um ponto de monitora\u00e7\u00e3o das requisi\u00e7\u00f5es \u00e0 Internet feitas a partir dos computadores da rede dom\u00e9stica. N\u00e3o se trata de uma arquitetura de rede no estado-da-arte em seguran\u00e7a, principalmente em rela\u00e7\u00e3o a ataques internos, mas estes n\u00e3o s\u00e3o uma grande preocupa\u00e7\u00e3o no momento. N\u00e3o tive custos em equipamentos adicionais, pois usei uma m\u00e1quina antiga.<\/p>\n<p>A rede que temos em casa \u00e9 t\u00edpica: um roteador wireless <strong>Linksys WRT54G<\/strong> atr\u00e1s de um cable modem com V\u00edrtua. Os computadores conectam-se ao roteador por cabo ou rede wireless, e usam o servidor DHCP do pr\u00f3prio roteador.<\/p>\n<p>Olhando assim, j\u00e1 se tinha o ponto \u00fanico de acesso \u00e0 Internet: o WRT54G. Mas, apesar de ser um roteador dom\u00e9stico espetacular, as funcionalidades de filtro, logging e monitora\u00e7\u00e3o s\u00e3o limitadas. Assim, a id\u00e9ia foi usar um computador antigo como roteador, antes de passar pelo WRT54G. Estando configurado como um roteador, o PC poderia fazer an\u00e1lise, filtro e monitora\u00e7\u00e3o dos acessos.<\/p>\n<p>Nesta configura\u00e7\u00e3o, usei um computador antigo com as seguintes caracter\u00edsticas:<\/p>\n<ul>\n<li>AMD Duron 1.8 MHz<\/li>\n<li>256 MB de RAM<\/li>\n<li>ASUS A7V266-M<\/li>\n<li>80 GB de HD<\/li>\n<li><strong>Uma<\/strong> placa de rede, ligada ao roteador WRT54G.<\/li>\n<\/ul>\n<p>Instalei o <strong>Ubuntu Server 8.10 Intrepid<\/strong>. Ap\u00f3s a instala\u00e7\u00e3o, baixei o pacote <strong>xubuntu-desktop<\/strong> pelo apt-get para poder usar os recursos b\u00e1sicos de GUI. Ap\u00f3s a instala\u00e7\u00e3o, removi o teclado e o mouse, deixando apenas os cabos de rede e de for\u00e7a. Evita-se assim mais fios emaranhados pela casa, e os acessos s\u00e3o feitos por <strong>ssh -X<\/strong>.<\/p>\n<p><strong>IP Fixo no Roteador<\/strong><\/p>\n<p>O primeiro passo \u00e9 configurar o IP fixo do servidor. O NetworkManager deu um certo trabalho ent\u00e3o configurei manualmente, no \/etc\/network\/interfaces:<\/p>\n<pre>auto eth0\r\niface eth0 inet static\r\naddress 192.168.1.50\r\ngateway 192.168.1.1\r\nnetmask 255.255.255.0\r\nnetwork 192.168.1.0\r\nbroadcast 192.168.1.255<\/pre>\n<p>Minha rede local \u00e9 192.168.1.X. O final 50 \u00e9 o IP do roteador, cujo hostname \u00e9 <strong>nets<\/strong>.O gateway padr\u00e3o \u00e9 o WRT54G (IP final 1).<\/p>\n<p>\u00c9 preciso configurar tamb\u00e9m o servidor DNS a ser usado pelo nets, no arquivo \/etc\/resolv.conf. Uso o proprio WRT54G:<\/p>\n<pre>joao@nets:\/etc$ cat \/etc\/resolv.conf\r\n# Generated by NetworkManager\r\nnameserver 192.168.1.1<\/pre>\n<p>O NetworkManager \u00e9 meio metido a besta e \u00e0s vezes sobrescreve o resolv.conf. Depois de um reboot, ele sobrescreveu o meu. Alterei manualmente novamente, rebootei e o NM n\u00e3o mexeu mais nele.<\/p>\n<p>Neste ponto, estamos acessando a Internet normalmente a partir do nets.<\/p>\n<p><strong>Servidor DNS<\/strong><\/p>\n<p>O pr\u00f3ximo passo \u00e9 instalar o servidor DNS no nets. Isto n\u00e3o \u00e9 realmente necess\u00e1rio para o meu setup, pois poderia usar o pr\u00f3prio WRT54G como servidor DNS. Mas, se, quem sabe, no futuro, desejar-se fazer uma DMZ, j\u00e1 temos um DNS na rede interna, que apenas delega as requisi\u00e7\u00f5es para o WRT54G.<\/p>\n<p>No Ubuntu, basta instalar o Bind:<\/p>\n<pre>sudo apt-get install bind9<\/pre>\n<p>N\u00e3o precisei alterar nenhuma configura\u00e7\u00e3o e ele j\u00e1 saiu funcionando, delegando as requisi\u00e7\u00f5es para o DNS server do \/etc\/resolv.conf. Para testar, pode usar o nslookup a partir de outro computador, digitando &#8216;server 192.168.1.50&#8217; e depois consultando um dom\u00ednio.<\/p>\n<p><strong>Servidor DHCP<\/strong><\/p>\n<p>A id\u00e9ia principal da configura\u00e7\u00e3o do roteador no nets \u00e9 que os computadores que usam DHCP tenham seu gateway configurado para o pr\u00f3prio nets. Ent\u00e3o, desabilitei o servidor DHCP no WRT54G e instalei um no nets, que vai distribuir os IPs na rede, assim como as configura\u00e7\u00f5es de gateway e DNS. Para instalar o servidor DHCP, podemos usar:<\/p>\n<pre>sudo apt-get install dhcp3-server<\/pre>\n<p>O arquivo de configura\u00e7\u00e3o principal \u00e9 o \/etc\/dhcp\/dhcpd.conf, no qual fiz as seguintes altera\u00e7\u00f5es:<\/p>\n<pre># Comentar as isto, para evitar configura\u00e7\u00f5es globais\r\n#option domain-name \"example.org\";\r\n#option domain-name-servers ns1.example.org, ns2.example.org;\r\n...\r\n# Descomentar e alterar a configura\u00e7\u00e3o da seguinte rede:\r\nsubnet 192.168.1.0 netmask 255.255.255.0 {\r\nrange 192.168.1.150 192.168.1.200;\r\noption domain-name-servers 192.168.1.50, 192.168.1.1;\r\noption domain-name \"intra.delvalle.com\";\r\noption routers 192.168.1.50;\r\noption broadcast-address 192.168.1.255;\r\ndefault-lease-time 6000;\r\nmax-lease-time 72000;\r\n}<\/pre>\n<p>Em resumo, estamos distibuindo IPs com final 150 a 200 para as m\u00e1quinas. Estas usar\u00e3o o nets e o WRT54G, nesta ordem, como servidores DNS. E o nets ser\u00e1 o gateway padr\u00e3o. Configurado isso, \u00e9 preciso reiniciar o servidor DHCP:<\/p>\n<pre>sudo \/etc\/init.d\/dhcp3-server restart<\/pre>\n<p>Para testar, pegamos um notebook que est\u00e1 conectado \u00e0 rede wireless e fazemos a desconex\u00e3o da rede, reconectando-o a seguir. O notebook deve pegar um IP como 192.168.1.150, com gateway e DNS apontando para 192.168.1.50 (nets). \u00c9 interessante, pois quem est\u00e1 provendo a conex\u00e3o na camada wireless (wi-fi) \u00e9 o WRT54G, mas quem est\u00e1 distribuindo os IPs \u00e9 o servidor nets.<\/p>\n<p>Neste ponto, no entanto, n\u00e3o se consegue usar a Internet no notebook, pois o gateway 192.168.1.50 n\u00e3o est\u00e1 encaminhando os pacotes para a Internet.<\/p>\n<p><strong>IP forwarding <\/strong><\/p>\n<p>Para que o nets passe realmente a agir como um roteador, precisamos alterar um par\u00eametro do kernel. Apesar de soar grave, \u00e9 bastante simples:<\/p>\n<pre># descomente a seguinte linha, para habilitar o NAT no servidor\r\nnet.ipv4.ip_forward=1<\/pre>\n<p>Para que tome efeito, fa\u00e7a reboot do servidor (sudo shutdown -r now). \u00c9 poss\u00edvel alterar isso sem rebootar, mas o reboot agora \u00e9 \u00fatil porque j\u00e1 testa a persist\u00eancia da configura\u00e7\u00e3o.<\/p>\n<p>Ap\u00f3s o reboot, o notebook &#8211; e outros clientes DHCP &#8211; j\u00e1 podem acessar a Internet.<\/p>\n<p><strong>Squid Proxy<\/strong><\/p>\n<p>O pr\u00f3ximo passo agora \u00e9 instalar e configurar o Squid, tradicional servidor de Proxy Web:<\/p>\n<pre>sudo apt-get install squid<\/pre>\n<p>Fiz tr\u00eas altera\u00e7\u00f5es no \/etc\/squid\/squid.conf:<\/p>\n<pre># Identificar a rede local em uma ACL\r\nacl localnet src 192.168.1.0\/24 # RFC1918 ...\r\n...\r\n# Descomentar para permitir acesso a partir da rede interna\r\nhttp_access allow localnet\r\n...\r\n# Adicionar o transparent para permitir HTTP transparente\r\n# para qualquer host e porta\r\nhttp_port 3128 transparent<\/pre>\n<p>Alterado o arquivo, \u00e9 preciso reiniciar o servi\u00e7o:<\/p>\n<pre>sudo \/etc\/init.d\/squid restart<\/pre>\n<p>Aqui, j\u00e1 se pode testar o Squid como proxy normal. No Firefox de um dos clientes DHCP, configure o servidor proxy apontando para o nets, porta 3128, para todos os protocolos. O navega\u00e7\u00e3o deve acontecer sem problemas e voc\u00ea pode acompanhar pelo log do squid:<\/p>\n<pre>joao@nets:\/etc\/squid$ sudo -i\r\nroot@nets:~# tail -f \/var\/log\/squid\/*<\/pre>\n<p>Depois do teste, lembre-se de desconfigurar o servidor proxy no Firefox. O objetivo \u00e9 fazer um proxy <strong>transparente<\/strong>, ou seja, que n\u00e3o precisa de configura\u00e7\u00f5es na parte do cliente.<\/p>\n<p><strong>IPTables redirecionando para Squid<\/strong><\/p>\n<p>O Iptables j\u00e1 vem instalado por padr\u00e3o no Ubuntu Server. Mas, para se assegurar que est\u00e1 em seu sistema, pode-se executar:<\/p>\n<pre>sudo apt-get install iptables<\/pre>\n<p>Ele vem configurado como &#8220;passa-tudo&#8221;. Ou seja, recebe o pacote (cujo encaminhamento j\u00e1 habilitamos no kernel) e libera o encaminhamento para o gateway. Para fazer com que o roteador direcione as requisi\u00e7\u00f5es HTTP para o Squid, \u00e9 preciso fazer uma altera\u00e7\u00e3o no Iptables:<\/p>\n<pre>sudo iptables -t nat -A PREROUTING -i eth0 -p tcp  \\\\\r\n     --dport 80 -j REDIRECT --to-port 3128<\/pre>\n<p>Ou seja os pacotes TCP que chegarem para a porta 80 dever\u00e3o ser encaminhados para a porta 3128, onde est\u00e1 o Squid. \u00c9 poss\u00edvel fazer isto tamb\u00e9m para outras &#8211; ou qualquer &#8211; portas. Mas, neste exemplo, s\u00f3 nos interessa o tr\u00e1fego HTTP.<\/p>\n<p>Para fazer com que estas configura\u00e7\u00f5es do Iptables n\u00e3o se percam no reboot, \u00e9 preciso salv\u00e1-las:<\/p>\n<pre>joao@nets:\/etc$ sudo -i\r\nroot@nets:~# iptables-save &gt; \/etc\/iptables.rules<\/pre>\n<p>E criar um script de inicializa\u00e7\u00e3o da interface de rede:<\/p>\n<pre>root@nets# echo '#!\/bin\/sh' &gt; \/etc\/network\/if-up.d\/iptables\r\nroot@nets# echo 'iptables-restore &lt; \/etc\/iptables.rules' &gt;&gt; \/etc\/network\/if-up.d\/iptables\r\nroot@nets# chmod +x \/etc\/network\/if-up.d\/iptables<\/pre>\n<p>Teste o reboot agora e depois verifique se a regra foi persistida no Iptables:<\/p>\n<pre>joao@nets:~$ sudo iptables -L -v -t nat\r\nChain PREROUTING (policy ACCEPT 4 packets, 471 bytes)\r\npkts bytes target prot opt in out source destination\r\n0 0 REDIRECT tcp -- eth0 any anywhere anywhere tcp dpt:www redir ports 3128\r\n...<\/pre>\n<p><strong>Conclus\u00e3o e pr\u00f3ximos passos<\/strong><\/p>\n<p>Neste ponto, o notebook e os outros clientes DHCP devem estar navegando normalmente pela Internet, sem configura\u00e7\u00e3o especial de proxy. E o log disso pode ser acompanhado pelo Squid. Estando o tr\u00e1fego passando pelo Squid, pode-se usar todo o seu poder para filtrar, acelerar, monitorar e fazer cache de conte\u00fado.<\/p>\n<p>O ambiente est\u00e1 OK, mas h\u00e1 alguns pontos de melhoria, como, por exemplo, configura\u00e7\u00e3o din\u00e2mica do servidor DNS no servidor DHCP, evitando que as requisi\u00e7\u00f5es DNS d\u00eaem tantos pulos dentro da rede. Do ponto de vista de seguran\u00e7a, tamb\u00e9m seria interessante bloquear no WRT54G as requisi\u00e7\u00f5es vindas de outros computadores que n\u00e3o o nets. Mas isso fica para outro dia.<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon sd-sharing\"><div class=\"sd-content\"><ul><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-197\" class=\"share-facebook sd-button share-icon no-text\" href=\"https:\/\/www.subterfugios.net\/blog\/proxy-transparente-com-ubuntu\/?share=facebook\" target=\"_blank\" title=\"Clique para compartilhar no Facebook\"><span><\/span><span class=\"sharing-screen-reader-text\">Clique para compartilhar no Facebook(abre em nova janela)<\/span><\/a><\/li><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-197\" class=\"share-twitter sd-button share-icon no-text\" href=\"https:\/\/www.subterfugios.net\/blog\/proxy-transparente-com-ubuntu\/?share=twitter\" target=\"_blank\" title=\"Clique para compartilhar no Twitter\"><span><\/span><span class=\"sharing-screen-reader-text\">Clique para compartilhar no Twitter(abre em nova janela)<\/span><\/a><\/li><li class=\"share-jetpack-whatsapp\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-jetpack-whatsapp sd-button share-icon no-text\" href=\"https:\/\/api.whatsapp.com\/send?text=Proxy%20Transparente%20com%20Ubuntu%20https%3A%2F%2Fwww.subterfugios.net%2Fblog%2Fproxy-transparente-com-ubuntu%2F\" target=\"_blank\" title=\"Clique para compartilhar no WhatsApp\"><span><\/span><span class=\"sharing-screen-reader-text\">Clique para compartilhar no WhatsApp(abre em nova janela)<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Apresento a seguir alguns passos para se configurar um proxy transparente com o Ubuntu. O objetivo \u00e9 ter um ponto de monitora\u00e7\u00e3o das requisi\u00e7\u00f5es \u00e0 Internet feitas a partir dos computadores da rede dom\u00e9stica. N\u00e3o se trata de uma arquitetura &hellip; <a href=\"https:\/\/www.subterfugios.net\/blog\/proxy-transparente-com-ubuntu\/\">Continue lendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon sd-sharing\"><div class=\"sd-content\"><ul><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-197\" class=\"share-facebook sd-button share-icon no-text\" href=\"https:\/\/www.subterfugios.net\/blog\/proxy-transparente-com-ubuntu\/?share=facebook\" target=\"_blank\" title=\"Clique para compartilhar no Facebook\"><span><\/span><span class=\"sharing-screen-reader-text\">Clique para compartilhar no Facebook(abre em nova janela)<\/span><\/a><\/li><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-197\" class=\"share-twitter sd-button share-icon no-text\" href=\"https:\/\/www.subterfugios.net\/blog\/proxy-transparente-com-ubuntu\/?share=twitter\" target=\"_blank\" title=\"Clique para compartilhar no Twitter\"><span><\/span><span class=\"sharing-screen-reader-text\">Clique para compartilhar no Twitter(abre em nova janela)<\/span><\/a><\/li><li class=\"share-jetpack-whatsapp\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-jetpack-whatsapp sd-button share-icon no-text\" href=\"https:\/\/api.whatsapp.com\/send?text=Proxy%20Transparente%20com%20Ubuntu%20https%3A%2F%2Fwww.subterfugios.net%2Fblog%2Fproxy-transparente-com-ubuntu%2F\" target=\"_blank\" title=\"Clique para compartilhar no WhatsApp\"><span><\/span><span class=\"sharing-screen-reader-text\">Clique para compartilhar no WhatsApp(abre em nova janela)<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"sharing_disabled":false,"spay_email":"","footnotes":"","jetpack_publicize_message":""},"categories":[1],"tags":[],"class_list":["post-197","post","type-post","status-publish","format-standard","hentry","category-etc"],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pAkyI-3b","_links":{"self":[{"href":"https:\/\/www.subterfugios.net\/blog\/wp-json\/wp\/v2\/posts\/197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.subterfugios.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.subterfugios.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.subterfugios.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.subterfugios.net\/blog\/wp-json\/wp\/v2\/comments?post=197"}],"version-history":[{"count":0,"href":"https:\/\/www.subterfugios.net\/blog\/wp-json\/wp\/v2\/posts\/197\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.subterfugios.net\/blog\/wp-json\/wp\/v2\/media?parent=197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.subterfugios.net\/blog\/wp-json\/wp\/v2\/categories?post=197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.subterfugios.net\/blog\/wp-json\/wp\/v2\/tags?post=197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}