Escolar Documentos
Profissional Documentos
Cultura Documentos
3c0linux.wordpress.com/2010/07/28/iptables-bloqueando-portas-de-saida-e-dominios/
Mais um uso importante para o firewall é bloquear portas de saída, ou seja, bloquear
portas no sentido rede local > Internet. Isso permite bloquear o uso de determinados
programas que utilizem estas portas.
O MSN, por exemplo, utiliza originalmente a porta 1863. Nas versões recentes ele é capaz
de se conectar também através da porta 80 (ou através de sites como o meebo.com, que
permitem acessar o MSN diretamente através do navegador). Por isso, ao bloquear a porta
1863, os clientes podem continuar conseguindo se conectar, porém, você obriga o tráfego
a passar pela porta 80, onde tem a chance de fazê-lo passar por um servidor Squid,
configurado como proxy transparente. Isso permite logar os acessos ou sabotar o sistema
de autenticação do MSN, bloqueando os domínios “messenger.hotmail.com” e
“webmessenger.msn.com”, além de outros sites que ofereçam clientes via web.
Hoje em dia, cada vez mais programas são capazes de acessar a Web através da porta
80, 443 ou via proxy, o que torna difícil bloqueá-los. Em muitos casos, é preciso usar uma
combinação de portas fechadas no firewall, bloqueio a endereços IPs específicos e
bloqueio de determinados domínios no Squid.
Você pode ainda bloquear intervalos de portas, separando-as por “:”, como em:
Como estamos criando regras para os micros da rede local e não para possíveis invasores
provenientes da Internet, é aconselhável usar a regra “REJECT” ao invés de “DROP”.
Caso contrário, os programas nos clientes sempre ficarão muito tempo parados ao tentar
acessar portas bloqueadas, o que vai gerar reclamações e um certo overhead de suporte.
Você pode descobrir facilmente quais portas de saída são utilizados por cada programa
fazendo buscas no Google, mas tentar bloquear um a um todos os programas indesejados
acaba sendo tedioso. Ao invés disso, você pode experimentar um solução mais radical:
inverter a lógica da regra, bloqueando todas as portas de saída e abrindo apenas algumas
portas “permitidas”.
1/4
O mínimo que você precisa abrir neste caso são as portas 80 e 53 (DNS). A partir daí,
você pode abrir mais portas, como a 25 (SMTP), 110 (POP3), 443 (HTTPS) e assim por
diante. Um exemplo de configuração neste caso seria:
Veja que todas as regras especificam a interface da rede local (eth0 no exemplo), de onde
serão recebidas as conexões dos clientes. Note que não incluí nenhum bloqueio para
forwarding de pacotes provenientes da interface eth1 (da Internet), pois a idéia é bloquear
diretamente as requisições dos clientes, e não as respostas. Em uma conexão TCP típica,
o cliente envia a requisição na porta TCP usada pelo serviço, mas recebe a resposta em
uma porta aleatória. Este é um exemplo de entrada no log do Iptables que mostra a
resposta a uma conexão HTTP normal. Veja que ela está endereçada à porta 45159 do
cliente:
No caso da porta 53 (DNS), estou especificando o protocolo UDP ao invés de TCP, pois
as requisições são feitas usando portas UDP para ganhar tempo. Embora os servidores
DNS escutem tanto na porta 53 TCP, quanto UDP, a porta 53 TCP é utilizada apenas para
transferência de zonas e não para resolução de nomes, já que ao usar UDP o tempo de
resposta é menor. No UDP a requisição é simplesmente respondida da forma mais rápida
possível, enquanto que no TCP é necessário abrir e encerrar a conexão.
A regra “iptables -A FORWARD -j LOG” é uma boa opção durante a fase de testes, pois
ela faz com que o Iptables logue todos os pacotes que forem encaminhados (tanto envio,
quanto resposta), permitindo que você verifique o que está ocorrendo quando algo não
estiver funcionando. Você pode acompanhar o log usando o comando “dmesg”.
Colocado nesta posição (depois das regras que autorizam as conexões nas portas 53 e
80), ele vai mostrar apenas as requisições bloqueadas pelo firewall, dando-lhe a chance de
acompanhar os acessos dos clientes e permitir portas adicionais sempre que necessário.
Por exemplo, esta estrada (no log) mostra uma tentativa de conexão de um cliente MSN
rodando no micro “192.168.1.10” que foi bloqueada pelo firewall:
A opção “DTP” indica a porta usada. Se quisesse autorizar o uso do programa, você
adicionaria a regra “iptables -A FORWARD -p tcp -i eth1 –dport 1863 -j ACCEPT” em seu
script.
2/4
Outra opção, para não precisar abrir tantas portas e ter um melhor controle sobre o tráfego
de saída é usar um servidor Squid configurado como proxy transparente (interceptando o
tráfego da porta 80) e rodar servidores locais para DNS e e-mail (você pode configurar um
servidor Postfix como sistema satélite, de forma que ele envie os e-mails dos usuários da
rede usando o SMTP do provedor), de forma que qualquer acesso precise
necessariamente passar por algum dos serviços ativos no servidor, sujeito a log e aos
bloqueios que configurar.
Esta regra deve ir logo no início do script, antes das regras que abrem as portas de saída,
caso contrário não surtirá efeito. Lembre-se de que o Iptables processa as regras
seqüencialmente: se uma compartilha a conexão com todos os micros da rede, não
adianta tentar bloquear para determinados endereços depois. As regras com as exceções
devem sempre vir antes da regra mais geral.
É possível ainda bloquear ou permitir com base no domínio, tanto para entrada quanto
saída. Isso permite bloquear sites e programas diretamente a partir do firewall, sem
precisar instalar um servidor Squid e configurá-lo como proxy transparente. Nesse caso,
usamos o parâmetro “-d” (destiny) do Iptables, seguido do domínio desejado.
A primeira linha bloqueia pacotes de saída destinados ao domínio, ou seja, impede que
ele seja acessado a partir da própria máquina local. A segunda linha bloqueia o forward de
pacotes destinados a ele (domínio), ou seja, impede que outras máquinas da rede local,
que acessam através de uma conexão compartilhada, acessem o domínio.
Esta regra impede também que qualquer pacote proveniente do orkut.com chegue até a
sua máquina. Como disse, é apenas para paranóicos. ;)
3/4
Originalmente, o Iptables sabia trabalhar apenas com endereços IP. A possibilidade de
criar regras baseadas em domínios é um recurso um pouco mais recente, onde o firewall
faz um lookup do domínio, de forma a descobrir qual é o IP atual e assim poder bloqueá-lo.
Você pode verificar o IP usado pelo servidor de um determinado domínio usando o
comando “dig” (que no Debian faz parte do pacote “dnsutiuls”), como em:
$ dig orkut.com
Assim como no caso do Squid, ao decidir bloquear o acesso a sites ou endereços diversos
utilizando o Iptables, você vai logo acabar com uma lista relativamente grande de
endereços a bloquear. Diferente do Squid, o Iptables não oferece uma opção para carregar
a lista dos endereços que devem ser bloqueados a partir de um arquivo de texto, mas isso
pode ser resolvido com um script simples, que leia o conteúdo do arquivo e gere as regras
correspondentes.
http://www.orkut.com
http://www.myspace.com
http://www.facebook.com
Esta função usa o comando cat para ler o conteúdo do arquivo, gerando um par de regras
do Iptables para cada um deles. O laço continua até gerar regras para todos os endereços
incluídos no arquivo.
Fonte: Link
Anúncios
~ por 3c0linux em julho 28, 2010.
4/4