mod_geoip

Обновление 05.09.2019. Модуль mod_geoip объявлен разработчиком устаревшим, выпущен новый модуль mod_maxminddb. Об установке и настройке данного модуля подготовлена соответствующая заметка.

В данной статье будет вестись рассказ о настройке модуля mod_geoip для веб-сервера Apache. Данный модуль позволяет определить географическое положение подключившегося к серверу клиента по IP адресу. Зачем это нужно? Ответ прост — появляется возможность фильтрации клиентов по странам или автоматом направлять клиента на нужную часть сайта. К примеру, на данном сайте используется модуль, который сохраняет информацию о посетителях, оставивших комментарий (геоположение, ОС, браузер). Вот информацию о геоположении как раз предоставляет модуль mod_geoip.

На момент написания статьи в портах доступна версия mod_geoip 1.2.8. Ставим модуль.
  1. # cd /usr/ports/www/mod_geoip2
  2. # make install clean
После установки модуля необходимо проверить включен ли он, для этого нужно посмотреть в главном конфигурационном файле Apache присутствует ли строчка:
  1. LoadModule geoip_module       libexec/apache22/mod_geoip.so
Для настройки модуля доступны следующие директивы:
  • GeoIPEnable bool — включить/отключить модуль. Включить/отключить модуль можно в любом месте конфигурационного файла, даже в .htaccess. Возможные значения On или Off.
  • GeoIPDBFile dbpath [flag] — путь к файлу с базой данных о географической информации. По умолчанию файл находится здесь: /usr/local/share/GeoIP/GeoIP.dat. Опциональное поле flag позволяет установить дополнительные режимы работы с базой данных (на данный момент модуль не позволяет комбинировать опции):
    • Standard — не использовать кеширование, таким образом используется меньше памяти. Является значением по молчанию.
    • MemoryCache — кешировать данные в памяти, влечет за собой большее потребление памяти. Рекомендуется использовать с небольшими базами днных.
    • MMapCache — делает тоже самое, что и MemoryCache, только для загрузки в память базы данных используется системный вызов mmap.
    • CheckCache — заставляет модуль проверять базу данных на предмет изменения (обновления). Если база данных была изменена, то модуль перезагрузит ее. Если опция не используется, то при изменении базы данных необходимо перезагружать Apache.
    • IndexCache — частичное кеширование данных из базы данных, то есть будут кешироваться данные, к которым были обращения. Рекомендуется использовать с большими базами данных.
  • GeoIPEnableUTF8 bool — предоставлять информацию о геоположении в кодировке UTF-8 вместо ISO-8859-1. Возможные значения On или Off.
  • GeoIPOutput param — параметр определяет, куда помещать информацию о геположении. Возможные значения:
    • Notes — только в таблицу уведомлений Apache (например, доступ из PHP можно осуществить через функцию apache_note).
    • Env — только в переменные окружения. Полный список переменных, которые добавляет модуль, есть на официальном сайте (ссылка на него в конце статьи).
    • All — комбинация Notes и Env. Является значением по умолчанию.
  • GeoIPScanProxyHeaders bool — проверять запрос на наличие заголовков (заголовки указаны в порядке проверки их модулем) HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR, X-Forwarded-For, HTTP_REMOTE_ADDR. Если такие присутствуют, то использовать IP адрес из них для определения местоположения. Возможные значения On или Off.
  • GeoIPUseLastXForwardedForIP bool — используется, если включен параметр GeoIPScanProxyHeaders. В заголовках (указанных выше), может быть указан не один IP адрес, а список IP адресов. Если такой присутствует, то по умолчанию используется первый IP адрес. С включением данного параметра будет использоваться последний IP адрес из списка. Возможные значения On или Off.
Не полный список переменных, которые добавляет модуль в переменные окружения и в таблицу уведомлений Apache:
  • GEOIP_ADDR — IP адрес, который использовался для поиска в базе данных.
  • GEOIP_CONTINENT_CODE — 2-х буквенный код континента, к которой принадлежит IP адрес (пример, EU для Европы).
  • GEOIP_COUNTRY_CODE — 2-х буквенных код страны (например, RU для России)
  • GEOIP_COUNTRY_NAME — полное название страны (например, Russian Federation для России)
Пример конфигурации модуля:
  1. <IfModule geoip_module>
  2.   GeoIPEnable Off
  3.   GeoIPDBFIle /usr/local/share/GeoIP/GeoIP.dat Standard
  4.   GeoIPEnableUTF8 Off
  5.   GeoIPOutput Env
  6.   GeoIPScanProxyHeaders On
  7.   GeoIPUseLastXForwardedForIP On
  8. </IfModule>
Модуль достаточно сконфигурировать глобально, а потом подключать его в нужных виртуальных хостах, например, таким образом:
  1. <VirtualHost *:80>
  2. <IfModule geoip_module>
  3.   GeoIPEnable On
  4.   <FilesMatch "\.(gif|jpe?g|png|ico|bmp|css|xml|pdf|rar|jar|js|doc|docx|html|xhtml)$">
  5.     GeoIPEnable Off
  6.   </FilesMatch>
  7. </IfModule>
  8. </VirtualHost>
При желании там же можно изменить и другие параметры. Как говорилось ранее с помощью информации от модуля можно ограничивать доступ по странам, например для какого-нибудь виртуального хоста можно сделать:
  1. <IfModule geoip_module>
  2.   GeoIPEnable On
  3.  
  4. <IfModule setenvif_module>
  5.   SetEnvIf GEOIP_COUNTRY_CODE RU AllowCountry
  6. </IfModule>
  7.  
  8.   <Directory /path/to/www>
  9.     Deny from all
  10.     Allow from env=AllowCountry
  11.   </Directory>
  12. </IfModule>
Таким образом, доступ к сайту будет только у жителей РФ. На официальном сайте можно скачать дополнительные базы (например, чтобы, отображался еще и город). Актуальные базы данных стоят денег, но устаревшые на месяц выкладываются бесплатно. Подключаются базы добавлением еще одной директивы GeoIPDBFile в конфиге. На этом все, если есть пожелания или замечания, то прошу их озвучить в комментарии. Вопросы, связанные с работой модуля задавать в форуме.

Добавить комментарий

Filtered text

CAPTCHA
Этот вопрос предназначен для предотвращения автоматизированной обработки форм.
Fill in the blank.