Avaliação de firewall

Iniciado por maxabbr, 06 de Julho de 2010, 09:37

tópico anterior - próximo tópico

maxabbr

Pessoal,

Sei que é um pedido chato, mas montei meu primeiro script para firewall com iptables e gostaria de uma opinião do pessoal mais graduado. O script funciona bem, mas não tenho 100% de certeza com relação a parte de segurança, embora alguns sites de testes tenham aprovado meu firewall.

A idéia do script é liberar apenas algumas portas da rede interna diretamente e usar o squid para a navegação web.

Temos também um sistema de suporte baseado em VNC onde os clientes tem seu IP liberado para acessar algumas estações da lan, sendo que há um mapeamento das portas 5550~5570 do nosso firewall para a porta 5500 das estações da lan através de uma chain e de "PREROUTING".

Parâmetros:
eth0 - lan
eth1 - wan
192.168.10.0/24 - lan range
5550~5570 - portas para acesso externo ao VNC, onde a chain VNC recebe comandos de liberação a partir do IP do cliente para a porta 5500 (padrão VNC) das estações na lan

#####################################################

#!/bin/sh

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

modprobe ip_tables
modprobe iptable_filter
modprobe ip_conntrack
modprobe ipt_MASQUERADE
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp

iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -Z

# Negacao padrao para entreda e encaminhamento.
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

# Navegacao livre para a interface local.
iptables -A INPUT -i lo -s 0/0 -d 0/0 -j ACCEPT
iptables -A OUTPUT -o lo -s 0/0 -d 0/0 -j ACCEPT

# Permite pacotes de comunicacoes ja estabelecidas.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Libera a rede interna para uso de portas selecionadas.
iptables -A FORWARD -s 192.168.10.0/24 -p tcp -m multiport --dport 22,25,110,137,138,139,443,445,465,3128,3389,995 -d 0/0 -o eth1 -j ACCEPT
iptables -A FORWARD -s 192.168.10.0/24 -p udp -m multiport --dport 53,137,138,139,445,3128 -o eth1 -j ACCEPT

# Permite que a rede interna se comunique com o servidor.
iptables -A INPUT -i eth0 -s 192.168.10.0/24 -j ACCEPT

# Ativa o mascaramento para navegacao na internet pela rede interna.
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

# Cria a chain e redireciona acessos VNC.
iptables -t nat -N VNC
iptables -t nat -A PREROUTING -i eth1 -s 0/0 -p tcp --dport 5550:5570 -j VNC
iptables -A FORWARD -i eth1 -p tcp -d 192.168.10.0/24 --dport 5500 -m state --state NEW -j ACCEPT

# Prioriza comunicacao de pacotes VNC.
iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 5500:5570 -j TOS --set-tos 0x10
iptables -t mangle -A FORWARD -p tcp --dport 5550:5570 -j TOS --set-tos 0x10
iptables -t mangle -A POSTROUTING -o eth1 -p tcp --sport 5550:5570 -j TOS --set-tos 0x10

zekkerj

Três reparos...

1. Toda vez que vc tiver um "-d 0/0" ou "-s 0/0", não precisa colocar.

2. Não libere a passagem de rede windows (137/tcp, 138/tcp, 139/tcp, 445/tcp, 137-139/udp) pra fora da rede local, a menos que você realmente precise.

3. As portas padrão do VNC começam em 5900, não em 5500.

De resto, o firewall parece bem planejado. Pouca firula, política DROP na entrada (INPUT) e no repasse (FORWARD). Eu só teria usado variáveis dentro do firewall, em vez de, tipo, repetir toda hora "192.168.10.0/24".
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

maxabbr

zekkerj, valeu pelas dicas!

1. Algumas regras aparentemente não funcionam sem o "0/0", em especial os forwards que usei. Tentei procurar alguma referência sobre isso mas não achei nada, então acabei deixando.

2. Tem toda razão.

3. Esqueci de dizer que o VNC que usamos é em listen mode (UltraVNC), então é mesmo a 5500.

zekkerj

CitarAlgumas regras aparentemente não funcionam sem o "0/0"
É só aparência. Vc pode omitir o "-s 0/0" e o "-d 0/0" sem medo. Mas note: vc tem que omitir o "-s" e o "-d" também.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D