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
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
Download

10 Iptables