Προστασία από επιθέσεις στο ssh

Αν υπάρχει ανάγκη να χρησιμοποιείτε ssh από διάφορες ip’s ( είσαστε διακοπές εεε? :Ρ ) και θέλετε να ξεμπερδεύετε μια και καλή από τις επιθέσεις στην υπηρεσία ssh, δημιουργήστε ένα cron job που να τρέχει το παρακάτω script κάθε λίγα λεπτά.
Αυτό που κάνει το script είναι να κοιτάει στο message log να απομονώνει όσες ip’s εμφανίζει το μήνυμα Invalid user πάνω από MAXCOUNT φορές.
Αν δεν έχετε ενεργοποιημένο το logrotate θα πρέπει να αδειάζεται χειροκίνητα το /etc/hosts.deny  γιατί πιθανόν να έχει μπλοκαριστεί πλήθος δυναμικών συνδέσεων και να μην μπορείτε να συνδεθείτε εύκολα αν το επιχειρήσετε από adsl σύνδεση.

#set MAXCOUNT to the maximum failures allowed before blacklisting
MAXCOUNT=5
#
# The three lines below put the leading lines in /etc/hosts.allow
# Note: This script overwrites the entire /etc/hosts.allow file.
#
echo ‘
# /etc/hosts.deny
# See man tcpd and man 5 hosts_access as well as /etc/hosts.allow
# for a detailed description.
http-rman : ALL EXCEPT LOCAL’ > /etc/hosts.deny
#
# Scan the /var/log/messages file for failed login attempts via ssh.
# Parse out the IP address, and count the failure occurances from that IP
# If the IP fails more than 5 times – deny further access
#
COUNT=0
LAST_IP=0.0.0.0
for IP in `/bin/grep sshd /var/log/messages | /bin/grep “Invalid user” | /bin/sed ‘s/^.*from *[a-z]*//’`; do
  if [ ${LAST_IP} == ${IP} ]; then
     let COUNT=${COUNT}+1
  else
     if [ ${COUNT} -ge ${MAXCOUNT} ]; then
         echo “ALL: ${LAST_IP}/32” >> /etc/hosts.deny
    #    echo “ALL: ${LAST_IP}/32”
     fi
     LAST_IP=${IP}
     COUNT=1
  fi
done