|
|
|||||||||||||
|
Submitted by Eri on Wed, 2005-09-14 22:26.
1. IntroduçãoOpenBSD é um sistema operacional UNIX de código aberto originalmente desenvolvido na Universidade da Califórnia em Berkley. Foi desenhado para ter uma capacidade de segurança e criptografia extremamente alta e para ser muito resistente a ataques.
1.1 Sobre o autor Eri Ramos Bastos trabalha com Linux desde 1998, passando por diversas 1.2 Pré-requisitosO OpenBSD já deve estar instalado na máquina e a parte de rede 100% funcional. Vou levar em consideração que você já tem bons conhecimentos em rotas e firewalls em outros sistemas (como Linux e FreeBSD) Esse tutorial se refere a versões >= 3.3 do OpenBSD. 1.3 ConvençõesVamos adotar para o cenário Firewall em modo NAT que existem 2 placas de rede: fxp0 e fxp1. Respectivamente internet e rede local. No cenário de firewall transparente adotamos: fxp0 e fxp1 como internet e rede local para a bridge e xl0 como interface administrativa. Nossa rede externa será 200.200.200.0/24 e a rede interna 192.168.1.0/24. 1.4 AgradecimentosAos meus grandes amigos Marcello Mezzanotti [ mezzanet (at) iname.com ] e Eduardo Assais por estarem a tempos me falando de firewalls em modo bridge e mesmo assim eu demorar tanto pra botar a mão na massa. 2. Firewall em modo NAT2.1 Habilitando a passagem de pacotesPara poder usar o firewall, é preciso que o servidor tenha capacidade de funcionar como gateway. Vamos editar o arquivo /etc/sysctl.conf e modificar a seguinte linha: net.inet.ip.forwarding=1
2.1.2 Refrências:OpenBSD Faq 2.2 Arquivos de ConfiguraçãoNo mínimo 2 configurações distintas são feitas num arquivo do pf: NATs e filtros.
2.2.1 /etc/pf.confEsse arquivo é normalmente utilizado para relacionar as regras do PF. Se nada mais explícito for informado, esse arquivo será executado na inicialização do sistema. Para iniciar o pf durante o boot, edite o arquivo /etc/rc.conf e modifique a linha referente ao pf para: pf=YES # Packet filter / NAT
# Regra padrao pass in all # Nat das redes nat on fxp0 from 192.168.1.0/24 to any -> 200.200.200.1 2.2.2 Referências:2.3 Ativando o firewallComo dito anteriormente, é preciso ativar o pf depois de configurado. Isso implica em colocar as regras no ar e ativar a funcionalidade. Se você já alterou seu rc.conf e reiniciou a máquina, não é necessário ativar a funcionalidade. 2.3.1 Rodando as regras# pfctl -R # pfctl -N
2.3.1 Ativando o PF# pfctl -e
3. Trabalhando em modo transparente (Bridge)Um dos grandes trunfos do OpenBSD como firewall é a facilidade de implementar bridges. Uma bridge, em seu conceito original, é apenas um dispositivo que interliga dois seguimentos diferentes da rede, normalmente utilizado para ampliar seu sinal.
3.1 ReferênciasFoldoc 3.2 Configurações iniciaisVamos parar todos os serviço iniciados pelo OpenBSD. O único daemon que deixaremos rodando será o SSH. Edite o arquivo rc.conf e configure as linhas referentes aos serviços indesejados para NO. portmap=NO # Note: inetd(8) rpc services need portmap too inetd=NO # almost always needed sendmail_flags=NO spamd_flags=NO # for normal use: "" and see spamd-setup(8) 3.3 Configurando a bridgeComo já convencionado, nossas duas placas da bridge serão fxp0 (internet) e fxp1 (rede local). Essa placas deverão ser ativadas, apesar de não ter IP. Para isso iremos fazer: echo up > /etc/hostname.fxp0 echo up > /etc/hostname.fxp1
add fxp0 add fxp1 blocknonip fxp0 blocknonip fxp1 up
3.4 Implementando regrasNo nosso exemplo iremos utilizar a configuração "de dentro sai tudo e de fora só entra o que for permitido".
pass in quick on fxp1 all
pass out quick on fxp1 all
block in log on fxp0 all
pass in on fxp0 proto tcp from any to 200.200.200.5 port = http keep state
pass in on fxp0 proto tcp from any to 200.200.200.6 port = ftp keep state
pass in on fxp0 proto tcp from any to 200.200.200.7 port { smtp, pop3 } keep state
pass in on fxp0 proto tcp from any to 200.200.200.8 port = ssh keep state
pass out on fxp0 inet proto icmp all icmp-type 8 code 0 keep state
pass out on fxp0 proto udp all modulate state
pass out on fxp0 proto tcp all keep state
3.4.1 ReferênciasOpenBSD Bridging Firewall Configuration 4. Usando SETsPodemos utilizar algumas variáveis para facilitar a nossa vida dentro dos scripts. Numa situação em que desejamos bloquear certas redes de tentar acesso vindo do mundo exterior temos normalmente uma regra assim: block in quick on fxp0 from 10.0.0.0/8 to any block in quick on fxp0 from 172.16.0.0/12 to any block in quick on fxp0 from 192.168.0.0/16 to any block in quick on fxp0 from 255.255.255.255/32 to any 4.1 Diminuindo o trabalhoPodemos substituir as 4 linhas acima pela linha abaixo:
block in quick on fxp0 from { 10.0.0.0/8 , 172.16.0.0/12, 192.168.0.0/16, 255.255.255.255/32 } to any
4.2 Usando variáveisQuando instalamos e operamos apenas um firewall, fica simples colocar nossos IPs, interfaces e regras diretamente no script, mas algum tempo e alguns clientes depois, começamos a sentir a necessidade de facilitar o trabalho. Dessa forma podemos usar variáveis como abaixo:
PLACA_EXTERNA="fxp0"
IPS_INVALIDOS="{ 10.0.0.0/8 , 172.16.0.0/12, 192.168.0.0/16, 255.255.255.255/32 }"
block in quick on $PLACA_EXTERNA from $IPS_INVALIDOS to any
5. Utilizando FTPPara quem já está acostumado com NAT, no Linux, por exemplo, sabe que é necessário inserir alguns módulos extras no kernel, ou então utilizar o cliente ftp como passivo. O problema da segunda opção é quando temos muitos usuários leigos na rede, que se atrapalham e não conseguem utilizar FTP. No OpenBSD isso é um pouco chato. Precisamos utilizar proxy de FTP. Não se preocupe, pois para o cliente final fica transparente. Não é preciso configurar nada nas estações. 6.1 Habilitando no inetd.conf Infelizmente precisamos colocar esse serviço no inetd. Se alguém tiver conhecimento de outra forma, por favor me avise. Adicione a seguinte regra no /etc/inetd.conf ftp-proxy stream tcp nowait root /usr/libexec/ftp-proxy ftp-proxy -n -V -D3 -u nobody -m 55000 -M 57000 -t 300 5.2 Configurando o pf.confAdicione as seguintes linhas (levando em consideração que sua interface interna é fxp1): #Proxy FTP rdr on fxp1 proto tcp from any to any port 21 -> 127.0.0.1 port 8081 5.3 Configurando o pf.confAcrescente as seguintes linhas:
# Proxy FTP
block in on fxp0 proto tcp from any to any port = 8081 keep state
FTPPORTS="{ 55000 >< 57000 }" # Range de portas usadas pelo FTP ativo
pass in quick on fxp0 proto tcp from any port 20 to fxp0 port $FTPPORTS flags S/SA keep state
5.4 Configurando o /etc/servicesAdicione a seguinte linha: ftp-proxy 8081/tcp # ftp-proxy 5.5 Referências Using Active FTP Clients Through an OpenBSD 3.0 Firewall 6. Exemplos6.1 pf.conf
PLACA_EXT="fxp0"
PLACA_INT="fxp1"
Spoofados="{10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 255.255.255.255/32}"
# Nat das redes
nat on $PLACA_EXT from $REDE_INT to any -> IP_EXT
#Proxy transparente - CONFIGURE O SQUID!!!!
rdr on fxp1 from any to ! 200.182.250.0/24 port 80 -> 127.0.0.1 port 3128
#Proxy FTP
rdr on fxp1 proto tcp from any to ! 200.182.250.0/24 port 21 -> 127.0.0.1 port 8081
# Regra padrao
pass in all
# Mata pacotes estranhos
scrub in all
# Bloqueando IPs Spoofados
block in quick on $PLACA_EXT from $Spoofados to any
# Bloqueando acesso externo ao Squid
block in on $PLACA_EXT proto tcp from any to any port 3128 flags S/SA keep state
# Proxy FTP
block in on $PLACA_EXT proto tcp from any to any port = 8081 keep state
FTPPORTS="{ 55000 >< 57000 }" # Range de portas usadas pelo FTP ativo
pass in quick on $PLACA_EXT proto tcp from any port 20 to $PLACA_EXT
port $FTPPORTS flags S/SA keep state
# DROP em redes / ips maliciosos/indesejados
block in on $PLACA_EXT from 207.46.197.0/24 to any # :^)
block in on $PLACA_EXT from to any 208.225.90.0/24 # :-)
6.3 ReferênciasConfigurando um Squid "Ninja" 7. Outras referênciasPF-HOW-TO PF Man page
|
GoogleAds |
||||||||||||