Linux como um roteador doméstico Netfilter/Iptables Linux como um roteador doméstico
Cenário 2 Linux como um roteador SOHO (Stands Offices and Home Offices). A máquina Linux irá atuar como um roteador semelhante ao que temos em nossas residências. Provendo a conexão ao Provedor Internet. Compartilhando este acesso com as máquinas da LAN. Normalmente os roteadores SOHO possuem uma porta WAN e portas LAN. Equipamento local do usuário (Modem DSL). Geralmente o provedor nos fornece um endereço IP público via DHCP. PPPoE. Conexões Ethernet. Conexões sem fio.
Topologia
Endereços O Roteador Linux tem: O endereço público na interface eth0, fornecido dinamicamente pelo provedor de acesso (modo NAT). O endereço privado 192.168.1.1/24 na interface eth1, configurado por você. O Laptop possui o endereço 192.168.1.2. O Desktop possui o endereço 192.168.1.11. O PC das crianças possui o endereço 192.168.1.55.
Configurando a rede Configure as interfaces de rede e os nomes dos hosts conforme o slide anterior. É interessante criar configurações que se mantenham após a reinicialização das máquinas.
Definindo a política de segurança (1) As crianças precisam: Usar o navegador para pesquisar na Internet. Não queremos que elas acessem sites pornográficos. Não queremos que elas façam download de vírus. Também não queremos que elas acessem conteúdos P2P. O Laptop pode: Acessar qualquer coisa.
Definindo a política de segurança (2) O Desktop pode: Acessar qualquer coisa. Conectar-se à LAN a partir da Internet, via VNC. O Roteador Linux precisa: Rodar SSH a partir da rede interna.
Construindo o proxy Inicialmente precisamos instalar em nossa máquina firewall, o proxy server Squid. www.squid-cache.org. ./configure --prefix=/squid make all make install
Configurando o Squid (1) Adicione as linhas abaixo no arquivo /etc/squid.conf. As entradas se referem ao usuário que irá inicializar o Squid. cache_effective_user Manager cache_effective_group Manager
Configurando o Squid (2) Para ser capaz de usar o Squid como um Transparente Proxy, temos que adicionar a seguinte informação no arquivo de configuração em /squid/etc/squid.conf. http_port 3128 transparent
Criando lista de acesso no Squid Agora, precisamos definir listas de acesso para a rede interna acessar o Squid e para proibir o acesso a sites pornográficos e a arquivos perigosos. Faremos isso para a rede inteira, mas nós usaremos o Transparente Proxy somente para o computador das crianças. Qualquer arquivo pode ser um vírus. O que se segue é apenas um exemplo.
Criando lista de acesso no Squid (2) Insira em squid.conf as linhas abaixo: acl all src 0.0.0.0/0.0.0.0 (pré-definida) acl porn url_regex –i sex adult porn hardcore fetish acl downloads urlpath_regex\.exe$\.rar$\.zip$\. pif$ \.src$ acl nossa_rede src 192.168.0.0/24 http_access deny porn http_access deny downloads http_access allow nossa_rede http_access deny all
ACLs A ACL chamada porn contém a lista de nomes que não são permitidas na URL. Você não conseguirá acessar sites que possuem estas palavras na URL, via proxy. A ACL chamada downloads contém a lista de tipos de arquivos não permitidos. Não será possível fazer download de arquivos com estas extensões.
Próximos passos Agora que já configuramos o proxy, vamos configurar o firewall cujas regras devem casar com as políticas de segurança que nós acabamos de construir.
Computador das crianças Para o computador das crianças nós executaremos o Transparent Proxy. Significa que o computador acessará o proxy sem precisar configurar o navegador. Nós já configuramos o proxy server. Agora, nós precisamos que todo o tráfego para a porta 80 TCP seja redirecionado para o proxy server. Nós também queremos que o computador das crianças acesse a porta 443 TCP (HTTPS).
Configurando iptables –t nat –A PREROUTING –s 192.168.1.55 –p tcp – -dport 80 –j REDIRECT - –to-port 3128 iptables –t nat –A POSROUTING –o eth0 -s 192.168.1.55 –p tcp – -dport 443 –j MASQUERADE
Computador das crianças Masquerade Agora, vamos mascarar o computador das crianças quando ele enviar requisições DNS para nosso provedor de acesso. iptables –t nat –A POSTROUTING –o eth0 –s 192.168.1.55 –p udp – -dport 53 –j MASQUERADE Requisições DNS usam a porta UDP 53.
Yahoo! Nós queremos que as crianças usem o “Yahoo!Messenger” somente para chat sem voz e sem transferência de arquivos. Lendo os manuais da ferramenta, vê-se que o Yahoo! Messeger usa as portas 20, 23, 25, 80, 119, 5050, 8001 e 8002. Também vê-se que os sites que o “Yahoo!Messenger” utiliza para Instant Messeger são: scs.msg.yahoo.com, scsa.msg.yahoo.com, scsb.msg.yahoo.com e scs.cmsg.yahoo.com.
MASQUERADE É melhor mascarar o computador das crianças quando ele acessa esses sites. Nós devemos fazer: iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.55 -d scs.msg.yahoo.com -j MASQUERADE NOTA: Ao inserir um nome de máquina ao invés do seu endereço IP, o DNS irá resolver este nome. Se um nome é resolvido para múltiplos endereços IP, o iptables irá inserir uma regra independente para cada endereço.
Proibindo o acesso aos demais hosts Agora que nós permitimos o acesso do computador das crianças a determinados sites, devemos agora proibir o acesso a outras portas e outros sites. iptables –t nat –A POSTROUTING –o eth0 –s 192.168.1.55 –j DROP
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE Laptops e Desktop O Laptop e o Desktop precisam ser capazes de acessar qualquer site, então nenhuma regra é necessária a não ser o MASQUERADE para a nossa rede. iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE
Protegendo o firewall Já fizemos todas as configurações necessárias a proteção de nossa rede local. Agora vamos proteger o nosso firewall. Em primeiro lugar nós precisamos rodar o SSH em nosso firewall para que ele possa ser administrado remotamente. Para isto precisamos criar uma nova chain. Podemos chamá-la de SSH. Se uma vulnerabilidade for descoberta no SSH, rapidamente haverá scanners de worms na porta padrão do SSH. A porta 22. Então devemos alterar essa porta.
iptables –A INPUT –p tcp - -dport 1234 –j SSH Criando a chain SSH Criando a chain SSH. iptables –N SSH Agora, vamos inserir uma regra para pedir ao kernel para checar as regras na chain SSH, para toda conexão TCP na porta 1234. iptables –A INPUT –p tcp - -dport 1234 –j SSH
Inserindo regras na chain SSH Devemos inserir uma regra na chain SSH permitindo acesso somente para hosts confiáveis. Digamos que o endereço IP do PC do nosso escritório seja 1.2.3.4. iptables –A SSH –s 1.2.3.4 –j ACCEPT iptables –A SSH –s 192.168.1.0/27 –j ACCEPT iptables –A SSH –s 0/0 –j DROP
Significado das regras A primeira regra aceita conexões a partir do computador de nosso escritório. A segunda regra permite conexões SSH de entrada somente oriundas de computadores com endereços no intervalo de 192.168.1.1 à 192.168.1.32. A terceira regra descarta todos as demais conexões para a porta 1234.
Finalmente... O proxy Squid tem a sua própria segurança usando as Listas de Acesso. Mesmo assim vamos que pacotes TCP SYN, vindos da Internet estabeleçam conexão com nosso Squid/Router/Firewall, exceto na porta 1234 a partir de PC 1.2.3.4. Vamos também, liberar todos os pacotes vindos da interface loopback para IPC (processos internos de comunicação). iptables –A INPUT –i lo –j ACCEPT iptables –A INPUT –i eth0 –p tcp - –syn –j DROP