Установка GeoIP и Mod_GeoIP для Apache CentOS/RedHat/Fedora

Установка GeoIP и Mod_GeoIP для Apache CentOS/RedHat/Fedora

GeoIP — это продукт Maxmind который состоит из нескольких сопутствующих товаров. GeoIP преподносит информацию о конкретном IP-адрес. ГеоИП  выполняет поиск по своим базам данных по данному хосту или IP-адресу и возвращает информацию о стране, где находиться IP, город, провайдер и другую информацию.

В своей статье «Установка GeoIP и Mod_GeoIP для Apache CentOS/RedHat/Fedora» хочу рассказать как установить GeoIP для Apache CentOS/RedHat/Fedora на примере CentOS 6.6.

Способ 1 — установка из пакетов.

Для начала обновим ОС:

# yum update

Переходим в папку и выкачиваем все необходимое. Скачиваем GeoIP и GeoIpCity:

# mkdir /usr/share/GeoIP && cd /usr/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

Распаковываем скачанные архивы:

# gunzip GeoIP.dat.gz && gunzip GeoLiteCity.dat.gz

— Устанавливаем PHP с поддержкой геоИП:

# yum install php-devel php-pear php-devel GeoIP GeoIP-devel GeoIP-data zlib-devel mod_geoip -y

— Можно еще одним способом установить, используя pecl.

Устанавливаем дополнительные пакеты для работы:

# yum install php-pear pecl -y

Обновляем содержимое репозитория:

# pecl channel-update pecl.php.net

Устанавливаем сам geoIP:

# pecl install geoip

Прописываем ( добавляем) библиотеку в php.ini:

echo "extension=geoip.so" > /etc/php.d/geoip.ini

И перезапускаем апач:

# service httpd restart

Способ 2 — установка из исходного кода.

Вы должны знать, как установить модули Apache и пересобрать Apache с помощью APXS.

Переходим в директорию и скачиваем файлы:

# cd /usr/local/src/ && wget http://www.maxmind.com/download/geoip/api/c/GeoIP-latest.tar.gz && tar -xzf GeoIP-latest.tar.gz && cd /usr/local/src/GeoIP-*

Устанавливаем утилитку ( можно и без нее):

# yum install libtool

И запускаем ее:

# libtoolize -f

Конфигурим:

# ./configure

Можно собрать rpm пакет, вы можете ознакомиться:

Создание RPM или DEB пакетов с Checkinstall в Linux

Но я покажу как произвести установку дальше:

# make && make check && make install

Скачиваем модуль для апача — mod_geoip, распаковываем его и переходим в папку для конфигурирования:

# cd /usr/local/src/ && wget http://www.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2-latest.tar.gz && tar -xzf mod_geoip2-*.tar.gz && cd /usr/local/src/mod_geoip2_*

Выполняем команду для установки данного модуля:

# apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c

Получил ошибку:

-bash: apxs: command not found

Исправление следующее:

# yum install httpd-devel

Теперь стоит выполнить:

# chmod 755 /usr/lib64/httpd/modules/mod_geoip.so

Вывело напоминание, что необходимо прописать ( активировать) geoip в конфигурационом файле httpd.conf. Для этого, выполняем следующие действия:

# vim /etc/httpd/conf/httpd.conf

И прописываем следующие строки:

[...]

<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPScanProxyHeaders On
GeoIPDBFile /usr/local/share/geoip/GeoIP.dat
GeoIPDBFile /usr/local/share/geoip/GeoLiteCity.dat
</IfModule>

[...]

Последние штрихи, нужно скачать и положить в папку базы:

# cd /usr/local/share && mkdir geoip && cd geoip && wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz && gunzip GeoIP.dat.gz

и

# cd /usr/local/share/geoip && wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz && gunzip GeoLiteCity.dat.gz

Перезапускаем апач:

# service httpd restart

И переходим к тестированию.

Проверка работы GeoIP для Apache CentOS/RedHat/Fedora.

1. Можно создать файл:

# echo "<?php phpinfo (); ?>" > /home/captain/php_info.php

/home/captain — это путь, который прописан в виртуальном хосте для моего сайта.

2. Можно выполнить команду:

# php -m | grep geo

3. Создаем пхп скрипт:

# vim /home/captain/geoip_test.php

Вставляем:

<pre>
Whence are you come to here?:
<?php
$country_code = apache_note("GEOIP_COUNTRY_CODE");
$region = apache_note("GEOIP_REGION");
$country_name = apache_note("GEOIP_COUNTRY_NAME");
$city = apache_note("GEOIP_CITY");
echo "Country code: " . $country_code . "\n";
echo "Region: " . $region . "\n";
echo "Name of country: " . $country_name . "\n";
echo "City: " . $city . "\n";
?>
</pre>

Обновление баз для GeoIP

Создаем скрипт для обновления ( так будет проще всего):

# vim /home/captain/update_geoip_db.sh

Вставляем:

#!/bin/bash
cd /usr/local/share/geoip/
mv GeoIP.dat GeoIP.dat.old && mv GeoLiteCity.dat GeoLiteCity.dat.old
/usr/bin/wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
/usr/bin/wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoIP.dat.gz && gunzip GeoLiteCity.dat.gz

Делаем его исполняемым:

# chmod 750 /home/captain/update_geoip_db.sh

Добавляем данный скрипт в crontab на выполнение,  каждые 1-е  число месяца:

# crontab -e
0 0 1 * * /home/captain/update_geoip_db.sh

Блокировка стран

Создаем файл ( если его нет) .htaccess. И для примера, например, я хочу заблокировать всех пользователей с Белорусии и Румынии, то прописываем данные строки в файл:

GeoIPEnable On
GeoIPDBFile /usr/share/geoip/GeoIP.dat
SetEnvIf GEOIP_COUNTRY_CODE RO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RL BlockCountry
Deny from env=BlockCountry

PS: можно так же вставлять в конфиг с apache. В раздел <IfModule mod_geoip.c>

Перенаправление пользователей по странам

Ниже пример кода будет перенаправлять пользователей на основе кода страны. Если вы хотите перенаправить всех пользователей в зависимости от страны, то нужно использовать mod_rewrite в сочетании с mod_geoip в вашем файле .htaccess. Для примера, я сделаю перенаправление для Украины и Польши следующим образом:

RewriteEngine on
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(UA|PL)$
RewriteRule ^(.*)$ http://www.linux-notes.org/UA_PL/$1 [L]

Вот и все, моя тема «Установка GeoIP и Mod_GeoIP для Apache CentOS/RedHat/Fedora» завершена.

 

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.