www.devmedia.com.br
[versão para impressão]
Link original: http://www.devmedia.com.br/articles/viewcomp.asp?comp=20814

Gateway com FreeBSD - Artigo Revista Infra Magazine 1

Mostraremos neste artigo como instalar e configurar o FreeBSD (um sistema operacional robusto e de baixo custo) para atuar como gateway de uma rede local de computadores. Isto permitirá que todos os computadores acessem a internet.





Infra Magazine 1

[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]

> Clique aqui para ler todos os artigos da Infra Magazine 1


Do que se trata o artigo:

Mostraremos neste artigo como instalar e configurar o FreeBSD (um sistema operacional robusto e de baixo custo) para atuar como gateway de uma rede local de computadores. Isto permitirá que todos os computadores acessem a internet.


Para que serve:

Fazer com que o leitor seja capaz de entender e aprender como funciona a instalação e a configuração do FreeBSD para atuar como gateway, baseando-se em um cenário real. Ao final o leitor estará apto a colocar em produção o sistema aqui instalado e configurado.

Em que situação o tema útil:

O conteúdo apresentado neste artigo apóia profissionais e empresas que tenham interesse em saber como é possível utilizar um sistema de baixo custo para realizar o compartilhamento de internet com a rede local, independente dos sistemas operacionais que os demais computadores da rede utilizem.

O FreeBSD é um sistema operacional gratuito, estável e respeitado. Ele está disponível para download no site oficial, sendo compatível com arquiteturas Pentium, Athlon, AMD64, Opteron, UltraSPARC, dentre outras. A maior incidência de uso do FreeBSD é em servidores, porém nada impede de o utilizarmos como usuários domésticos, apesar de ser um sistema não tão simples de configurar para se trabalhar como uma estação de trabalho (onde normalmente encontramos o Windows).

Nesse artigo, focaremos na instalação, configuração e alguns comandos básicos característicos do sistema, de forma que ao final o FreeBSD esteja apto a ser adicionado em uma rede como um gateway e posteriormente ser acrescido de novos serviços.

Assim, faremos com que o FreeBSD atue como o gateway da rede, compartilhando a conexão de internet com outros equipamentos com um ótimo desempenho, confiabilidade, disponibilidade e segurança.

O cenário

Utilizaremos como base uma rede com 200 microcomputadores que precisam de acesso à internet e apenas uma conexão.

Para realizar essa atividade utilizaremos um microcomputador com o sistema operacional FreeBSD, compilado com parâmetros do kernel para atuar como gateway, sendo ele a saída entre os microcomputadores e a internet (veja a Figura 1).

Dica DevMan: Para atuar como gateway e possivelmente como um firewall, podemos utilizar um microcomputador mais antigo e que já não sirva mais para o uso diário.

Figura 1. O cenário da rede.

A conexão com a internet é via cable modem, onde o provedor, via DHCP (Dynamic Host Configuration Protocol), fornece um endereço IP para efetuarmos a conexão.

A instalação

Para realizar a instalação do FreeBSD podemos efetuar o download do mesmo através do endereço www.freebsd.org, onde se encontra o projeto oficial e toda a documentação detalhada.

Dica DevMan: Caso tenha alguma dúvida sobre os requisitos mínimos para o FreeBSD no momento de instalação, aperte a tecla F1 e utilize a ajuda.

A versão utilizada foi a 7.2-RELEASE i386, que pode ser obtida no endereço apresentado na seção Links desse artigo. A princípio, baixe apenas o disco 1, pois só precisaremos dele. Em seguida salve a imagem em uma mídia de CD ou DVD.

Com a mídia gravada, precisamos então dizer ao microcomputador para inicializar a partir desta mídia (Boot). Para isso, na BIOS do microcomputador selecione a opção que melhor se adapte ao seu hardware. A BIOS do microcomputador nos fornece uma opção onde é possível optar pelo dispositivo de boot.

Inicialização (boot) do FreeBSD

O CD Loader do FreeBSD deve ser inicializado e se estiver tudo correto, será exibido algo semelhante ao que segue na Figura 2.

Figura 2. CD Loader FreeBSD.

Agora começaremos o processo de instalação propriamente dito. Após o boot, veremos o instalador que se chama sysinstall. Ele tem a aparência semigráfica (não tem mouse) e possui uma característica não linear. Dessa forma, existem opções que depois de selecionadas não direcionam o fluxo da instalação para a próxima etapa, sendo necessário acessar outras opções ou subopções para prosseguir a instalação, o que torna a instalação um pouco confusa.

O primeiro passo do sysinstall é selecionar o país: 31 para Brasil (Figura 3).

Figura 3. Escolha do país.

Feito isto, o próximo passo é selecionar o mapa do teclado: Brazil cp850 é uma boa opção quando não temos em mãos um teclado que possua o “ç” (um teclado ABNT2 contém cedilha). Mas essa opção pode ser facilmente alterada após a instalação (Figura 4).

Figura 4. Mapa de teclado.

A próxima janela é o menu principal, onde se encontram as opções mais avançadas. Uma boa prática é instalar somente os itens necessários para que o hardware e os componentes de softwares funcionem corretamente e com um objetivo bem definido. No nosso caso, como um gateway.

Manter o sistema o mais justo e refinado possível contribui com o tempo de inicialização, garante mais segurança, estabilidade e aumenta o tempo em que o sistema está disponível para uso (reduzindo dessa forma o número possível de falhas).

Dispomos de três opções de instalação, sendo que duas delas são indicadas apenas para quem já possui algum conhecimento:

Instalação simplificada: onde apenas o básico para o funcionamento do FreeBSD é instalado. O sysinstall é mais simples, porém menos intuitivo, isso quer dizer que ele não exibe muita ajuda explicativa e visual (Express), o que para leigos dificulta um pouco;

Customizada: exige um melhor conhecimento sobre todo o processo de instalação do FreeBSD, incluindo o conhecimento do sistema básico a ser instalado para funcionamento, a manipulação e particionamento dos discos (Custom).

A terceira opção, e a que utilizaremos neste artigo, é a padrão (Standard). Esta é a mais amigável. O sysinstall fornecerá os utilitários necessários para manipular os discos, selecionar os aplicativos a serem instalados, permitirá a configuração de alguns serviços e as interfaces de rede (observe a Figura 5).

Figura 5. Menu principal.

O próximo passo é manipular os discos. Nos sistemas UNIX existe uma característica quanto à alocação e definição do espaço em disco chamado de Slice. Comparado a outros sistemas, seria as chamadas partições. No FreeBSD temos os chamados labels, que são subdivisões dentro da Slice.

No FreeBSD teremos então que indicar o quanto de espaço físico disponível será fatiado para que possamos dentro dessas fatias criar nossos rótulos (Label). Neste ponto, é interessante perceber que podemos optar entre ter uma fatia (slice) com vários rótulos (labels), ou termos várias fatias.

O FreeBSD também identifica os discos da maneira que são instalados fisicamente, logo, as opções de configuração na BIOS são ignoradas. Esse fato pode causar uma confusão quando configurarmos na BIOS qual disco contém o boot, pois o FreeBSD sempre assumirá a ordem em que forem encontrados os discos.

Os discos serão identificados como ad0 para disco primário na IDE0, ad1 para disco secundário na IDE0, adb0 para disco primário na IDE1, adb1 para disco secundário na IDE1 e assim sucessivamente (veja a Figura 6).

Figura 6. Seleção de discos.

Quando é detectado apenas um disco, então o sysinstall não exibe o menu de seleção de discos (Figura 6) e já notifica a necessidade de particionar o disco encontrado.

Após a mensagem, o sysinstall invoca o utilitário para manipulação dos discos, o fdisk.

A nomenclatura para um rótulo/label/partição na primeira slice do disco primário da primeira IDE (IDE0) será identificado como ad0s1a, onde ad0 representa o primeiro disco da primeira IDE, s1 o Slice 1 e a o Label.

Sugere-se utilizar as especificações do projeto oficial para a estrutura nos discos. A Tabela 1 foi retirada do site oficial. Nela podemos verificar quais são as estruturas básicas e o tamanho mínimo para efetuar a instalação do sistema.

Label

Ponto de montagem

Descrição

A

/

Partição raiz. Contém a estrutura básica de todo o sistema, é obrigatório e requerida para o sistema de arquivos e funcionamento do FreeBSD.

B

Não tem

Espaço alocado como auxílio à falta de memória. Quando o sistema tem pouca memória RAM disponível e existe a necessidade de utilizar mais que o real existente, este espaço é usado como auxiliar. Aconselha-se que o tamanho seja duas a três vezes maior que a memória RAM física existente.

E

/var

Diretório onde são gerados os logs. Dependendo da capacidade do disco (ex.: 80Gb), aconselha-se alocar 5 Gb, mas nada impede que seja maior.

F

/usr

Partição onde ficam os binários compilados dos aplicativos utilizados pelo sistema e usuários.

G

/home

Partição que irá conter subdiretórios para cada usuário. Esses subdiretórios serão criados no sistema cada vez que um novo usuário for adicionado. Logo, ele contém os perfis dos usuários e seus respectivos diretórios e conteúdos.

Tabela 1. Configurações sugeridas.

O label “a /” (Partição raiz) é nomeado segundo o critério de identificação dos discos e configurado nos arquivos de inicialização (/etc/fstab). Logo, se trocarmos fisicamente os discos de posição, o disco primário passa a ser outro, afetando todo o sistema de arquivo, prejudicando o sistema como um todo.

Criaremos então uma Slice que irá conter nossos labels. Para isso, selecione o disco para podermos manipulá-lo.

É necessário que haja espaço suficiente disponível em disco para realizar a instalação. Caso o disco seja usado onde existam partições, e deseja-se removê-las deixando os discos totalmente livres para a criação das novas Slices para o FreeBSD, pode-se removê-las selecionando a partição e utilizando a opção D (D – Delete). Atenção, esse procedimento removerá a partição e seus conteúdos definitivamente, então se certifique que não existam dados importantes antes de realizar a remoção.

Havendo espaço disponível, o fdisk colocará em descrição (Desc) a palavra unused, conforme apresentado na Figura 7.

Figura 7. Disco sem partições e com espaço disponível.

Para criar uma slice, utilize a opção C (Create). Em seguida será solicitado o tamanho dessa slice. É nesse momento que podemos dividir o disco caso exista a necessidade de instalar outros sistemas. O tamanho deve ser informado em Mb (Megabyte). Como criaremos apenas uma slice, usaremos o tamanho total disponível que já vem preenchido por padrão (ver Figura 8).

Figura 8. Criando a Slice.

Confirmado o tamanho, será solicitado o tipo para esse espaço alocado (cada tipo de sistema de arquivos/partição requer sua numeração própria para identificação. Se colocássemos o número decimal 130 ela seria identificada e reconhecida pelo sistema como sendo Swap). O FreeBSD identifica a Slice através do número decimal 165, assim devemos informar ao fdisk este número, pois precisamos criar uma slice (Figura 9).

Figura 9. Tipo da Slice.

Confirmado o tipo da Slice, retornaremos ao fdisk e a Slice estará criada. Outros tipos de identificação podem ser visualizados e utilizados através da opção T = Change Type, porém em nossa instalação utilizaremos apenas o tipo para o FreeBSD (veja Figura 10).

Figura 10. Slice criada.

O próximo passo é selecionar se queremos ou não instalar um gerenciador de boot. Quando existe mais de um sistema operacional instalado já com um gerenciador, a melhor opção é None, deixando a responsabilidade ao gerenciador de boot já existente. Caso queira instalar o gerenciador do FreeBSD com as suas características assumindo a tarefa de gerenciamento, selecione BootMgr.

A melhor opção neste cenário é selecionar a opção Standard, que irá instalar na MBR (Master Boot Record) o loader sem gerenciador, pois não temos outros sistemas instalados. Assim, podemos carregar diretamente nosso sistema reduzindo o tempo de inicialização (Figura 11).

Figura 11. Instalação do gerenciador de boot.

Feito isso, aparecerá uma mensagem informando que é preciso criar os rótulos/partições (ver Figura 12).

Figura 12. Mensagem para criação de partições.

Confirmado, o sysinstall apresentará o editor de partições onde criaremos então os rótulos/labels.

Criaremos dois labels, sendo uma a swap. Esta é a área de troca utilizada quando a memória RAM disponível não é suficiente e o sistema necessita de mais espaço (uma espécie de memória auxiliar).

No nosso exemplo, definiremos a área de swap com espaço de 512M. Então selecione o disco com a slice criada (ad0s1) e utilize a opção C (Create), como na Figura 13. Será questionado o tamanho do label, que poderá ser informado usando as métricas: G para gigabytes, M para megabytes e C para cilindros.

Figura 13. Criando a área de troca swap.

Após confirmação, é preciso escolher o tipo da label/partição, que pode ser swap ou fs (file system). Nesse momento selecionaremos swap, com 512 Mb, conforme a Figura 14.

Figura 14. Selecionando o tipo de partição.

Feito isso, criaremos a partição raiz / com o restante do espaço disponível em disco. Lembrando que a criação dos labels e slices fica a critério do administrador, cabendo a ele decidir qual é a melhor opção de manipulação para o ambiente e para os serviços que irá servir, desde que a arquitetura básica de slices e labels exigida pelo FreeBSD seja mantida. Por exemplo, para um servidor Proxy, onde existe a necessidade de cache, é realizado um grande número de leitura e escrita. Nesta situação, separar o disco ou manter um rótulo específico para essa atividade ajuda no desempenho e na segurança dos sistemas. Para um servidor de arquivos ou um sistema de terminal com perfil móvel, é aconselhável separar os discos, onde um manteria o sistema operacional e seus aplicativos e em outro disco manteríamos o /home, que contém todos os arquivos pertinentes a cada usuário. Essa divisão ajuda com o desempenho devido às operações de escrita e leitura dos discos, bem como facilitaria os backups.

Neste contexto, é importante termos em mente que o editor de discos dispõe de uma opção (A – Auto Defaults, apresentada na Figura 14) que manipula e cria os rótulos/labels automaticamente levando em consideração a arquitetura básica de discos exigida pelo FreeBSD.

Utilizaremos os mesmos passos das Figuras 12 e 13 com a finalidade de aprendermos como criar nosso label raiz (/) com seu respectivo ponto de montagem. Atente apenas para o detalhe de selecionar o tipo de label, que deve ser do tipo fs (file system), e então será preciso especificar o ponto de montagem, nesse caso: raiz (/) – Figura 15.

Figura 15. Criando a label e especificando o ponto de montagem.

Com as partições/labels criadas, pressione Q (Finish) para sair (Figura 16).

Figura 16. Partições criadas.

Neste momento, o próximo passo é selecionar os pacotes a serem instalados. Uma boa prática, como já citado, é instalar somente o necessário para o hardware e os componentes de software funcionarem, mas agora, para simplificar o artigo, vamos instalar todos os pacotes utilizando a opção All (Figura 17).

Uma alternativa para esta decisão é, depois de instalado, verificar quais hardwares o FreeBSD reconheceu, avaliar os softwares necessários e depois fazer uma instalação customizada, tanto com kernel, quanto com os aplicativos necessários.

No exemplo, selecione All (Todos), pressione Enter, confirme as mensagens e use a opção X Exit para retornar ao menu anterior e prosseguir a instalação (veja Figura 17).

Figura 17. Confirmando pacotes a serem instalados.

Agora devemos selecionar a origem dos pacotes a serem instalados. No nosso caso é a imagem que gravamos no CD que foi baixada do site oficial. Entretanto, como podemos notar, as origens podem variar. Selecionaremos a opção CD/DVD de acordo com a Figura 18.

Figura 18. Selecionando o local onde obter os pacotes para instalação.

Depois de confirmado, sysinstall faz o questionamento se realmente queremos aplicar as alterações e manipulações dos discos realizadas nas etapas anteriores. Atenção neste momento, pois será afetada toda a estrutura dos discos envolvidos levando à perda de possíveis dados (Figura 19).

Figura 19. Confirmação da instalação.

Feito isso, todas as configurações serão aplicadas e o sistema começará a ser copiado para os discos. Caso tudo ocorra bem, os próximos passos serão as configurações finais.

As questões a seguir são referentes aos serviços que desejamos ativar. Todas elas poderão ser ativadas após a instalação. Dessa forma, selecione sim nas opções gateway e ssh, as demais fica a seu critério (Figura 20).

SSH: O Secure Shell ou SSH é, simultaneamente, um programa e um protocolo de rede que permite a conexão com outro computador na rede de forma a executar comandos de uma unidade remota com a vantagem da conexão entre o cliente e o servidor ser criptografada.

Figura 20. Ativando a opção de gateway.

Em seguida, as configurações serão aplicadas e algumas outras questões surgirão como o tipo do mouse, horário UTC (para o UTC Brazil as opções são: 2 -9 - 8). Configure-os e depois selecione a opção Exit para retornar ao instalador (Figura 21).

Figura 21. Configurando o mouse e usando opção Exit.

Neste momento seremos direcionados à mensagem de confirmação para a instalação da coleção de pacotes/ports, onde podemos selecionar entre as diversas categorias os que serão copiados localmente no disco, ficando a disposição para futura instalação.

Note que neste ponto não estamos instalando os pacotes e sim os copiando para o disco para futuras instalações.

Ports é uma estrutura de diretórios localizada em /usr/ports que possui um vasto número de aplicativos nativos aptos a serem instalados facilitando muito a administração e atualização dos aplicativos. É um repositório de aplicativos a disposição para futuras instalações, por exemplo, se quiséssemos instalar futuramente o servidor HTTP Apache, poderíamos ir até os ports em /usr/ports/www e instalar o Apache13.

Com os ports é preciso pouca ou nenhuma intervenção no que diz respeito às dependências entre aplicativos e bibliotecas, pois os arquivos de construção e compilação dos códigos fontes já estão preparados para serem instalados no FreeBSD (veja a Figura 22).

Figura 22. Selecionando pacotes.

Pressione Enter e depois selecione a opção Install. Confirmando o aviso sobre a realização da operação, uma nova mensagem será exibida referente à criação da conta de usuário para administração do servidor, confirme. O próximo passo é criar esta conta no sistema. Devemos evitar o uso do usuário root e com isso prevenimos possíveis problemas de segurança. Após a instalação podemos utilizar o su, utilitário que eleva o privilégio de um usuário comum aos privilégios de super usuário/root.

Mas para utilizar o su após o término da instalação, este usuário tem que obrigatoriamente pertencer ao grupo wheel. Podemos então já adicioná-lo ao grupo através do sysinstall neste ponto, ou adicioná-lo mais tarde após a instalação, com o comando pw user mod nome-do-usuário -G wheel.

Para criar um novo usuário selecione a opção User (Figura 23).

Figura 23. Adicionando uma conta de usuário.

Preencha os dados nos campos como segue e adicione o usuário ao grupo wheel, como mencionamos (veja Figura 24).

Figura 24. Criando uma conta de usuário.

Confirme em OK e selecione a opção Exit. A próxima mensagem é referente à configuração da senha para o usuário administrador do sistema, no caso root. O root é o usuário com maior nível de privilégio, então cuidado com a senha escolhida para ele.

Após informar e confirmar a senha de root, uma nova mensagem de confirmação questionando se desejamos revisar as configurações realizadas anteriormente é apresentada. Selecione NO e prossiga. No menu principal, selecione X Exit Install (Figura 25).

Figura 25. Executando a instalação, após as configurações.

Então sysinstall exibe uma nova mensagem questionando a saída. Em caso de confirmação, avisa para remover os discos e mídias de boot, de acordo com o exposto na Figura 26.

Figura 26. Finalização da instalação.

Depois de remover o CD reinicie o computador. Feita a instalação, uma boa prática é trocar o boot do computador na BIOS para o disco primário e remover a verificação de presença do teclado. Isso evita que nosso computador deixe de ser iniciado e fique parado aguardando uma intervenção humana caso encontre uma mídia com boot, além de colaborar com o tempo do processo de inicialização.

Neste ponto o FreeBSD deve estar instalado e o boot deve acontecer normalmente (veja Figura 27).

Figura 27. Boot loader no disco.

Configurando o FreeBSD

Com o FreeBSD instalado, iremos então configurá-lo para que possa conectar-se à internet com uma placa de rede via cable modem e compartilhar a internet com os demais computadores da rede.

Efetue o login no sistema com o usuário criado, # devMedia. Será exibida uma mensagem de boas vindas indicando alguns links úteis referentes ao FreeBSD. Use o comando su - e informe a senha cadastrada para o usuário root na instalação. Ele irá elevar o nível de privilégio do usuário devMedia e também ajustar as variáveis de ambiente com as de root ($ su -), lembrando que o usuário devMedia deve fazer parte do grupo wheel.

Iniciaremos as configurações do sistema verificando se as placas de rede foram detectadas e estão funcionando corretamente. Para isso, usaremos os comandos pciconf e ifconfig.

Verificando placas de rede com pciconf:

  #pciconf –lv 

O retorno deverá exibir informações não apenas das interfaces de rede, mas também de todos os dispositivos detectados. As interfaces devem estar entre as opções com o nome e modelo do fabricante.

Depois de identificadas, verificamos com o comando ifconfig se as interfaces foram detectadas e instaladas corretamente. O retorno deverá ser algo semelhante à Figura 28, onde verificamos que foram detectadas as duas interfaces de rede: re0 e rl0.

  #ifconfig 

Figura 28. Verificando as placas de rede.

O arquivo de configuração do sistema (arquivo onde informamos quais serviços serão iniciados junto com sistema, também usado para modificar valores padrões de variáveis na inicialização do sistema) é o /etc/rc.conf. Através dele podemos configurar, por exemplo, o comportamento das placas de rede, o encoding, o mapa de teclado e a zona de horário. Um exemplo completo do arquivo pode ser encontrado em /etc/defaults/rc.conf.

Agora ajustaremos os parâmetros necessários para configurar nosso FreeBSD para atuar como Gateway da rede. Dessa forma, edite o arquivo com editor vi, que por padrão vem instalado, adicionando ao rc.conf as linhas apresentadas na Figura 29.

Figura 29. Arquivo /etc/rc.conf.

Aqui vale uma breve explicação sobre os parâmetros. Eles sempre obedecem à sintaxe nome=valor. Quando alteramos um valor, na verdade estamos sobrescrevendo os valores padrão. Os nomes e valores padrão estão em um arquivo de mesmo nome, porém em outro diretório (/etc/defaults).

Explicaremos os parâmetros que precisamos por hora, porém é indicado verificar o arquivo padrão para conhecer melhor:

gateway_enable=“YES”: Opção que habilita a função de gateway. Seria o mesmo que utilizar o syscontrol com o comando sysctl net.inet.ip.forwarding=1 que habilita funções em tempo real no kernel;

keymap=“br275.cp850”: Podemos especificar aqui o mapa de teclado a ser utilizado. Os mapas conhecidos podem ser encontrados em /usr/share/syscons/keymaps. O padrão informado é indicado quando usamos teclado conhecido em outros sistemas, como us internacional;

sshd_enable=“YES”: Ativando o SSH (Secure Shell, usado para efetuar conexões e executar comandos remotamente);

hostname=“freeGateway”: Especificamos aqui o nome do microcomputador. Pode ser escolhido a seu critério;

natd_enable=“YES”: Ativando o serviço de NAT (Network Address Translation). Conhecido também como masquerading, o NAT irá mascarar os endereços dos microcomputadores da rede local de maneira que seja possível a comunicação através do link de internet;

natd_interface=“re0”: É preciso especificar em qual interface o NAT deve atuar. Use o ifconfig para identificar a interface, pois deve ser a que possui conexão com a rede externa;

firewall_enable=“YES”: Precisamos ativar o firewall com a finalidade de realizar o repasse de pacotes entre as interfaces de rede e também para que o NAT funcione corretamente;

firewall_script=“/usr/local/etc/rc.d/seu arquivo de firewall”: Apontamos onde está localizado o arquivo contendo as regras para o firewall;

ifconfig_re0=“dhcp”: No cenário atual, o IP da rede externa é atribuído via DHCP (Dynamic Host Configuration Protocol). Deve-se informar qual é a interface que receberá o IP através do DHCP (para que a placa de rede seja configurada de forma automática/dinâmica é necessário que o pacote dhcpclient esteja instalado – no cenário atual com a opção Standard selecionada no inicio da instalação ele estará presente);

ifconfig_rl0=“inet 10.0.1.1 netmask 255.255.0.0”: No mesmo cenário a outra interface precisa estar configurada com a rede local (interna) com um endereço IP estático, logo adicionamos o endereço IP e sua respectiva máscara manualmente.

As duas regras de firewall serão: uma para limpar as regras existentes, garantindo que as novas serão as regras válidas; e outra que irá realizar o NAT entre as redes.

Agora crie o arquivo dentro do diretório /usr/local/etc/rc.d/. No nosso exemplo se chamará rc.firewall. Depois adicione as seguintes regras, uma por linha:

ipfw –f flush: Limpa as regras existentes;

ipfw add 500 divert natd via re0: Regra que utiliza o socket divert para filtrar o tráfego e direcionar os pacotes da interface interna para a interface externa.

A seguir, altere o dono e o grupo do arquivo para root com o comando chown root.root rc.firewall. Em seguida dê permissão de execução apenas para o usuário root (chmod 700 firewall). Com isso garantimos que usuários comuns não poderão alterar o conteúdo do arquivo de firewall e o utilize com outras finalidades.

Existem duas maneiras de aplicarmos as regras de firewall: informar no rc.conf (através do parâmetro firewall_script) ou do arquivo rc.local (este arquivo é lido por último no processo de boot, ou seja após iniciar todos o processos de inicialização este arquivo é lido com a finalidade de inicializar serviços extras, como regras de firewall por exemplo).

Existe um detalhe quando utilizamos o rc.local para inicialização de serviços, precisamos adicionar ao arquivo de firewall a extensão .sh, que o identificará como sendo um script (/usr/local/etc/rc.d/rc.firewall.sh) para que ao final do processo de boot ele possa ser reconhecido e executado. As permissões de execução do script de firewall (firewall.sh) devem estar ajustadas com permissão de execução (chmod 700).

Lembre-se, escolha apenas um dos métodos, não há efeitos colaterais em usar um ou outro. Para o nosso exemplo utilizaremos a primeira opção (rc.conf) (veja a Figura 30).

Figura 30. Arquivo /usr/local/rc.d/rc.firewall.

Este script será executado toda vez que o sistema for inicializado e será interpretado pelo /sbin/sh. Para verificar as regras de firewall ativas use ipfw show (Figura 30).

Mas para que o NAT e o firewall funcionem corretamente são necessários mais alguns ajustes. Existem duas maneiras de realizar esses ajustes: ativar os módulos e serviços estaticamente no kernel construindo e criando um novo kernel; ou através das variáveis do sysctl (mais informações sobre sysctl podem ser obtidas no endereço http://doc.fug.com.br/handbook/configtuning-sysctl.html).

Vamos utilizar a opção estática no kernel, pois o módulo necessário para realização do NAT deve ser adicionado ao kernel para que trabalhe em conjunto e sincronia. Duas das principais vantagens de configuração no kernel são a segurança e a estabilidade.

Devemos ajustar o arquivo de configuração do kernel (utilize o editor de texto disponível, o vi) adicionando as opções necessárias, e então construir o novo kernel e instalá-lo (com o comando make, que será explicado mais adiante).

Lembrando que devemos ter os pacotes com os fontes instalados. Caso tenha realizado a instalação mínima, os fontes podem ser encontrados no CD de instalação através do sysinstall, selecionando as opções Distributions > Kernels > GENERIC. O código fonte do kernel será copiado dentro do diretório /boot. Como selecionamos no inicio da instalação a opção Standard, o código fonte do kernel deverá estar presente.

Com os fontes do kernel disponíveis, precisamos criar um arquivo de configuração para que ao compilar o novo kernel o compilador saiba quais módulos e configurações ele deve manter ou retirar.

Existe um arquivo genérico de configuração do kernel e ele se encontra no diretório /usr/src/sys/i386/conf, denominado GENERIC. Vamos copiá-lo, mantendo sempre o original intacto e editar a cópia, lembrando que devemos estar com permissão de root para executar tais atividades.

Esse arquivo contém os parâmetros passados no momento de compilação do kernel. Podemos então ajustá-lo de modo que fique adequado ao nosso hardware e serviços, removendo todos os demais drivers e opções que não sejam necessárias. Um arquivo bem ajustado deixa o kernel mais leve, além de ajudar com o tempo de construção/compilação do kernel e de inicialização após instalado, uma vez que há menos código/módulos.

Então adicionaremos os parâmetros necessários para o funcionamento como gateway. No nosso exemplo copiaremos o arquivo GENERIC (este é apenas uma arquivo modelo) com outro nome (KERNCUSTOM). Teremos então dois arquivos, o modelo base (GENERIC) e o outro ao qual iremos modificar (KERNCUSTOM). Para realizar a cópia faça #cp –p /usr/src/sysi386/conf/GENERIC /usr/src/sysi386/conf/KERNCUSTOM.

Manter o mesmo nome do arquivo de configuração e do próprio kernel (ident) ajuda a manter a organização. Vale ressaltar que não há restrições quanto ao nome dado (veja Figura 31).

Então adicionamos os seguintes parâmetros (as linhas que iniciam com # são comentários):

ident KERNCUSTOM – Nome de identificação do kernel. Não há relação com o nome do arquivo, é apenas uma boa prática para identificar e/ou versionar e organizar as possíveis variações de kernel;

options IPFIREWALL – Habilitando o módulo do IPFW (firewall);

options IPFIREWALL_FORWARD – Habilita o repasse de pacotes entre interfaces de rede interna e externa;

options IPFIREWALL_DEFAULT_TO_ACCEPT – Comportamento padrão para o firewall, definido como aberto (caso essa linha seja omitida o padrão será fechado, portanto as regras no arquivo de rc.firewall deverão ser alteradas);

options IPFIREWALL_VERBOSE – Habilitando o log do firewall no syslogd;

options IPFIREWALL_VERBOSE_LIMIT=1000 – Limite do log em Mb;

options IPDIVERT – Habilitando o uso de socket divert por padrão na porta 8668.

Figura 31. Copiando e editando o arquivo de configuração do kernel.

Editado o arquivo KERNCUSTOM, devemos então retornar ao diretório /usr/src para que consigamos executar os comandos para construção e instalação do novo kernel.

A construção do kernel usando o arquivo de configuração que foi editado, a depender do microcomputador, pode ser demorada. Para isso, execute:

  # make buildkernel KERNCONF=KERNCUSTOM 

Se nenhum erro foi encontrado, instale o novo kernel usando o make:

  #make installkernel KERNCONF=KERNCUSTOM 

Se tudo ocorreu bem, teremos então o FreeBSD pronto para atuar como gateway. Assim, basta reiniciar o computador e ligar suas conexões de rede (interna e externa) nas interfaces corretas. Lembre-se das configurações do rc.conf, devemos nos atentar em ligar as conexões de rede às placas corretas.

Configurando clientes Windows

Para configurar o gateway em uma máquina com Windows XP siga os passos: Iniciar > Painel de controle > Conexões de rede > Conexão local > Propriedades > (Na lista) Protocolo TCP/IP > Propriedade. Adicione o computador na mesma rede que o gateway e configure a opção gateway com o endereço do nosso servidor (Figura 32).

Figura 32. Configurando o Windows XP para usar o gateway.

O DNS foi omitido por segurança, mas ele deve ser adicionado. Use o DNS (Domain Name System) do seu provedor ou algum de domínio público.

Para testar a conexão, tente navegar ou utilize o ping. Para isso, acesse: Iniciar > Executar > cmd e no prompt de comando digite: ping www.devmedia.com.br (como na Figura 33). Para que tudo esteja funcionando corretamente devemos ter 100% de pacotes enviados e 100% recebidos.

Figura 33. Teste de conexão, bem sucedido.

Temos então um sistema FreeBSD robusto, estável e seguro atuando como gateway da rede. Com a atual configuração, também poderíamos adicionar um Proxy, como Squid, controlar o tráfego, entre outros serviços, o que pode ser apresentado em um próximo artigo.

Conclusão

O FreeBSD é um sistema de baixíssimo custo. Ele oferece estabilidade e segurança, além de funcionar com as mais diversas arquiteturas de computadores, desde os de pequeno até os de grande porte.

Neste artigo, fizemos do FreeBSD o nosso gateway, permitindo que outras máquinas da rede local utilizem a internet a partir de um só link de internet. Concentrado todo o tráfego em um único ponto, nosso gateway torna mais fácil o controle e gerenciamento do tráfego através da adição de novos serviços, redirecionamentos de portas através de regras de firewall, tudo isso sem falar no aumento da segurança, pois alguém mal intencionado teria que passar pelo nosso gateway até chegar a outros pontos.

Podemos a partir de agora acrescentar ao FreeBSD instalado novos recursos, como: escrever regras de firewall mais adequadas dando permissão apenas às portas e serviços necessários; um proxy para restringir e controlar o acesso à internet; entre outras configurações que possibilitarão um melhor uso e administração da rede como um todo.

Links

Versão do FreeBSD utilizada
ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/7.2/7.2-RELEASE-i386-disc1.iso

Rogério Tomassoni

Revista Infra Magazine lover