Protegendo seu servidor com PortSentry

Ter um servidor ligado à internet e sempre complicado, além de lidar com as configurações de serviços para garantir a estabilidade e segurança, temos que pensar também nos mal intencionados da rede. Evitar que ataques de portscan sejam efetivos costuma ser trabalhoso, mas com o Portsentry sua vida fica um pouco mais fácil.

O Portsentry simula que portas estejam abertas em seu Servidor e quando essas portas recebem algum tipo de acesso ou escaneamento ele pode tomar alguma atitude. Geralmente bloquear o IP de origem, assim seu sistema mantém aquele host bloqueado.

Vamos à instalação:

root# apt-get install portsentry

Se o sistema for baseado em CentOS, procure pelo portsentry no site rpmfind.net, escolha a versão compatível com seu sistema e instale com:

root# rpm -ivh portsentry-versao_do_porsentry.rpm

Agora entre no diretório /etc/portsentry para começar as configurações:

root# cd /etc/portsentry

Renomeie o arquivo portsentry.conf :

root# mv portsentry.conf portsentry.conf.original

Crie seu arquivo com o seguinte conteúdo:

root# vi portsentry.conf

# Portas que serão simuladas pelo portsentry(NUNCA USE PORTAS DE SERVIÇOS QUE ESTEJAM NESTE SERVIDOR)
TCP_PORTS=”1,11,15,23,79,111,119,143,445,540,635,1080,1524,2000,3128,5742,6667,12345,12346,20034,27665,31337,32771,32772,32773,32774,40421,49724,54320″
UDP_PORTS=”1,7,9,69,161,162,513,635,640,641,700,37444,34555,31335,32770,32771,32772,32773,32774,31337,54321″
# Portas altas
ADVANCED_PORTS_TCP=”1024″
ADVANCED_PORTS_UDP=”1024″
# Portas excluídas do bloqueio
ADVANCED_EXCLUDE_TCP=”113,139″
ADVANCED_EXCLUDE_UDP=”520,138,137,67″
# Hosts que não serão bloqueados estão neste arquivo(um por linha)
IGNORE_FILE=”/etc/portsentry/portsentry.ignore”
# Histórico dos bloqueios
HISTORY_FILE=”/var/lib/portsentry/portsentry.history”
# Hosts bloqueados
BLOCKED_FILE=”/var/lib/portsentry/portsentry.blocked”
# Não resolver nome dos hosts
RESOLVE_HOST = “0”
# Bloquear TCP e UDP
BLOCK_UDP=”1″
BLOCK_TCP=”1″
# Regras do IPTABLES que irá bloquear o host que acessar as portas:
KILL_ROUTE=”/sbin/iptables -I INPUT -s $TARGET$ -j DROP”
# Regra a ser adicionada no hosts.allow
KILL_HOSTS_DENY=”ALL: $TARGET$ : DENY”
# Quantos acessos um host pode fazer em uma porta antes de ser bloqueado
SCAN_TRIGGER=”1″

Basta agora reiniciar o serviço:

root# /etc/init.d/portsentry restart

Veja como funciona, primeiro temos as portas normais de serviço abertas:

Veja agora as portas depois do portsentry instalado:

Veja as regras de firewall totalmente limpas:

Vamos fazer 2 acessos à porta 111 , que é uma das portas abertas pelo Portsentry:

Podemos ver que no segundo acesso a conexão não se completou, pois no segundo acesso uma regras de firewall foi criada para aquele host:

Então quando um host fizer um escaneamento em seu servidor ou tentativas de acesso, as portas que estão abertas pelo portsentry são monitoradas e o host será bloqueado por regra de firewall. Assim o host só será liberado quando o administrador remover a regra, e o bloqueio é para qualquer acesso daquele host e não apenas na porta anteriormente acessada.

Então gradualmente faremos nossos servidores mais seguros e junto com outros posts que temos aqui no CooperaTI expandimos nosso conhecimento em segurança.

Espero que gostem do artigo e não se esqueçam de votar no TopBlog.

  • jonas

    Vagner blz.
    Esta semana em um dos nossos servidores recebemos um ataque atraves de inumeros ips de nossos clientes, solicitando resposta para o site do icann.org
    Gostaria de saber se possivel qual se esta ferramenta poderia realizar.
    No caso do dns. por diversas vezes um mesmo ip podera solicitar uma requisicao para o dns.
    Seria possivel programar esta ferramenta para que se a ocorrencia de vezes versus um determinado tempo ocorrer entao seja bloqueado.

  • jonas

    Wagner tudo bem. Voc~e poderia me dar alguma sugestao obrigado

    • Jonas,

      No seu caso eu sugiro o uso do módulo “limit” do iptables, onde você pode restringir mais de x conexões por segundo à alguma porta ou vinda de algum IP.

  • Pingback: ()

  • Welinton

    Prezado Vagner Fonseca, boa tarde.

    Estou precisando bloquear invasores pela porta 25 e 110.
    Não coloquei estas portas no ADVANCED_EXCLUDE_TCP, faço o acesso por telnet e não há o bloqueio.

    Sabe o que pode estar acontecendo?

    • Colocou essas portas em TCP_PORTS e habilitou a variavel BLOCK_TCP ?

      • Welinton

        Não coloquei em TCP_PORTS, porque existe o servidor de e-mail nas portas 25 e 110.

        No seu tutorial o sr. disse para NUNCA USARMOS PORTAS DE SERVIÇOS QUE ESTEJAM NO SERVIDOR, por isso não coloquei.

        Acontece o seguinte no meu servidor, tenho um Xmail só para enviar e-mails via PHP, só que ficam tentando conectar com força bruta, eu queria bloquear quem tenta força bruta no servidor de e-mail.

        Tem como fazer isso com o PortSentry?

      • Welinton

        A BLOCK_TCP esta ok.

        Quanto tento a conexão por uma porta que esta em TCP_PORTS, o PortSentry bloqueia, mas não bloqueia as conexões feitas nas portas 25 e 110.

        Não coloquei estas portas nem na TCP_PORTS e nem na ADVANCED_EXCLUDE_TCP, achei que fazendo isso daria certo.

        • Você não pode usar o Portsentry para isso, ele só é usado em portas que não estão em uso, ou para serviços que rodam em portas fora do padrão.

          Você pode usar o Fail2Ban para poder rastrear no log as entradas de acesso indevido e criar regras de firewall para bloqueá-las.

          Abraço.

          • Welinton

            Muito agradecido.

            Parabéns pelo site e pelos tutoriais me ajudaram bastante.

            Abraço.

  • Welinton Munhoz

    Prezado Vagner Fonseca, bom dia.

    Estou com a seguinte dúvida, diariamente são efetuadas em média 20 tentativas de invasão, posso ver isto nos relatórios do PortSentry.

    Bom minha dúvida é a seguinte, em 10 dias acumula-se 200 bloqueios no iptables, em um mês 600, e assim por diante.

    Devido a estes bloqueios ser muitas linhas no iptables, isso pode contribuir para uma lentidão do iptables em sua consulta de regras?
    Desta forma afetando outros serviços por esta lentidão?

    Desde já obrigado.

    • Welinton,

      Muitas regras podem sim causar uma certa lentidão se não houver memória em quantidade razoável, pois as regras são testadas na memória.

      Verifique a condição de limpeza de regras do portsentry, geralmente é de quando ele é reiniciado, assim agende o reinicio do processo a cada 3 dias por exemplo.