Geoip tabanlı ssh bağlantısı filitreleme

Gelen ssh bağlantı istekleri belirtilen ülke dışından yapılmasına göre filitrelemek için aşağıdaki yöntemi izleyebilirsiniz:

  1. Kurulu değilse tcpd ve geoip-bin paketlerini kurun.

  2. Aşağıdaki betiği /usr/bin/sshfilter konumuna koyalım.

# UPPERCASE space-separated country codes to ACCEPT
ALLOW_COUNTRIES="TR"
LOGDENY_FACILITY="authpriv.notice"
sleep 1

if cat /var/log/blockip.log | grep $1 &>/dev/null ;then
    logger -p $LOGDENY_FACILITY "DENY sshd connection from $1 (cached)"
    sleep 3
    exit 1
fi

if [[ $# -ne 1 ]]; then
  echo "Usage:  `basename $0` <ip>" 1>&2
  exit 0 # return true in case of config issue
fi

if [[ "`echo $1 | grep ':'`" != "" ]] ; then
  COUNTRY=`/usr/bin/geoiplookup6 "$1" | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1`
else
  COUNTRY=`/usr/bin/geoiplookup "$1" | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1`
fi
[[ $COUNTRY = "IP Address not found" || $ALLOW_COUNTRIES =~ $COUNTRY ]] && RESPONSE="ALLOW" || RESPONSE="DENY"

if [[ "$RESPONSE" == "ALLOW" ]] ; then
  exit 0
else
  logger -p $LOGDENY_FACILITY "$RESPONSE sshd connection from $1 ($COUNTRY)"
  echo $1 >> /var/log/blockip.log
  sleep 3
  exit 1
fi

  1. /etc/hosts.deny dosyasının içine şunu yazalım:
sshd: ALL
  1. /etc/hosts.allow içine şunu yazalım:
sshd: ALL: aclexec /usr/bin/sshfilter %a
  1. ssh servisini yeniden başlatalım.
service ssh restart

/var/log/blockip.log dosyası içerisine yazdığınız ip adreslerinden gelen bağlantılar engellenir.

4 Beğeni

Bu konu son yanıttan 10 gün sonra otomatik olarak kapatıldı. Yeni yanıt girilmesine izin verilmiyor.