Aprimorando a segurança do FreeBSD usando IPFW e SSHGuard

Servidores VPS são frequentemente direcionados por invasores. Um tipo comum de ataque aparece nos logs do sistema como centenas de tentativas de login ssh não autorizadas. A configuração de um firewall é muito útil, mas, por si só, pode não controlar adequadamente as tentativas de invasão disruptivas.

Este tutorial mostra como construir uma barreira de intrusão aprimorada para o FreeBSD usando dois programas, o ipfwfirewall e sshguard. O SSHGuard é um pequeno programa complementar que monitora os logs do sistema em busca de entradas "abusivas". Quando os criminosos tentam obter acesso, sshguardinstruem ipfwa bloquear o tráfego originado no endereço IP do criminoso. O infrator é então efetivamente excluído.

Depois de entender como esses programas funcionam, gerenciar a proteção do servidor é bastante simples. Embora este guia se concentre na configuração do FreeBSD, partes dele se aplicam a outros SO e software de firewall.

Etapa 1. Configurando o IPFW

FreeBSD fornece 3 firewalls em seu padrão ( GENERICkernel), ipfw, pf, e ipfilter. Cada um tem vantagens e fãs, mas ipfwé o software de firewall nativo do FBSD e bastante simples de usar para nossos propósitos. Vale a pena notar que ipfwfaz muitas coisas como mostra sua página de manual, no entanto, recursos como NAT, modelagem de tráfego, etc., não são necessários para a situação típica do VPS. Felizmente, os recursos básicos do firewall atendem facilmente aos nossos requisitos.

Para iniciar o firewall no momento da inicialização, adicione o seguinte a /etc/rc.conf:

firewall_enable="YES"
firewall_script="/usr/local/etc/IPFW.rules"
firewall_logging="YES"

O servicecomando está disponível para iniciar / parar o firewall manualmente:

[user@vultr ~]$ sudo service ipfw start

Naturalmente, ipfwnão fará nada até adicionar regras, geralmente de um arquivo, neste exemplo localizado em /usr/local/etc/IPFW.rules. De fato, o arquivo de regras pode estar localizado em qualquer lugar ou ter qualquer nome, desde que corresponda ao parâmetro "firewall_script". O arquivo de regras é descrito em detalhes abaixo.

Etapa 2. Instale e configure o SSHGuard

sshguardvem em vários sabores para uso com firewalls diferentes. Use o pkgutilitário para buscar e instalar sshguard-ipfw:

[user@vultr ~]$ sudo pkg install sshguard-ipfw

Na maioria dos casos, é tudo o que se precisa fazer. A variável apropriada é inserida automaticamente /etc/rc.confpara iniciar a inicialização:

sshguard_enable="YES"

Os padrões normalmente funcionam bem. Se valores diferentes forem necessários, a sshguardpágina de manual fornece informações detalhadas sobre os parâmetros:

# sshguard--program defaults, so don't need to be in rc.conf unless assigning different value
# sshguard_pidfile="/var/run/sshguard.pid"
# sshguard_watch_logs="/var/log/auth.log:/var/log/mail"
# sshguard_blacklist="40:/var/db/sshguard/blacklist.db"
# sshguard_safety_thresh="40"
# sshguard_pardon_min_interval="420"
# sshguard_prescribe_interval="1200"

Você pode começar sshguardcom a serviceinvocação usual :

[user@vultr ~]$ sudo service sshguard start

Etapa 3. Crie um script de regras

A parte mais difícil é criar o conjunto de regras do firewall. ipfwpode fazer uso do /etc/rc.firewallscript fornecido , mas precisa ser modificado para acomodar o SSHGuard, bem como diferentes cenários operacionais. Várias páginas da web e o Manual do FreeBSD têm informações úteis sobre isso. No entanto, escrever um arquivo de regras não é tão difícil, além disso, um conjunto de regras personalizado pode ser mais fácil de entender e alterar quando necessário.

Uma característica importante das ipfwregras é que a primeira partida vence, o que significa que a ordem das regras é importante. Em ipfw, cada regra é um comando e o arquivo de regras é um script de shell executável. Isso permite que o conjunto de regras seja alterado alterando as regras e executando o arquivo de regras como o shell script:

[user@vultr /usr/local/etc]$ sudo ./IPFW.rules

Geralmente, um arquivo de regras define uma variável para o ipfwcomando, limpa as regras atuais, emite regras genéricas e depois define as regras "out", seguidas pelas regras "in". A página de manual do ipfw e outros recursos contêm uma grande quantidade de informações sobre a estrutura de regras e opções que são numerosas para dizer o mínimo.

Como a versão do sshguard do FreeBSD foi atualizada para a versão 1.6.2, o método de inserção de regras de bloqueio para infratores mudou. Agora, os endereços dos infratores são mantidos em uma tabela ipfw (tabela 22 para ser específico), em vez de inseridos nas regras acima de 55000 como antes.

Felizmente, é muito simples configurar o arquivo de regras para usar a tabela. É apenas uma questão de colocar a regra da tabela no lugar certo e garantir o uso da sintaxe correta ao escrever a regra.

Quando sshguardencontra um infrator, ele coloca o endereço do criminoso em sua lista negra e também o insere na ipfwtabela para que "desencadeie" a negação do acesso. Esta regra realizará estes propósitos:

01000 deny ip from table\(22\) to any

Ainda é necessário estabelecer regras que permitam serviços de entrada acima de 01000 neste caso. Por exemplo, digamos que o endereço 10.20.30.40seja um infrator na tabela 22, e nós temos esta regra ipfw:

56420 allow tcp from any to me dst-port 22 in via $vif

Uma vez que ipfwencontra a regra 01000 antes da regra 56420 , 10.20.30.40está bloqueado . Isso nunca será visto pela regra "permitir 22". Se a regra de permissão tivesse um número "regular" como 00420 , o tráfego ruim seria permitido e nunca bloqueado (porque 00420 é menor que 01000 e a "primeira correspondência vence").

Um bom recurso da versão atualizada é que agora, quando o sshguard é inicializado, todos os endereços da lista negra são adicionados à tabela e estão disponíveis para bloquear os infratores sem demora. A lista negra é cumulativa e mantida entre as sessões.

Neste ponto, provavelmente é sensato mostrar um ipfwconjunto de regras completo modificado para sshguard. Os comentários devem facilitar bastante seguir a lógica da regra:

#!/bin/sh

# ipfw config/rules
# from FBSD Handbook, rc.firewall, et. al.

# Flush all rules before we begin.
ipfw -q -f flush

# Set rules command prefix
cmd="ipfw -q add "

vif="vtnet0"

# allow all for localhost
$cmd 00010 allow ip from any to any via lo0

# checks stateful rules.  If marked as "keep-state" the packet has
# already passed through filters and is "OK" without futher
# rule matching
$cmd 00101 check-state

# allow DNS out
$cmd 00110 allow tcp from me to any dst-port 53 out via $vif setup keep-state
$cmd 00111 allow udp from me to any dst-port 53 out via $vif keep-state

# allow dhclient connection out (port numbers are important)
$cmd 00120 allow udp from me 68 to any dst-port 67 out via $vif keep-state

# allow HTTP HTTPS replies
$cmd 00200 allow tcp from any to any dst-port 80 out via $vif setup keep-state
$cmd 00220 allow tcp from any to any dst-port 443 out via $vif setup keep-state

# allow outbound mail
$cmd 00230 allow tcp from any to any dst-port 25 out via $vif setup keep-state
$cmd 00231 allow tcp from any to any dst-port 465 out via $vif setup keep-state
$cmd 00232 allow tcp from any to any dst-port 587 out via $vif setup keep-state

# allow icmp re: ping, et. al. 
# comment this out to disable ping, et.al.
$cmd 00250 allow icmp from any to any out via $vif keep-state

# alllow timeserver out
$cmd 00260 allow tcp from any to any dst-port 37 out via $vif setup keep-state

# allow ntp out
$cmd 00270 allow udp from any to any dst-port 123 out via $vif keep-state

# allow outbound SSH traffic
$cmd 00280 allow tcp from any to any dst-port 22 out via $vif setup keep-state

# otherwise deny outbound packets
# outbound catchall.  
$cmd 00299 deny log ip from any to any out via $vif

# inbound rules
# deny inbound traffic to restricted addresses
$cmd 00300 deny ip from 192.168.0.0/16 to any in via $vif
$cmd 00301 deny ip from 172.16.0.0/12 to any in via $vif
$cmd 00302 deny ip from 10.0.0.0/8 to any in via $vif
$cmd 00303 deny ip from 127.0.0.0/8 to any in via $vif
$cmd 00304 deny ip from 0.0.0.0/8 to any in via $vif
$cmd 00305 deny ip from 169.254.0.0/16 to any in via $vif
$cmd 00306 deny ip from 192.0.2.0/24 to any in via $vif
$cmd 00307 deny ip from 204.152.64.0/23 to any in via $vif
$cmd 00308 deny ip from 224.0.0.0/3 to any in via $vif

# deny inbound packets on these ports
# auth 113, netbios (services) 137/138/139, hosts-nameserver 81 
$cmd 00315 deny tcp from any to any dst-port 113 in via $vif
$cmd 00320 deny tcp from any to any dst-port 137 in via $vif
$cmd 00321 deny tcp from any to any dst-port 138 in via $vif
$cmd 00322 deny tcp from any to any dst-port 139 in via $vif
$cmd 00323 deny tcp from any to any dst-port 81 in via $vif

# deny partial packets
$cmd 00330 deny ip from any to any frag in via $vif
$cmd 00332 deny tcp from any to any established in via $vif

# allowing icmp re: ping, etc.
$cmd 00310 allow icmp from any to any in via $vif

# allowing inbound mail, dhcp, http, https
$cmd 00350 allow udp from any 53 to me in via $vif
$cmd 00360 allow tcp from any 53 to me in via $vif
$cmd 00370 allow udp from any 67 to me dst-port 68 in via $vif keep-state

$cmd 00400 allow tcp from any to me dst-port 80 in via $vif setup limit src-addr 2
$cmd 00410 allow tcp from any to me dst-port 443 in via $vif setup limit src-addr 2

# SSHguard puts offender addresses in table 22. Set up the table rule
# Please note the '\(22\)' syntax, necessary since it's run as shell command
$cmd 01000 deny ip from table\(22\) to any

# allow inbound ssh, mail. PROTECTED SERVICES: numbered ABOVE sshguard blacklist range 
$cmd 56420 allow tcp from any to me dst-port 22 in via $vif setup limit src-addr 2
$cmd 56530 allow tcp from any to any dst-port 25 in via $vif setup keep-state
$cmd 56531 allow tcp from any to any dst-port 465 in via $vif setup keep-state
$cmd 56532 allow tcp from any to any dst-port 587 in via $vif setup keep-state

# deny everything else, and log it
# inbound catchall
$cmd 56599 deny log ip from any to any in via $vif

# ipfw built-in default, don't uncomment
# $cmd 65535 deny ip from any to any

Etapa 4. Inicialização e teste

As necessidades do sistema variam e diferentes opções de portas para bloquear ou desbloquear são refletidas no conjunto de regras. Após a conclusão do conjunto de regras, salve o arquivo /usr/local/etc/IPFW.rulese inicie os serviços do FBSD:

 # service ipfw start
 # service sshguard start

O firewall aumentado agora deve estar em execução! Verifique sshguard:

 [user@vultr ~]$ sudo pgrep -lfa ssh

Se sshguardestiver em execução, sua linha de comando pid e completa serão exibidas:

720 /usr/local/sbin/sshguard -b 40:/var/db/sshguard/blacklist.db -l /var/log/auth.log -l /var/log/maillog -a 40 -p 420 -s 1200 -w /usr/local/etc/sshguard.whitelist -i /var/run/sshguard.pid

Isso mostra o conjunto de regras do firewall com estatísticas e a última vez que um pacote correspondeu à regra:

 [user@vultr ~]$ sudo ipfw -cat list

Após horas ou dias, os endereços dos criminosos são adicionados à lista negra e também à tabela 22. Para visualizar todos os endereços da tabela, use este comando:

ipfw table 22 list

O resultado é impresso como:

10.10.10.118/32 0
10.10.10.72/32 0
...

Como descrito acima, as conexões desses endereços não são permitidas. Obviamente, na primeira execução sshguard, não haverá endereços na lista, mas com o tempo, pode demorar um pouco. Uma opção é criar regras de bloqueio separadas para endereços com várias entradas na tabela e excluí-las da lista negra.

Etapa 5. Mantendo-se vigilante ...

Convém verificar ocasionalmente os logs para garantir que as invasões sejam controladas. Geralmente, /var/log/auth.loge /var/log/securitysão informativos. Lacunas ou erros na cobertura dos serviços de rede podem se tornar aparentes. Modificar o conjunto de regras do firewall conforme necessário é uma parte normal da administração do servidor.

Nas versões anteriores do sshguard, quando o /var/db/sshguard/blacklist.dbarquivo aumentava , isso impedia sshguarda inicialização da inicialização do sistema. A remoção ou renomeação do arquivo da lista negra pode sshguardcomeçar. Esse problema parece ter sido corrigido na versão mais recente do sshguard; portanto, essa solução alternativa provavelmente não é mais necessária.

Certifique-se de colocar na lista branca o endereço IP do qual você está conectado à sessão SSH. Se você se bloquear acidentalmente, sempre poderá conectar-se ao console noVNC em https://my.vultr.com e colocar seu IP na lista de permissões.

Resumindo, usando a combinação de ipfwe sshguardajuda a manter seu sistema FreeBSD seguro e fazendo seu trabalho. Minimizar a atividade intrusiva de rede tem um benefício adicional: menos "ruído" facilita o rastreamento e o ajuste da operação do sistema, contribuindo para um servidor mais seguro e com melhor execução.

Proteger efetivamente um sistema / servidor FreeBSD não é especialmente complicado. Embora seja necessário um esforço modesto para colocá-lo em funcionamento, ele compensa em VPS e segurança do projeto substancialmente maiores.


Tags: #BSD #Security

Leave a Comment

Como instalar o Blacklistd no FreeBSD 11.1

Como instalar o Blacklistd no FreeBSD 11.1

Introdução Qualquer serviço conectado à Internet é um alvo em potencial para ataques de força bruta ou acesso injustificado. Existem ferramentas como fail2ba

Configure o OpenBSD 5.6 com criptografia de disco completo

Configure o OpenBSD 5.6 com criptografia de disco completo

Este tutorial mostrará como configurar o OpenBSD 5.6 com um disco totalmente criptografado no seu Vultr VPS. Uma observação sobre a parte de criptografia: a maioria dos datacenters em torno do

Como usar o Sudo no Debian, CentOS e FreeBSD

Como usar o Sudo no Debian, CentOS e FreeBSD

Usar um usuário sudo para acessar um servidor e executar comandos no nível raiz é uma prática muito comum entre o Linux e o Unix Systems Administrator. O uso de um sud

Como instalar o osTicket no FreeBSD 12

Como instalar o osTicket no FreeBSD 12

Usando um sistema diferente? o osTicket é um sistema de bilheteria de suporte ao cliente de código aberto. O código fonte do osTicket está hospedado publicamente no Github. Neste tutorial

Como instalar o Osclass no FreeBSD 12

Como instalar o Osclass no FreeBSD 12

Usando um sistema diferente? Osclass é um projeto de código aberto que permite criar facilmente um site classificado sem nenhum conhecimento técnico. Its sourc

Como instalar o Wiki.js no FreeBSD 11

Como instalar o Wiki.js no FreeBSD 11

Usando um sistema diferente? O Wiki.js é um aplicativo wiki moderno, de código aberto e gratuito, construído em Node.js, MongoDB, Git e Markdown. O código-fonte do Wiki.js é publicl

Como instalar o Directus 6.4 CMS em um FreeBSD 11 FAMP VPS

Como instalar o Directus 6.4 CMS em um FreeBSD 11 FAMP VPS

Usando um sistema diferente? O Directus 6.4 CMS é um sistema de gerenciamento de conteúdo sem cabeça (CMS) poderoso e flexível, gratuito e de código aberto que fornece

Instalando o Fork CMS no FreeBSD 12

Instalando o Fork CMS no FreeBSD 12

Usando um sistema diferente? Fork é um CMS de código aberto escrito em PHP. O código fonte do Forks está hospedado no GitHub. Este guia mostra como instalar o Fork CM

Criar arquivo de permuta no FreeBSD 10

Criar arquivo de permuta no FreeBSD 10

Pronto para uso, os servidores Vultr FreeBSD não estão configurados para incluir espaço de troca. Se sua intenção é uma instância de nuvem descartável, você provavelmente não precisará

Como redimensionar um disco no FreeBSD

Como redimensionar um disco no FreeBSD

O sistema operacional FreeBSD utiliza o UFS (Unix File System) para seu sistema de arquivos de partições raiz; também conhecido como freebsd-ufs No caso de uma atualização

Como instalar o Selfoss RSS Reader em um FreeBSD 11 FAMP VPS

Como instalar o Selfoss RSS Reader em um FreeBSD 11 FAMP VPS

Usando um sistema diferente? O Selfoss RSS Reader é um aplicativo gratuito e de código aberto, multi-hospedado na Web, de transmissão ao vivo, mashup e feed de notícias (RSS / Atom)

Como instalar o Craft CMS no FreeBSD 12

Como instalar o Craft CMS no FreeBSD 12

Usando um sistema diferente? Introdução O Craft CMS é um CMS de código aberto escrito em PHP. O código-fonte do Craft CMS está hospedado no GitHub. Este guia irá mostrar-lhe

Como instalar o Backdrop CMS em um FreeBSD 11 FAMP VPS

Como instalar o Backdrop CMS em um FreeBSD 11 FAMP VPS

Usando um sistema diferente? O Backdrop CMS 1.8.0 é um CMS (Content Management System) simples e flexível, fácil de usar, gratuito e de código aberto que permite que

Como instalar o ImpressPages CMS 5.0 em um FreeBSD 11 FAMP VPS

Como instalar o ImpressPages CMS 5.0 em um FreeBSD 11 FAMP VPS

Usando um sistema diferente? O ImpressPages CMS 5.0 é um sistema de gerenciamento de conteúdo (CMS) simples e eficaz, gratuito e de código aberto, fácil de usar e baseado em MVC

Como instalar o fórum NodeBB no FreeBSD 12

Como instalar o fórum NodeBB no FreeBSD 12

Usando um sistema diferente? NodeBB é um software de fórum baseado em Node.js. Ele utiliza soquetes da web para interações instantâneas e notificações em tempo real. The NodeB

Instale o eSpeak no FreeBSD 12

Instale o eSpeak no FreeBSD 12

Usando um sistema diferente? O ESpeak pode gerar arquivos de áudio de conversão de texto em fala (TTS). Isso pode ser útil por vários motivos, como criar seu próprio Turim

Como instalar o LimeSurvey CE no FreeBSD 12

Como instalar o LimeSurvey CE no FreeBSD 12

Usando um sistema diferente? LimeSurvey é um software de pesquisa de código aberto escrito em PHP. O código fonte do LimeSurvey está hospedado no GitHub. Este guia irá mostrar-lhe

Como instalar o Automad CMS no FreeBSD 12

Como instalar o Automad CMS no FreeBSD 12

Usando um sistema diferente? Automad é um sistema de gerenciamento de conteúdo (CMS) baseado em arquivo de código aberto e um mecanismo de modelo escrito em PHP. O código-fonte Automad i

Como instalar o ProcessWire CMS 3.0 em um FreeBSD 11 FAMP VPS

Como instalar o ProcessWire CMS 3.0 em um FreeBSD 11 FAMP VPS

Usando um sistema diferente? O ProcessWire CMS 3.0 é um CMS (Content Management System) simples, flexível e poderoso, de código aberto e gratuito. ProcessWire CMS 3.

Instalando o Akaunting no FreeBSD 12

Instalando o Akaunting no FreeBSD 12

Usando um sistema diferente? Introdução O Akaunting é um software de contabilidade on-line gratuito e de código aberto desenvolvido para pequenas empresas e freelancers. É eu

A IA pode lutar contra o aumento do número de ataques de ransomware

A IA pode lutar contra o aumento do número de ataques de ransomware

Os ataques de ransomware estão aumentando, mas a IA pode ajudar a lidar com os vírus de computador mais recentes? AI é a resposta? Leia aqui para saber se é AI boone ou bane

ReactOS: Este é o futuro do Windows?

ReactOS: Este é o futuro do Windows?

ReactOS, um sistema operacional de código aberto e gratuito está aqui com a versão mais recente. Será que ela pode atender às necessidades dos usuários modernos do Windows e derrubar a Microsoft? Vamos descobrir mais sobre esse estilo antigo, mas uma experiência de sistema operacional mais recente.

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

O Whatsapp finalmente lançou o aplicativo Desktop para usuários de Mac e Windows. Agora você pode acessar o Whatsapp do Windows ou Mac facilmente. Disponível para Windows 8+ e Mac OS 10.9+

Como a IA pode levar a automação de processos ao próximo nível?

Como a IA pode levar a automação de processos ao próximo nível?

Leia isto para saber como a Inteligência Artificial está se tornando popular entre as empresas de pequena escala e como está aumentando as probabilidades de fazê-las crescer e dar vantagem a seus concorrentes.

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

Recentemente, a Apple lançou o macOS Catalina 10.15.4, uma atualização suplementar para corrigir problemas, mas parece que a atualização está causando mais problemas, levando ao bloqueio de máquinas mac. Leia este artigo para saber mais

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

O que é um sistema de arquivos de registro no diário e como ele funciona?

O que é um sistema de arquivos de registro no diário e como ele funciona?

Nosso computador armazena todos os dados de uma maneira organizada conhecida como sistema de arquivos Journaling. É um método eficiente que permite ao computador pesquisar e exibir arquivos assim que você clicar em search.https: //wethegeek.com/? P = 94116 & preview = true

Singularidade tecnológica: um futuro distante da civilização humana?

Singularidade tecnológica: um futuro distante da civilização humana?

À medida que a ciência evolui em um ritmo rápido, assumindo muitos de nossos esforços, os riscos de nos sujeitarmos a uma singularidade inexplicável também aumentam. Leia, o que a singularidade pode significar para nós.

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

O impacto da inteligência artificial na saúde 2021

O impacto da inteligência artificial na saúde 2021

A IA na área da saúde deu grandes saltos nas últimas décadas. Portanto, o futuro da IA ​​na área da saúde ainda está crescendo dia a dia.