Firewall e NAT em FreeBSD com controle de banda e redirecionamento de portas e IPs

Neste artigo vou mostrar todos os passos de como criar um servidor firewall e NAT em FreeBSD com opções interessantes como redirecionamentos de portas e/ou IPs.

[ Hits: 171.849 ]

Por: Alcir Cardoso em 11/05/2005 | Blog: http://maboo.us


Editando o rc.local



Aqui é possível realizar configurações de controle de banda e bloqueio de portas. Também podem ser colocadas linhas de comando para levantar serviços como o Squid por exemplo.

Com esse controle é possível cortar os problemas com aqueles usuários que ficam o dia inteiro no MSN e baixando coisas, lotando a rede que alguns precisam.

Logado como root vá ate o /etc:

$ cd /etc
$ ee rc.local


#apaga todas as regras ativas do firewall
/sbin/ipfw -f flush

#Levanta MPD
/usr/local/sbin/mpd -b

#Levanta o Squid
#/sbin/ipfw add 2 allow tcp from 200.200.200.12 to any 80
#/sbin/ipfw add 3 fwd 127.0.0.1,3128 tcp from any to any 80

#é possível bloquear que protocolos NetBios passem pelo servidor
#opção interessante para administradores de redes em provedor
#para que o netbios de uma rede interna case problemas na rede
#de distribuição do provedor, apesar do NetBios não ser roteável...

#Bloqueios de NetBios
/sbin/ipfw add 100 deny log tcp from any to any 135
/sbin/ipfw add 101 deny log tcp from any to any 136
/sbin/ipfw add 102 deny log tcp from any to any 137
/sbin/ipfw add 103 deny log tcp from any to any 138
/sbin/ipfw add 104 deny log tcp from any to any 139
/sbin/ipfw add 105 deny log udp from any to any 135
/sbin/ipfw add 106 deny log udp from any to any 136
/sbin/ipfw add 107 deny log udp from any to any 137
/sbin/ipfw add 108 deny log udp from any to any 138
/sbin/ipfw add 109 deny log udp from any to any 139
/sbin/ipfw add 110 deny log tcp from any 135 to any
/sbin/ipfw add 111 deny log tcp from any 136 to any
/sbin/ipfw add 112 deny log tcp from any 137 to any
/sbin/ipfw add 113 deny log tcp from any 138 to any
/sbin/ipfw add 114 deny log tcp from any 139 to any
/sbin/ipfw add 115 deny log udp from any 135 to any
/sbin/ipfw add 116 deny log udp from any 136 to any
/sbin/ipfw add 117 deny log udp from any 137 to any
/sbin/ipfw add 118 deny log udp from any 138 to any
/sbin/ipfw add 119 deny log udp from any 139 to any
/sbin/ipfw add 120 deny log tcp from any to any 445
/sbin/ipfw add 121 deny log tcp from any 445 to any
/sbin/ipfw add 122 deny log udp from any to any 445
/sbin/ipfw add 123 deny log udp from any 445 to any

#utilize as regras abaixo para setar valores de banda para os IPs internos

#para o IP 10.23.0.106
#de qualquer lugar para o 10.23.0.106...
/sbin/ipfw add 1 pipe 1 tcp from any to 10.23.0.106 out

#do 10.23.0.106 para qualquer lugar...
/sbin/ipfw add 1 pipe 2 tcp from 10.0.0.106 to any in

#seta o valor de download
/sbin/ipfw pipe 1 config bw 256kbit/s queue 10kbytes

#seta o valor de upload
/sbin/ipfw pipe 2 config bw 1128kbit/s queue 10kbytes


#para o ip 10.23.0.95
/sbin/ipfw add 1 pipe 3 tcp from any to 10.23.0.95 out
/sbin/ipfw add 1 pipe 4 tcp from 10.23.0.95 to any in
/sbin/ipfw pipe 3 config bw 128kbit/s queue 10kbytes
/sbin/ipfw pipe 4 config bw 64kbit/s queue 10kbytes

#com a regra abaixo é fechado todos os demais IPs
#ela deve sempre ficar após as liberações

#Fecha Tudo
/sbin/ipfw add 1 pipe 5 tcp from any to 10.23.0.0:255.255.255.0 out
/sbin/ipfw add 1 pipe 6 tcp from 10.23.0.0:255.255.255.0 to any in
/sbin/ipfw pipe 5 config bw 1bit/s queue 10kbytes
/sbin/ipfw pipe 6 config bw 1bit/s queue 10kbytes

Pode salvar o arquivo. Agora dê permissão de executável:

$ chmod +x rc.local

Assim sempre que for realizada alguma mudança neste arquivo não precisa reiniciar o server, apenas execute o comando:

$ ./rc.local

E assim concluo este artigo, espero que ajude aos iniciantes e também aos veteranos ;d

Dúvidas e sugestões são sempre bem vindas e pretendo responder à todas.

Um aBRaço.

Página anterior    

Páginas do artigo
   1. Meta
   2. Compilando o kernel
   3. Editando o rc.conf
   4. Editando o natd.conf
   5. Editando o resolv.conf
   6. Editando o rc.local
Outros artigos deste autor

Melhorando a segurança do seus servidores em FreeBSD

Configurando uma VPN no FreeBSD

Leitura recomendada

Entendendo TCP/IP (Parte 6) - Firewall

Entendendo TCP/IP (Parte 5) - Portas TCP/UDP

Entendendo a teoria do iptables

Roteamento de entrada/saída com iproute e iptables

Incremente o iptables com patch-o-matic

  
Comentários
[1] Comentário enviado por cvs em 11/05/2005 - 08:11h

era isso que eu tava procurando... hehehehe

valeuuuuuuu... agora sim, aprendendo essa parte de firewall vou poder migrar alguns servidores da empresa pra freebsd.

[2] Comentário enviado por leysen em 11/05/2005 - 13:52h


olá Alcir Cardoso,

vi o artigo e fiquei com uma pequena dúvida: tenho que reinstalar todos os serviços novamente, tipo reinstalar servidor de e-mail para poder utilizar o freebsd ? parabéns pelo artigo.

leysen

[3] Comentário enviado por montaro em 11/05/2005 - 17:02h

em relacao a limitacao de banda no linux... existe outra opcao fora o squid pra se fazer essa limitacao?

[4] Comentário enviado por cardosoalcir em 11/05/2005 - 20:05h

leysem se vc ja possui um free com estes serviços não eh necessário reinstalar ou reconfigurar os serviços ja existentes... Mas sinceramente acredito que separar as coisas ainda eh a melhor opção..

[5] Comentário enviado por cardosoalcir em 11/05/2005 - 20:10h

montaro em linux tem o iptables, e em iptables eu não manjo muito, mas aqui no vol há vários artigos sobre o iptables, o meu negócio é ipfw :)

[6] Comentário enviado por erickdnt em 11/05/2005 - 20:25h

eu tenho o fedora tem como eu jah ir para a parte de conpilaçao do kernel/? ou prexcisa usar "freebsd.?"

[7] Comentário enviado por cardosoalcir em 11/05/2005 - 21:12h

erick o linux e o free usam "pacotes" para a rede diferentes...
o linux usa o iptables e o free usa o ipfw ou seja não há como fazer exatamente como aqui demosntrado em linux.

E acho que não eh possivel implementar o ipfw no linux...

[8] Comentário enviado por rfranzen em 12/05/2005 - 09:27h

Ae Alcir ! Parabéns

Ficou bala o artigo, tá bem explicado e fez o que prometeu...

Legal mesmo, já foi pros favoritos ! =P

[9] Comentário enviado por dfpereira em 16/05/2005 - 10:17h

Primeiramente, parabéns pelo artigo Alcir! Lendo seu artigo me ocorreu uma dúvida: Como o ipfw mascara IP?

[10] Comentário enviado por edualfaia em 13/10/2005 - 14:28h

Fala Alcir, gostaria de saber se o arquivo natd.conf é criado automaticamente ou tem que ser no braco.

Valeu

[11] Comentário enviado por cardosoalcir em 13/10/2005 - 19:13h

edualfaia, o natd.conf vc cria no braço, na verdade este arquivo eh um padraozinho, mas vc pode seta-lo com outro nome no rc.conf.

Um aBRaço!

[12] Comentário enviado por netgate em 31/10/2005 - 19:01h

me diz uma coisa por que vc nao ultiliza o /etc/rc.firewall para colocar as regras do firewall

[13] Comentário enviado por joao4linux em 08/03/2006 - 22:29h

Valeu Alcir!

Funcionou de primeira!

Parabéns!

João Almeida

[14] Comentário enviado por ccprj em 31/10/2006 - 12:53h

Parabéns,

faz tempo que procurava "esse artigo"... gostei muito!

Abraço

Clebson Rabêlo

[15] Comentário enviado por lscorrearj em 09/11/2006 - 15:30h

Boa tarde !

Trabalho com o conectiva 9 e iptables...-> onde eu consigo baixar o free e implementas essas regras..

Desde ja agradeço

[16] Comentário enviado por netunne em 23/12/2006 - 14:22h

Oi Alcir Cardoso, muito interessante seu artigo. Parabéns! Gostaria apenas de adicionar uma dica aos que estejam interessados em tornar-se um provedor de acesso à internet profissional. A distribuição Netunne Provider (www.netunne.com.br) possibilita o controle de banda na layer4 ou layer7, de forma muito fácil. Além de fornecer outras importantes funcionalidades, como múltiplas conexões com à internet, publicação de servidores (NAT) e controle de usuários através de conta mensal ou cartões de minutos.

Essa dica vai ajudar muito a solucionar os problemas dos comentários acima. Obrigado Alcir e qualquer dúvida ou sugestão não hesite em entrar em contato (comercial@console.com.br). Abrs!

[17] Comentário enviado por alex_a_souza em 12/02/2007 - 18:44h

Como eu faço para limitar a velocidade dos downloads feito pelo (emule, kazaa, torrents, etc..) atravez do rc.firewall ou até mesmo pelo rc.local?
Tem como ?

Seu Artigos esta perfeito.
Parabéns!!!

[18] Comentário enviado por cardosoalcir em 12/02/2007 - 21:15h

Alex a restrição do controle de banda como mostrado no artigo ja segura os p2ps, e com ipfw não teria como fazer um controle independente pra isso. Com o PF tem como... mas nunca usei.

[19] Comentário enviado por alex_a_souza em 12/02/2007 - 22:52h

Certo!!!
Eu uso o rc.firewall liberando os clientes em vez de ser pelo rc.local
Como eu faria pra deixar só a porta de navegação aberta e as outras bloqueadas.

[20] Comentário enviado por allstrit em 13/02/2007 - 00:26h

amigo achei mto intersante seu artigo e vou tentar faze-lo mas antecipando gostaria de saber como implementar a autenticação de usuarios por web?.obrigado

[21] Comentário enviado por massucatto em 30/03/2009 - 15:23h

No controle de banda seria necessário ter bastante memória? Preciso controlar banda no meu Data Center e minha rede é toda Gigabit 10/100/1000

Parabéns pelo artigo!!!

[22] Comentário enviado por hyu1621 em 07/04/2009 - 00:27h

Instalei o FreeBSD Release 7.1, tentei configurar efetuando o seu passo a passo, mas estou optendo a seguinte resposta em todas as linhas que acrescentei no aquivo: - SERVER: unknown options "TCP_DROP_SYNFIN" ...

[23] Comentário enviado por cardosoalcir em 07/04/2009 - 12:46h

hyu1621 faltou dizer de qual arquivo vc está falando. Mas pelo que vc diz acho que eh na parte de inserir as entradas no Kernel.
Olha só quando escrevi esse artigo era pra FreeBSD 5 na época, e agora na versão 7 algumas coisas mudaram. A opção TCP_DROP_SYNFIN foi removida no 7, se remover essa linha do kernel a instalação pode continuar.

Não saberia te dizer o que isso pode mudar porque não fui mais a fundo na versão 7 pra saber se há outras coisas nativas ou não que tratam disso.

Boa Sorte!

[24] Comentário enviado por removido em 25/02/2010 - 13:57h

legal, mas vc poderia explicar oq seria e para que servia aquelas opções adicionadas no kernel, é melhor ensinar a pescar doq entregar o peixe pronto

bom artigo

[25] Comentário enviado por ojferracini em 04/03/2010 - 15:41h

Alcir, boa tarde

Excelente seu artigo

[26] Comentário enviado por dulio2002 em 05/01/2011 - 18:17h

Oi, estou com problemas quando coloco no rc.conf a seguinte linha: natd_interface="em0", em0 é a minha interface com a internet. O que ocorre é que o FreeBSD para de pingar para qualquer endereço de internet e para qualquer ip. O DNS está configurado certinho. Ps. Muito bom artigo/tutorial.. Abraço a todos.

[27] Comentário enviado por cardosoalcir em 05/01/2011 - 19:41h

Nobre Dulio,
aquele tutorial é velho, feito para a versão 5 do FreeBSD.
Eu sei que muita coisa mudou, e não sei como as coisas
estão hoje, pq só tenho usado o Ubuntu.

Nessa vou ficar te devendo.
Mas acredito que seja problemas com as linhas adicionadas
para compilar o kernel. Várias daquelas linhas hoje estão
depreciadas para a versão atual do kernel.

[28] Comentário enviado por dulio2002 em 05/01/2011 - 19:45h

Muito obrigado... Mesmo assim está ajudando...

[29] Comentário enviado por joao.prevedello em 14/11/2011 - 16:43h

E aiii alcir... quem q te ensinou e te colocou no mundo do FreeBSD? hihihihihi

[30] Comentário enviado por jabj em 01/08/2012 - 15:17h

Boa tarde!

Alcir,

Estou com um problema na inicialização do ipfw no boot do freebsd.
O que ocorre é que na inicialização ele não consegue resolver nome.

Nas linhas que são apresentadas em tela no boot aparece:

ipfw: hostname ''smtp.xxx.com.br'' unknown
ipfw: hostname ''pop3.xxx.com.br'' unknown

Ex.: Em minhas regras do ipfw eu tenho uma que libera meu provedor de e-mail e ao invés de utilizar o ip, utilizo o nome tipo:

## Libera EMAIL
/sbin/ipfw add allow tcp from me to smtp.xxx.com.br 110,25,587
/sbin/ipfw add allow tcp from me to pop3.xxx.com.br 110,25,587
/sbin/ipfw add allow tcp from smtp.xxx.com.br 110,25,587 to me
/sbin/ipfw add allow tcp from pop3.xxx.com.br 110,25,587 to me
/sbin/ipfw add allow tcp from ${rede_interna} to smtp.xxx.com.br 110,25,587
/sbin/ipfw add allow tcp from ${rede_interna} to pop3.xxx.com.br 110,25,587
/sbin/ipfw add allow tcp from smtp.xxx.com.br 110,25,587 to ${rede_interna}
/sbin/ipfw add allow tcp from pop3.xxxm.com.br 110,25,587 to ${rede_interna}

Toda vés que preciso iniciar o freebsd tenho que dar os seguintes camandos abaixo para que ele resolva o nome.
/etc/netstart
/etc/ipfw.rules (ipfw.rules é o nome de meu arquivo de regras)

Acho que tem a ver com a ordem em que coloco as linhas de serviço a ser ou não inicializados no rc.conf, mas mesmo colocando o meu igual ao seu exemplo não deu certo.

Por favor, poderia me ajudar?

Desde de já agradeço.

Ass.:
JABJ

[31] Comentário enviado por joao.prevedello em 24/05/2018 - 17:13h

To passeando pela internet, pesquisando algumas coisas, e olha só quem encontro.... que legal, abraço tchê


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts