Este post tenta esclarecer um pouco sobre como funcionam as redes e como transformar nosso equipamento Linux em um Roteador que deixa nossa rede um pouco mais segura, seja em casa ou mesmo no escritório. Então, vamos ao que interessa:
Roteamento e filtragem
Para falar e entender sobre roteamento, podemos primeiro definir qual é a função do roteador? Por isso podemos dizer que um roteador, além de criar uma rede e permitir a conexão com outros equipamentos (sabendo que podemos fazer isso com um AP, Switch, Hub ou outros) tem a capacidade de conectar duas redes diferentes entre si.
Como podemos ver na imagem, existe uma rede local "10.0.1.0" que é criada pelo roteador e atinge uma de suas duas interfaces. Então, o roteador em sua outra interface, tem outra rede, com seu IP público com o qual ele pode se conectar à Internet. A função de roteamento é basicamente servir de intermediário entre essas duas redes para que possam se comunicar.
Linux como roteador.
Naturalmente, o kernel do Linux já tem a capacidade de "encaminhar", mas por padrão está desabilitado, então se quisermos que nosso Linux faça este trabalho, devemos ir ao arquivo.
/proc/sys/net/ipv4/ip_forward
Lá descobriremos que é um arquivo que contém apenas um zero "0", o que devemos fazer é alterá-lo para um "1" para ativar este comportamento. Este infelizmente é apagado quando reiniciamos o computador, para deixá-lo ativado por padrão devemos usar o comando:
sysctl net.ipv4.ip_forward=1
Ou edite-o diretamente no arquivo /etc/sysctl.conf. Dependendo da distribuição, esta configuração também pode estar em um arquivo em /etc/sysctl.d/.
Por padrão, nosso Linux deve ter uma tabela de roteamento, que geralmente é a configuração de nossa rede lan e a conexão com o roteador. Se quisermos ver esse roteamento, podemos usar dois comandos:
route -n
o
netstat -nr
Ambos os comandos devem retornar o mesmo.
Em geral, esta configuração é suficiente para que seu Linux funcione como um Gateway e outros computadores possam navegar em nosso computador. Agora, se quisermos que nosso Linux conecte duas ou mais redes, sejam locais ou não, por exemplo, podemos fazer uso de rotas estáticas.
Suponha que meu Linux tenha duas interfaces de rede, a primeira tem uma conexão à Internet cuja rede é 172.26.0.0 e a segunda (10.0.0.0) tem alguns computadores de outra rede local. Se quisermos rotear pacotes para essa outra rede, podemos usar:
route add -net 10.0.0.0 netmask 255.0.0.0 gw 172.26.0.8
Em geral, é:
route add -net REDDESTINO netmask MASCARA gw IPDELLINUX
se dermos rota -n independente de esta rede existir ou não, esse roteamento será corrigido em nossa tabela.
Se quisermos eliminar o referido roteamento, podemos usar
route del -net 10.0.0.0 netmask 255.0.0.0
iptables.
Basicamente, o iptables é usado para filtrar pacotes de saída, entrada ou outros, o que o torna uma ótima ferramenta para gerenciar o tráfego de nossa rede. Bem, iptables, assim como nos permite filtrar o tráfego do mesmo computador, também nos permite filtrar o tráfego que passa por ele. (Encaminhamento). Os iptables podem ser divididos em tabelas, strings e ações.
- Pranchas: basicamente, pode haver duas tabelas, filtro, para filtrar pacotes e nat para traduzir endereços, ou seja, para passar de uma rede para outra.
- Correntes: A cadeia se refere ao tipo de tráfego que queremos filtrar ou nadar, ou seja, a qual tráfego vamos aplicar as tabelas? e eles podem ser: INPUT : Tráfego de entrada, SAÍDA: tráfego de saída ou FRENTE: Tráfego que passa por ele, mas não é sua própria conexão.
- Também pode aparecer PÓS-ROTEAMENTO, que é usado para tratar o pacote de uma determinada maneira após ele ter sido roteado.
- Ações: Ações são basicamente as ações a serem realizadas com a corrente. Esta ação pode ser SOLTA, que apenas destrói esse tráfego ou ACEITAR. que permite que o tráfego faça essa ação.
As regras IPTABLES são salvas e executadas na ordem em que foram criadas e, se uma regra excluir uma regra anterior, a última regra da ordem sempre será aplicada.
Políticas de firewall.
Em geral, os firewalls funcionam naturalmente de duas maneiras:
- Permitir todo o tráfego, exceto ou
- Não permitir nenhum tráfego, exceto ...
Para aplicar políticas, use IPTABLES - P ACTION CHAIN
Onde a string representa o tipo de tráfego (INPUT, OUTPUT, FORWARD, POSTROUTING ...) e a ação é DROP OR ACCEPT.
Vejamos um exemplo.
Aqui vemos que a princípio consegui pingar, depois disse ao IPTABLES que todo o tráfego de OUTPUT estava DROP ou não permitido. Então eu disse a IPTABLES para aceitar.
Se vamos construir um firewall do zero, devemos sempre aplicar as regras de (Não permitir nenhum tráfego, exceto ... Para isso, então aplicamos as regras
iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
Para retornar, escrevemos o mesmo e substituímos DROP por ACCEPT.
Neste ponto, como todo o tráfego é negado, começamos a dizer ao nosso IPTABLES que tráfego ele pode ter.
A sintaxe é:
iptables -A cadena -s ip_orgigen -d ip_destino -p protocolo --dport puerto -j acción
Onde:
String = INPUT, OUTPUT ou FORWARD
origin_ip = Origem dos pacotes, pode ser um único IP ou uma rede e neste caso devemos especificar a máscara).
destination_ip = para onde os pacotes estão indo. pode ser um único IP ou uma rede e neste caso devemos especificar a máscara).
protocolo = indica o protocolo usado pelos pacotes (icmp, tcp, udp ...)
porta = porto de destino do tráfego.
ação = DROP ou ACCEPT.
Exemplo:
TODAS as políticas restritas se aplicam.
Em seguida, adicionamos as regras para poder ter tráfego pela porta 80 HTTP e 443 HTTPS, com o protocolo TCP. Então a porta 53 é aplicada para o cliente DNS resolver os domínios, caso contrário você não vai navegar. Isso funciona com o protocolo udp.
A linha:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
O motivo é o seguinte: Quando você faz uma solicitação HTTP, por exemplo, você se conecta à porta 80 do servidor, mas o servidor para retornar as informações precisa se conectar a você por qualquer porta. (Geralmente maior que 1024).
Como todas as nossas portas estão fechadas, isso não será alcançado a menos que abramos todas as portas acima de 1024 (má ideia). O que isso diz é que todo o tráfego de entrada proveniente de uma conexão que eu mesmo estabeleci é aceito. Quer dizer, uma conexão que em princípio eu comecei.
Espero que tenha gostado desta informação. Na próxima falarei sobre NAT, Proxy e scripts para Firewal.
Essa é a base que muitos empreendedores usam para fabricar seus próprios firewalls, por isso existem tantas marcas de firewalls com Linux embutido no mercado, algumas boas e outras nem tanto.
Excelente artigo. Estou ansioso para a segunda parte.
Explicação muito boa, me ajudou a entender a proxy do meu trabalho. Obrigado
Olá Jlcmux,
Excelente, gostei muito, quando a outra parte estará disponível?
Saudações e obrigado por compartilhar
Obrigado pelo comentário.
Mandei a outra parte ontem, no decorrer do dia acho que vão publicar.
Saudações.
Artigo muito bom amigo @ Jlcmux, realmente aprendi com ele desde que ele esclareceu algumas dúvidas que eu tinha há algum tempo, aliás você não se importaria de compartilhar o livro da fonte do artigo, o de Sébastien BOBILLIER, bom slau2s e agora to veja a 2ª parte, salu2s.
Olá, obrigado por comentar Israel.
Acontece que tenho o livro em forma física. Mas eu encontrei este link no Google Livros. http://books.google.com.co/books?id=zxASM3ii4GYC&pg=PA356&lpg=PA356&dq=S%C3%A9bastien+BOBILLIER+Linux+%E2%80%93+Administraci%C3%B3n+del+sistema+y+explotaci%C3%B3n+de+los+servicios+de+red#v=onepage&q=
Acho que está completo.
Artigo muito bom, acrescento uma pergunta: Qual seria a vantagem de usar o linux como roteador, se houver, no que diz respeito a um hardware dedicado a ele? Ou é apenas para fazer exercícios? Eu sei que existem distros dedicadas, mas não sei se são para recuperar PCs antigos ou fornecer mais flexibilidade na configuração.
Bem, acho que as vantagens e desvantagens dependem do cenário em que você vai implementar isso. Por que certamente você não vai comprar um UTM ou algo parecido para sua casa? E talvez para uma pequena empresa que também não pode pagar. Também é um bom exercício, pois ajuda a entender toda a lógica disso e você pode configurar melhor um FWall dedicado. Além disso, quase todos esses dispositivos realmente possuem Linux embarcado.
Saudações.
Olá, uma pergunta, você pode gerar uma interface "artificial" no linux para roteamento semelhante entre redes? (estilo packet tracer) para trabalhar com máquinas virtuais? por exemplo, se eu tiver a eth0 (porque tenho uma única placa, é claro) posso criar a eth1 para fazer outra rede? Muito bom tutor!
No Linux, você pode criar interfaces virtuais, é claro. Se você tiver eth0, pode ter eth0: 0, eth0: 1, eth0: 2 ... etc
Tão bom, obrigado por compartilhar