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.