Awstats con autenticación y geolocalización de IPs

En el artículo sobre seguridad técnica en un sistema Ubuntu hablé por primera vez de awstat como herramienta para monitorizar los accesos a páginas web. Veamos como añadir restricciones de acceso y geolocalización de IPs.

La configuración base la podemos mejorar añadiendo autenticación, para esto tendremos que tener activos varios módulos de nuestro servidor apache:

a2enmod auth_basic
a2enmod authn_file
a2enmod authz_user

Editamos el fichero donde hayamos definido el dominio de nuestra página web, por ejemplo “/etc/apache2/sites-enabled/000-ejemplo.com” y debajo de:

ScriptAlias /cgi-bin/awstats.pl /usr/lib/cgi-bin/awstats.pl

Añadimos:

    <Directory /usr/lib/cgi-bin/awstats.pl>
        AllowOverride All
        Options FollowSymLinks
        Order allow,deny
        allow from all

        AuthName "Acceso restringido a Estadísticas"
        AuthType basic
        AuthUserFile /etc/awstats/htpasswd.ejemplo.com
        require valid-user
    </Directory>

De esta forma estamos indicando a Apache que queremos autenticar los usuarios que accedan a “awstats.pl” y que los usuarios/contraseñas los tiene que comprobar en el fichero “/etc/awstats/htpasswd.ejemplo.com”. Así que necesitamos crear este último fichero con los usuarios que necesitemos:

htpasswd -cm /etc/awstats/htpasswd.ejemplo.com usuario1
htpasswd -m /etc/awstats/htpasswd.ejemplo.com usuario2

Para mayor seguridad, en la configuración de awstats (p.ej. ‘/etc/awstats/awstats.ejemplo.com.conf’) indicamos que únicamente queremos que awstats se muestre a usuarios autenticados:

AllowAccessFromWebToAuthenticatedUsersOnly=1

Reiniciamos apache y ya tenemos restringido el acceso a awstats:

/etc/init.d/apache reload

Por otra parte, si queremos añadir geolocalización de IPs a awstats:

sudo -s
apt-get install liburi-perl libgeo-ip-perl
mkdir /usr/local/share/GeoIP
cd /usr/local/share/GeoIP
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz
gzip -d *

Y añadimos a la configuración de awstats (p.ej. ‘/etc/awstats/awstats.ejemplo.com.conf’):

LoadPlugin="geoip GEOIP_STANDARD /usr/local/share/GeoIP/GeoIP.dat"
LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /usr/local/share/GeoIP/GeoLiteCity.dat"
LoadPlugin="geoip_org_maxmind GEOIP_STANDARD /usr/local/share/GeoIP/GeoIPASNum.dat"

Listo una configuración modelo de awstats por si resulta de utilidad, donde también se incluyen secciones extra especialmente pensadas por si la página en cuestión es un wordpress:

LogFile="/var/log/apache2/vhosts/ejemplo.com.access.log"
LogFormat=1
DNSLookup=1
DirData="/var/lib/awstats/ejemplo.com/"
DirCgi="/cgi-bin"
DirIcons="/icon"
SiteDomain="ejemplo.com"
HostAliases="www.ejemplo.com" # Separated by spaces
AllowToUpdateStatsFromBrowser=1
AllowFullYearView=3
AllowAccessFromWebToAuthenticatedUsersOnly=1
SkipFiles="REGEX[^\/wp-admin] REGEX[^\/wp-includes\/wlwmanifest.xml] REGEX[^\/cgi-bin\/awstats.pl] REGEX[^\/icons] REGEX[^\/w00tw00t\.at\.ISC\.SANS\.DFind]"
SkipHosts="REGEX[^192\.168\.]"
NotPageList="css js class gif jpg jpeg png bmp ico swf" # what file extensions will not be counted as Page Views or Downloads
#LevelForWormsDetection=2 # Full detection (decreases speed by 15%
#ShowWormsStats=HBL

# "/js/awstats_misc_tracker.js" needs to be added to webpage
# More info: http://awstats.sourceforge.net/docs/awstats_config.html#MiscTrackerUrl
MiscTrackerUrl="/js/awstats_misc_tracker.js"
ShowScreenSizeStats=1
ShowMiscStats=1

# Show domains/country chart
# # Context: Web, Streaming, Mail, Ftp
# # Default: PHB, Possible column codes: PHB
ShowDomainsStats=UVPHB


LoadPlugin="tooltips" # Help
LoadPlugin="decodeutfkeys" # makes it possible to show keywords and keyphrases correctly using national characters
LoadPlugin="geoip GEOIP_STANDARD /usr/local/share/GeoIP/GeoIP.dat"
LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /usr/local/share/GeoIP/GeoLiteCity.dat"
LoadPlugin="geoip_org_maxmind GEOIP_STANDARD /usr/local/share/GeoIP/GeoIPASNum.dat"


ExtraSectionName1="Wordpress entries"
# Code 304: Not modified
# Code 200: OK
ExtraSectionCodeFilter1="200 304"
# http://domain/?p=100
ExtraSectionCondition1="URL,\/"
ExtraSectionFirstColumnTitle1="Entry ID"
ExtraSectionFirstColumnValues1="QUERY_STRING,p=([^&]+)"
ExtraSectionFirstColumnFormat1="www.ejemplo.com/?p=%s"
##
## U = Unique visitors
## V = Visits
## P = Number of pages
## H = Number of hits (or mails)
## B = Bandwith (or total mail size for mail logs)
## L = Last access date
## E = Entry pages
## X = Exit pages
## C = Web compression (mod_gzip,mod_deflate) 
ExtraSectionStatTypes1=UVPHBL
ExtraSectionAddAverageRow1=0
ExtraSectionAddSumRow1=1
MaxNbOfExtra1=10
MinHitExtra1=1

ExtraSectionName2="Wordpress pages"
ExtraSectionCodeFilter2="200 304"
ExtraSectionCondition2="URL,\/"
ExtraSectionFirstColumnTitle2="Page ID"
ExtraSectionFirstColumnValues2="QUERY_STRING,page_id=([^&]+)"
ExtraSectionFirstColumnFormat2="www.ejemplo.com/?page_id=%s"
ExtraSectionStatTypes2=UVPHBL
ExtraSectionAddAverageRow2=0
ExtraSectionAddSumRow2=1
MaxNbOfExtra2=10
MinHitExtra2=1


ExtraSectionName3="Top downloads"
ExtraSectionCodeFilter3="200 304"
ExtraSectionCondition3="URL,(.*((\.diff)|(\.doc)|(\.pdf)|(\.rtf)|(\.sh)|(\.tgz)|(\.zip)|(\.bz2)|(\.gz)))"
ExtraSectionFirstColumnTitle3="Download"
ExtraSectionFirstColumnValues3="URL,(.*)"
ExtraSectionFirstColumnFormat3="%s"
ExtraSectionStatTypes3=HBL
ExtraSectionAddAverageRow3=0
ExtraSectionAddSumRow3=1
MaxNbOfExtra3=10
MinHitExtra3=1

Leave a Reply

Your email address will not be published. Required fields are marked *