===== Procedimento para compilar o Kernel FreeBSD e ativar o Firewall IPFW: ===== Para essa instalação, é pré-requisito que você tenha instalado os arquivos do Kernel presentes no diretório /usr/src. Caso não tenha instalado durante a instalação normal do sistema, você pode baixar no link [[http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/]], escolha de acordo com a arquitetura do seu processador e a versão do SO FreeBSD que você instalou, no meu caso estou usando a versão 13.1. Links de auxílio:\\ https://www.freebsd.org/doc/handbook/firewalls-ipfw.html\\ https://www.cyberciti.biz/faq/howto-setup-freebsd-ipfw-firewall\\ https://www.freebsd.org/doc/handbook/kernelconfig-building.html\\ https://acme.com/firewall.html\\ https://sempreupdate.com.br/freebsd-como-configurar-um-firewall-usando-ipfw\\ https://www.freebsd.org/doc/pt_BR/articles/linux-users/firewall.html\\ === 1 - Inicialmente vamos instalar em uma máquina a versão mais recente do FreeBSD (no meu caso 13.1). Durante a instalação não esquecer de marcar para instalação os arquivos do diretório src: === === 2 - Depois da instalação do Sistema Operacional, efetuar as configurações de rede de acordo com sua necessidade no seu /etc/rc.conf: === === 3 - Entrar no diretório /usr/src/sys/amd64/conf: === # cd /usr/src/sys/amd64/conf === 4 - Copiar o arquivo GENERIC (kernel padrão que vem no SO) com o nome do seu novo kernel: === # cp GENERIC NOVOFW === 5 - Agora que você já fez o backup do kernel principal, retire ou acrescente as linhas necessárias para habilitar ou retirar um serviço do SO: === -- No nosso caso vamos recompilar o kernel para ativar o firewall IPFW: -- Edite o arquivo NOVOFW: # ee NOVOFW -- A primeira linha que você vai editar será a linha "ident", ela fica sempre abaixo da linha "cpu". Esta linha você vai por o nome do seu novo Kernel, como pode ver ela mantem o nome do antigo Kernel "GENERIC". -- Vamos alterar esta linha: cpu HAMMER ident NOVOFW # Linha que deve ser alterada === 6 - Depois que terminar de alterar o nome do Kernel (ident), vamos acrescentar as linhas que vão ativar o firewall no SO, pode acrescentar no final do arquivo, segue abaixo um exemplo: === ### IPFirewall options IPFIREWALL # enables IPFW options IPFIREWALL_VERBOSE # enables logging for rules with log keyword to syslogd(8) options IPFIREWALL_VERBOSE_LIMIT=400 # limits number of logged packets per-entry options IPFIREWALL_DEFAULT_TO_ACCEPT # sets default policy to pass what is not explicitly denied options IPFIREWALL_NAT # enables basic in-kernel NAT support options LIBALIAS # enables full in-kernel NAT support options IPFIREWALL_NAT64 # enables in-kernel NAT64 support options IPFIREWALL_NPTV6 # enables in-kernel IPv6 NPT support options IPFIREWALL_PMOD # enables protocols modification module support options IPDIVERT # enables NAT through natd(8) options IPSTEALTH options ROUTETABLES=10 ### Packet Filter device pf device pflog device pfsync options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build ### Bridge interfaces device if_bridge ### CARP device carp ### IPSec device enc ### Granularidade de Processamento options HZ=2000 ### Tunning Apache options ACCEPT_FILTER_DATA options ACCEPT_FILTER_HTTP -- Salve o arquivo e vamos para o próximo passo: === 7 - Depois de salvar o arquivo, vamos compilar nosso novo Kernel. Vamos usar o comando config: === # config novofw -- Se tudo estiver correto, você receberá a seguinte saída: root@frw1:/usr/src/sys/amd64/conf # config NOVOFW Kernel build directory is ../compile/NOVOFW Don't forget to do ``make cleandepend && make depend'' -- Nesta parte você irá seguir os passos da saída: # cd ../compile/NOVOFW # make cleandepend && make depend -- Se tudo estiver correto você não receberá nenhuma mensagem de erro. Caso receba, volte para o Kernel que você customizou e verifique as novoas configurações. Terminando esse passo, siga para o próximo; # make -- Se tudo estiver correto você não receberá nenhuma mensagem de erro. Caso receba, volte para o Kernel que você customizou e verifique as novoas configurações. Terminando esse passo, siga para o próximo; # make install -- Se tudo estiver correto você não receberá nenhuma mensagem de erro. Caso receba, volte para o Kernel que você customizou e verifique as novoas configurações, terminando esse passo, siga para o próximo; -- Terminando este último passo, vamos ativar o firewall no /etc/rc.conf e acrescentar o diretório onde ficará nosso arquivo que conterá as regras do firewall. Para que sempre que o computador for reiniciado, ele carregue as regras no firewall. === 8 - Vamos editar o rc.conf e acrescentar as linhas: === # ee /etc/rc.conf firewall_enable="YES" ## inicia o ipfw quando o computador é reiniciado firewall_script="/usr/local/etc/ipfw.regras" ## local onde se encontra o arquivo que conterá nossas regras de firewall (ipfw.regras) === 9 - Feito isso, vamos criar nosso arquivo que conterá as regras do nosso firewall: === # touch /usr/local/etc/ipfw.regras === 10 - Depois de criado, vamos acrescentar nossas regras. Por segurança qualquer regra que venha a ser criada futuramente é aconselhavel que, todas, sejam acrescentada também no arquivo. Caso o computador reinicie todas as regras são carregadas na hora do boot, se não criarmos este arquivo, quando o computador é inicializado as regras que antes estavam na memoria se perderão. === -- Abaixo segue o conteúdo básico de um arquivos contendo regras do firewall #!/bin/sh # # regras do firewall # ## exemplo de criacao de variaveis fw="/sbin/ipfw" ## substitui o comando /sbin/ipfw dentro do arquivo # # exemplo de utilizacao de variavel # ## comando serve para limpar todas as regras o firewall $fw -f flush ## seria a mesma coisa que usar o comando /sbin/ipfw -f flush ## comando liberando todo o acesso via ssh para o firewall. Em modo stateless $fw add 100 allow tcp from any to me 22 $fw add 101 allow tcp from me 22 to any ## exempo de outra regra que liberaria o acesso via ssh de qualquer lugar para o firewall. Em modo stateful #$fw add 100 allow tcp from any to me keep-state # # Liberar icmp de todo lugar para todo lugar # $fw add 300 allow icmp from any to any ## comando que bloqueia tudo, exceto o que estiver liberado acima desta regra $fw add 65500 deny all from any to any ## funciona como um firewall de politica fechada, bloqueia tudo exceto o que ja esta liberado acima desta regra === 11 - Feito isso, agora é só reiniciar o computador e efetuar os testes no ipfw: ===