Como bloquear grandes intervalos de IPs independentes das opções específicas do servidor?

0

Eu me cansei de ser controlado por usuários internacionais constantemente investigando as bordas do meu servidor SSH, e enquanto o DenyHosts era um bom ponto de partida para gerenciar o acesso SSH, decidi que queria algo um pouco diferente.

Afinal, e se você não estiver executando o SSH? E se você tiver um servidor web ou FTP? E se você executar um servidor público do Minecraft? E se você estiver correndo todos eles? E se você estiver executando nenhum deles, mas usar um roteador baseado em Linux? Os usuários do Apache podem considerar o uso de regras .htaccess para acesso à web, que também é uma boa opção, ou configurar modsecurity para bloquear sequências de agente de usuário permanentemente enquanto mod_evasive bloqueia temporariamente IPs abusivos (bastante útil contra spiders e bot-farms ), mas não há algo um pouco mais universal, que pode ser aplicado a todas as possíveis configurações e situações?

    
por Seann 15.10.2017 / 05:12

1 resposta

0

Insira iptables e Wizcrafts . Nem todo sistema Linux vem configurado com libwrap , e hosts.deny nem sempre é consultado, ou dá resultados inesperados se você tiver um problema com sua configuração.

Tem havido muitos argumentos entre os administradores que suportam ou condenam tcpwrappers . Alguns dizem que não há nada tão espetacular quanto um /etc/hosts.deny afinado para manter indesejáveis à distância, enquanto outros dizem que não é o paradigma de segurança que foi nos anos 90, especialmente quando se trata de listas negras.

Eu não quero entrar em nada disso - é muito parecido com o círculo Star Wars versus Star Trek de argumentos sem fim. Eu só quero que você saiba (se você já não estava) das diferentes opiniões. Você pode tirar suas próprias conclusões.

Como denyhosts requer que seu servidor ssh seja configurado com a opção tcp_wrappers enabled ativada, alguns administradores ficam desconfortáveis (no entanto, não me importo com isso). E, como mencionado anteriormente, denyhosts não faz nada de bom se você não estiver executando o SSH.

Então, qual foi a minha solução universal? Bem simples. Eu peguei todas as blocklists mantidas meticulosamente pelo Wizcrafts (valeu a pena - suas blocklists são fantásticas! ) e as salvei em um único arquivo de texto, então escrevi este shell script para filtrar os comentários fora da lista e use o iptables para bloquear os intervalos de IP de criminosos conhecidos de todo o mundo:

#/bin/bash
# |-----------------------------------------------------------------------------------------
# | rangeblock.sh - reads a list of IP ranges, filters non-numeric entries, then configures
# | iptables to block what's left
# | 
# | Maybe it's cutting corners to just check the first character, but iptables will throw
# | out anything it doesn't like anyway, and the loop won't break on errors
# | 
# | Hint: runs best as root
# |-----------------------------------------------------------------------------------------

file="wizcrafts.txt" # Change to a command-line option for more flexibility

while read line; do
    echo " "
    echo "Current Entry: $line"
    if [[ ${line:0:1} == [0-9]* ]]; then        
        echo "$line is a valid IP range. Added to iptables block list."
        iptables -I INPUT -s $line -j DROP
    else
        echo "$line was skipped. Not a valid IP or range."
    fi
done <"$file"

Agora, a maior parte do tráfego ofensivo é descartado antes mesmo de chegar ao meu servidor SSH, e qualquer coisa que isso passe é manipulada por denyhosts .

Nada é 100%, e isso não substitui as práticas inteligentes (como não permitir que o root faça o login através do ssh), mas torna as coisas muito mais fáceis de lidar.

Ou, pelo menos, para mim. Efeito colateral interessante - o desempenho do meu sistema e da rede melhorou em quase 30% depois que implementei isso.

    
por Seann 15.10.2017 / 05:12