#!/bin/bash source setup/functions.sh echo Installing geoip packages... # geo ip filtering of ssh entries, based on https://www.axllent.org/docs/ssh-geoip/#disqus_thread # Install geo ip lookup tool gunzip -c tools/goiplookup.gz > /usr/local/bin/goiplookup chmod +x /usr/local/bin/goiplookup # check that GeoLite2-Country.mmdb is older then 2 months, to not hit the server too often if [[ ! -d /usr/share/GeoIP || ! -f /usr/share/GeoIP/GeoLite2-Country.mmdb || $(find "/usr/share/GeoIP/GeoLite2-Country.mmdb" -mtime +60 -print) ]]; then echo updating goiplookup database goiplookup db-update else echo skipping goiplookup database update fi # Install geo ip filter script cp -f setup/geoipfilter.sh /usr/local/bin/ chmod +x /usr/local/bin/geoipfilter.sh # Install only if not yet exists, to keep user config if [ ! -f /etc/geoiplookup.conf ]; then cp -f conf/geoiplookup.conf /etc/ fi # Add sshd entries for hosts.deny and hosts.allow if grep -Fxq "sshd: ALL" /etc/hosts.deny then echo hosts.deny already configured else sed -i '/sshd: /d' /etc/hosts.deny echo "sshd: ALL" >> /etc/hosts.deny fi if grep -Fxq "sshd: ALL: aclexec /usr/local/bin/geoipfilter.sh %a %s" /etc/hosts.allow then echo hosts.allow already configured else # Make sure all sshd lines are removed sed -i '/sshd: /d' /etc/hosts.allow echo "sshd: ALL: aclexec /usr/local/bin/geoipfilter.sh %a %s" >> /etc/hosts.allow fi # geo ip filtering of nginx access log, based on # https://guides.wp-bullet.com/blocking-country-and-continent-with-nginx-geoip-on-ubuntu-18-04/ ## Install geo ip lookup files # check that GeoIP.dat is older then 2 months, to not hit the server too often if [[ ! -d /usr/share/GeoIP || ! -f /usr/share/GeoIP/GeoIP.dat || $(find "/usr/share/GeoIP/GeoIP.dat" -mtime +60 -print) ]]; then echo updating GeoIP database # Move old file away if it exists if [ -f "/usr/share/GeoIP/GeoIP.dat" ]; then mv -f /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat.bak fi hide_output wget -P /usr/share/GeoIP/ https://dl.miyuru.lk/geoip/maxmind/country/maxmind.dat.gz if [ -f "/usr/share/GeoIP/maxmind.dat.gz" ]; then gunzip -c /usr/share/GeoIP/maxmind.dat.gz > /usr/share/GeoIP/GeoIP.dat rm -f /usr/share/GeoIP/maxmind.dat.gz else echo Did not correctly download maxmind geoip country database fi # If new file is not created, move the old file back if [ ! -f "/usr/share/GeoIP/GeoIP.dat" ]; then echo GeoIP.dat was not created if [ -f "/usr/share/GeoIP/GeoIP.dat.bak" ]; then mv /usr/share/GeoIP/GeoIP.dat.bak /usr/share/GeoIP/GeoIP.dat fi fi # Move old file away if it exists if [ -f "/usr/share/GeoIP/GeoIPCity.dat" ]; then mv -f /usr/share/GeoIP/GeoIPCity.dat /usr/share/GeoIP/GeoIPCity.dat.bak fi hide_output wget -P /usr/share/GeoIP/ https://dl.miyuru.lk/geoip/maxmind/city/maxmind.dat.gz if [ -f "/usr/share/GeoIP/maxmind.dat.gz" ]; then gunzip -c /usr/share/GeoIP/maxmind.dat.gz > /usr/share/GeoIP/GeoIPCity.dat rm -f /usr/share/GeoIP/maxmind.dat.gz else echo Did not correctly download maxmind geoip city database fi # If new file is not created, move the old file back if [ ! -f "/usr/share/GeoIP/GeoIPCity.dat" ]; then echo GeoIPCity.dat was not created if [ -f "/usr/share/GeoIP/GeoIPCity.dat.bak" ]; then mv /usr/share/GeoIP/GeoIPCity.dat.bak /usr/share/GeoIP/GeoIPCity.dat fi fi else echo skipping GeoIP database update fi