Bom galera gostaria que vcs criticassem meu
script de firewall.
Vou explicar o que eu quis
fazer:
Nesse servidor roda
qmail(+acessorios)+apache+squid. Quis fazê-lo o mais restritivo possível e
ir liberando somente o necessário (25, 110, 80 para entrantes e mascarar
somente algumas para a rede)
Segue o script:
------------ INICIO DO SCRIPT
##### POLICY #####
# Tabela
filter
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT
ACCEPT
iptables -t filter -P FORWARD DROP
# Tabela nat
iptables
-t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT
ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
##### Ativamos o redirecionamento de pacotes
(requerido para NAT) #####
echo "1"
>/proc/sys/net/ipv4/ip_forward
##### Abaixar o limite de conexoes
simultaneas
echo "2048" >
/proc/sys/net/ipv4/ip_conntrack_max
###############################################################
#
Tabela
filter
#
###############################################################
#####
Chain INPUT #####
# Criamos um chain que será usado para tratar o
tráfego vindo da Internet
iptables -N int-input
# Aceita todo o
tráfego vindo do loopback e indo pro loopback
iptables -A INPUT -i lo
-j ACCEPT
# Todo tráfego vindo da rede interna também é
aceito
iptables -A INPUT -s 192.168.0.0/24 -i eth0 -j
ACCEPT
# Conexões vindas da interface eth1 são tratadas pelo
chain int-input
iptables -A INPUT -i eth1 -j int-input
# Outras conex sao bloqueadas
iptables -A
INPUT -j DROP
##### Chain FORWARD ####
# Permite
redirecionamento de conexões entre as interfaces locais
# especificadas
abaixo. Qualquer tráfego vindo/indo para outras
# interfaces será
bloqueado neste passo.
iptables -A FORWARD -d 192.168.0.0/24 -i eth1
-o eth0 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o eth1
-j ACCEPT
iptables -A FORWARD -j DROP
##### Chain int-input ####
# Aceitamos
todas as mensagens icmp vindas de eth1 com certa limitação
# O tráfego
de pacotes icmp que superar este limite será bloqueado
# pela regra
"...! ESTABLISHED,RELATED -j DROP" no final do
# chain
int-input
iptables -A int-input -p icmp -j
ACCEPT
# Primeiro aceitamos o tráfego vindo da
Internet para as portas 80, 110, 25
iptables -A int-input -p tcp
--dport 80 -j ACCEPT
iptables -A int-input -p tcp --dport 110 -j
ACCEPT
iptables -A int-input -p tcp --dport 25 -j ACCEPT
# Bloqueia qualquer tentativa de nova conexão
de fora para esta máquina
iptables -A int-input -m state --state !
ESTABLISHED,RELATED -j DROP
# Aceita outros tipos de trafego
iptables
-A int-input -j ACCEPT
#######################################################
#
Tabela
nat
#
#######################################################
#
Redir do SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80
-j REDIRECT --to-port 3128
# Ativando mascaramento para determinadas
portas
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0/0 -p icmp
-j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0/0
-p tcp --dport 110 -j MASQUERADE
iptables -t nat -A POSTROUTING -s
192.168.0.0/24 -d 0/0 -p tcp --dport 25 -j MASQUERADE
iptables -t nat
-A POSTROUTING -s 192.168.0.0/24 -d 0/0 -p tcp --dport 80 -j
MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0/0 -p
tcp --dport 3128 -j ACCEPT
iptables -t nat -A POSTROUTING -s
192.168.0.0/24 -d 0/0 -p udp --dport 53 -j MASQUERADE
iptables -t nat
-A POSTROUTING -s 192.168.0.0/24 -d 0/0 -p udp --dport 53 -j
ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0/0 -p tcp
--dport https -j MASQUERADE
------------------ FIM DO
SCRIPT
Minhas dúvidas:
1) A policy [iptables -t nat -P
POSTROUTING ACCEPT ] deixa o firewall muito peneira? tentei deixar em
DROP e liberar somente algumas coisas mas parecia que dava conflitos
de regras.
2) Por que, se eu liberei somente algumas
portas para masquerade, o msn continua funcionando? (pensei que talvez o
maldito funcione em porta 80, caso nao encontre sua porta
específica)
3) O firewall está realmente restritivo? Ou
está uma merda? hehe
Não tenho muita experiência em segurança, mas
li muito a respeito pra tentar fazer o melhor possível (guia foca -
iptables, google com vários exemplos de scripts) porém, precisava da
opinião de vocês e de uma ajuda pra dar uma melhorada já que muitos têm
uma experiência grande nisso.
Obrigado!!