Digamos que temos uma rede com os seguintes serviços para os usuários:
- Servidor SMTP;
- Servidor pop3/imap;
- Servidor Web;
- Servidor Impressão;
- Servidor Arquivos;
- Servidor FTP.
Queremos ter certeza de que nossos usuários não acessem nada além
disso e que também nenhum engraçadinho tente algum ataque
partindo da LAN.
Vamos então elaborar o nosso projeto de perímetro. Precisaremos a
princípio separar tudo que é permitido e o que não é.
Vamos separar as portas que vamos separar para os acessos válidos:
25 (smtp), 110 (pop3), 143 (imap), 137-138-139 (Impressão/Arquivos), 21 (FTP), 80 (Web).
Tendo em vista que isso será o necessário para nossos usuários, todo
o resto pode ser considerado tráfego suspeito, ou não permitido, sendo
assim, temos que estar de olho nesse tipo de requisição.
Como o sistema de IDS
Snort permite configurações bem
diferentes e ousadas, vamos utilizar ele de maneira diferente da
convencional. Devido aos falsos positivos, imaginem só se tivermos
que ficar analisando centenas de bytes, em diversos serviços externos
e olhando assinaturas de ataques, em que os serviços nem estão
disponíveis em nossa rede.
Isso causa perda de tempo e dinheiro. Assim vamos utilizar o Snort
em modo plano.
Para utilizar o IDS em plano iremos descartar todas as outras regras
que já vem no Snort e vamos utilizar regras criadas por nós mesmos
para definir a ação do Snort em nosso plano de perímetro.
Por padrão o Snort processa primeiro as regras de Alert e depois as
regras de Pass. Precisaremos fazer com que o Snort funcione de maneira
inversa, ou seja, processar primeiro as regras de Pass, para que assim
não tenhamos centenas de Falsos positivos.
Para isso usaremos o parâmetro "-o" ao iniciar o Snort, isso fará
ele agir da maneira que necessitamos. Exemplo:
# ./snort -c /etc/snort/snort.conf -o
Para que possamos adicionar as regras necessárias em nosso Snort,
vamos colocar um "include" dentro do
snort.conf contendo nosso
arquivo de regras.
Supomos que nossa rede seja 192.168.10.0/24 a rede dos usuários e 192.168.11.0/24 a rede do servidor, vamos agora gerar um arquivo contendo as regras tanto para TCP quanto para UDP:
# regras.conf
# ----------------------------------------------------------
# Anderson Luiz Tamborim ( security*NOSPAM*tionline.com.br )
# ----------------------------------------------------------
# Regras para IDS baseado em Plano
# Regras Alert
alert tcp any any <> [192.168.10.0/24,192.168.11.0/24]
alert udp any any <> [192.168.10.0/24,192.168.11.0/24]
alert ip any any <> [192.168.10.0/24,192.168.11.0/24]
Isso iria gerar um alerta para qualquer tráfego entre essas duas
redes, assim nossa primeira política de alertas está feita, agora
teremos que fazer as regras para liberar as portas que serão
válidas aos usuários:
pass tcp 192.168.10.0/24 any -> 192.168.11.1 25
pass tcp 192.168.10.0/24 any -> 192.168.11.1 80
pass tcp 192.168.10.0/24 any -> 192.168.11.1 110
pass tcp 192.168.10.0/24 any -> 192.168.11.1 143
pass tcp 192.168.10.0/24 any -> 192.168.11.1 21
pass tcp 192.168.10.0/24 any -> 192.168.11.1 137:139
# Agora pacotes UDP
pass udp 192.168.10.0/24 any -> 192.168.11.1 137:139
pass udp 192.168.10.0/24 any -> 192.168.11.1 21
# Pacotes IP
# Não utilizaremos pacotes IP, pois não estamos
# utilizando nenhum serviço como VPN ou sistema de
# autenticação como Kerberos
Temos o nosso regras.conf feito e agora necessitamos
carregá-lo no snort.conf. Para isso edite o mesmo e adicione
logo acima das regras normais dele a seguinte linha:
include $PATH_RULES/regras.conf
E deixe seu arquivo de regras junto aos outros, ou seja
/etc/snort/rules.
Agora sim, estamos prontos para iniciar? Ainda não, que tal agora
configurarmos o nosso firewall para bloquear as requisições que não
são as que permitimos:
# ---------- firewall.sh -----------------
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Fazer NAT para a rede interna
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Liberar as portas necessárias
iptables -A FORWARD -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -p udp --dport 21 -j ACCEPT
iptables -A FORWARD -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -p udp --dport 25 -j ACCEPT
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -p udp --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -p udp --dport 110 -j ACCEPT
iptables -A FORWARD -p tcp --dport 137 -j ACCEPT
iptables -A FORWARD -p udp --dport 137 -j ACCEPT
iptables -A FORWARD -p tcp --dport 138 -j ACCEPT
iptables -A FORWARD -p tcp --dport 139 -j ACCEPT
iptables -A FORWARD -p udp --dport 139 -j ACCEPT
Bom, agora podemos garantir que além de termos um IDS
configurado para alertar qualquer tráfego diferente do que
necessitamos e um firewall filtrando os pacotes também, podemos
ter um nível de confiabilidade muito maior em nosso perímetro.
Vamos agora iniciar nosso sistema de IDS + Firewall:
# snort -c /etc/snort/snort.conf -o -i ppp0 -D
# Guardian.pl
Warning! HostIpAddr is undefined! Attempting to guess..
Got it.. your HostIpAddr is 200.232.210.52
My ip address and interface are: 200.232.210.52 ppp0
Loaded 2 addresses from /etc/guardian.ignore
Becoming a daemon..

ppp0 no exemplo acima é o nome da minha interface de rede, como utilizo PPPoE, então ele usa interface ppp0, caso você utilize Ethernet normalmente de maneira estática, utilize eth0, eth1, dependendo de seu projeto.
# ./firewall.sh
Agora temos um firewall e um IDS rodando. Estamos prontos para iniciar a configuração de nossa central.