260 likes | 386 Views
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.
E N D
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.
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 • makeall • makeinstall
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: aclallsrc 0.0.0.0/0.0.0.0 (pré-definida) aclpornurl_regex –i sex adultpornhardcorefetish acl downloads urlpath_regex\.exe$\.rar$\.zip$\. pif$ \.src$ aclnossa_redesrc 192.168.0.0/24 http_accessdenyporn http_accessdeny downloads http_accessallownossa_rede http_accessdenyall
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 – -dport443 –j MASQUERADE
Computador das criançasMasquerade • 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 InstantMesseger 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
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.
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