Поиск по сайту:

Как установить Mod_GeoIP для Apache в RHEL и CentOS


Mod_GeoIP — это модуль Apache, который можно использовать для передачи географического местоположения IP посетителя на веб-сервер Apache. Этот модуль позволяет определить страну, организацию и местоположение посетителя. Это особенно полезно для подачи геообъявлений, целевого контента, борьбы со спамом, обнаружения мошенничества, перенаправления. /Блокировка посетителей в зависимости от их страны и многое другое.

Модуль GeoIP позволяет системным администраторам перенаправлять или блокировать веб-трафик в зависимости от географического местоположения клиента. Географическое местоположение определяется по IP-адресу клиента.

Mod_GeoIP имеет две разные версии: одна бесплатная, а другая платная и использует MaxMind GeoIP/GeoCity. базы данных.

  1. Бесплатная версия. В бесплатной версии базы данных Город и Страна доступны с точностью 99,5 %.
  2. Платная версия: В платной версии вы получите обе базы данных с точностью 99,8 % и более подробную информацию о IP-адресе.

Если вы хотите узнать больше о различиях между бесплатной и платной версией, посетите Maxmind.com.

В этой статье объясняется, как настроить и установить модуль Mod_GeoIP для Apache в RHEL и CentOS с использованием репозитория EPEL с утилитой менеджера пакетов YUM.

Мы предполагаем, что у вас уже есть работающая система RHEL и CentOS с работающим LAMP (Linux, Apache). , MySQL, и PHP). Если нет, то прочтите наши статьи, где мы показали установку обеих операционных систем с помощью LAMP.

Установка RHEL/CentOS
  1. Установка RHEL 7 и CentOS 7 Minimal.
  2. Установка RHEL 8 и CentOS 8 Minimal.
Настройка LAMP на RHEL/CentOS
  1. Как установить LAMP (Linux, Apache, MySQL, PHP) на RHEL и CentOS 7
  2. Как установить Apache, MySQL/MariaDB и PHP на RHEL и CentOS 8

Включите репозиторий EPEL в RHEL и CentOS.

По умолчанию mod_Geoip недоступен в официальном репозитории RHEL/CentOS, поэтому нам необходимо установить и включить сторонний репозиторий EPEL.

yum install epel-release
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm  [On RHEL 8]

Установите Mod_GeoIP в RHEL и CentOS.

После включения репозитория EPEL в вашей системе вы можете просто установить mod_geoip, выполнив следующую команду с их пакетами зависимостей.

yum install mod_geoip GeoIP GeoIP-devel GeoIP-data zlib-devel

Загрузите последнюю версию базы данных географических городов и стран.

Рекомендуем загрузить последнюю версию Geo City и базы данных стран, чтобы оставаться в курсе событий.

cd /usr/share/GeoIP/
mv GeoIP.dat GeoIP.dat_org
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
gunzip GeoLite2-Country.tar.gz
gunzip GeoLite2-City.tar.gz

Включить Mod_GeoIP в Apache

После установки модуля откройте и отредактируйте основной файл конфигурации модуля с помощью текстового редактора командной строки, такого как vi, и активируйте модуль на уровне сервера, как показано в приведенном ниже фрагменте.

vi /etc/httpd/conf.d/geoip.conf

Установите для строки GeoIPEnable значение Выкл. на Вкл.. Также убедитесь, что вы добавили абсолютный путь к файлу базы данных GeoIP.

<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat MemoryCache
</IfModule>

Перезапустите службу Apache, чтобы отразить изменения.

systemctl restart httpd
OR
service httpd restart

Однако не рекомендуется включать модуль GeoIP на весь сервер. Вам следует включать модуль GeoIP только в блоках или , где вы фактически выполняете перенаправление или блокировку трафика.

Тестирование модуля Mod_GeoIP

Чтобы проверить правильность работы модуля mod_geoip с Apache, нам нужно создать PHP файл с именем testgeoip.php в Apache . корневой каталог (например, /var/www/html).

vi /var/www/html/testgeoip.php

Вставьте в него следующий фрагмент php-кода.

<html>
<head>
  <title>What is my IP address - determine or retrieve my IP address</title>
 </head>
<body>
 <?php
     if (getenv(HTTP_X_FORWARDED_FOR)) {
        $pipaddress = getenv(HTTP_X_FORWARDED_FOR);
        $ipaddress = getenv(REMOTE_ADDR);
        echo "Your Proxy IP address is : ".$pipaddress. " (via $ipaddress) " ;
    } else {
        $ipaddress = getenv(REMOTE_ADDR);
        echo "Your IP address is : $ipaddress";
    }
    $country = getenv(GEOIP_COUNTRY_NAME);
    $country_code = getenv(GEOIP_COUNTRY_CODE);
    echo "<br/>Your country : $country ( $country_code ) ";
?>
</body>
</html>

Теперь попробуйте вызвать файл с помощью веб-браузера (например, http://localhost/testgeoip.php). Вы получите данные о своем IP-адресе и стране.

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

База данных GeoIP обновляется в начале каждого месяца. Поэтому очень важно поддерживать базу данных GeoIP в актуальном состоянии. Чтобы загрузить последнюю версию базы данных, используйте следующую команду.

cd /usr/share/GeoIP/
mv GeoIP.dat GeoIP.dat_org
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
gunzip GeoLite2-Country.tar.gz
gunzip GeoLite2-City.tar.gz

Автоматическое обновление базы данных GeoIP

Мы написали небольшой скрипт, который будет автоматически загружать последнюю версию базы данных GeoIP каждый месяц. Просто поместите любой из следующих скриптов в папку /etc/cron.monthly.

Скрипт 1
Automatic GeoIP Database Update
#!/bin/sh
cd /usr/share/GeoIP
mv GeoIP.dat GeoIP.dat_org
wget -q http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
gzip -d -f GeoLite2-Country.tar.gz
Скрипт 2
#!/bin/sh

GEOIP_MIRROR="http://geolite.maxmind.com/download/geoip/database"
GEOIPDIR=/usr/share/GeoIP
TMPDIR=

DATABASES="GeoLiteCity GeoLiteCountry/GeoIP asnum/GeoIPASNum GeoIPv6"

if [ -d "${GEOIPDIR}" ]; then
        cd $GEOIPDIR
        if [ -n "${DATABASES}" ]; then
                TMPDIR=$(mktemp -d geoipupdate.XXXXXXXXXX)

                echo "Updating GeoIP databases..."

                for db in $DATABASES; do
                        fname=$(basename $db)

                        wget --no-verbose -t 3 -T 60 "${GEOIP_MIRROR}/${db}.dat.gz" -O "${TMPDIR}/${fname}.dat.gz"
                        gunzip -fdc "${TMPDIR}/${fname}.dat.gz" > "${TMPDIR}/${fname}.dat"
                        mv "${TMPDIR}/${fname}.dat" "${GEOIPDIR}/${fname}.dat"
                        chmod 0644 "${GEOIPDIR}/${fname}.dat"
                done
                [ -d "${TMPDIR}" ] && rm -rf $TMPDIR
        fi
fi

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

Приведенный ниже пример кода перенаправляет пользователей на основе кода страны, для которого мы установили значение AS (Азия). Таким образом, вы можете перенаправить любых пользователей на основе кода их округа.

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

Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AS$
RewriteRule ^(.*)$ https://linux-console.net$1 [R,L]

Блокировка пользователей по стране

В этом примере пользователи будут блокироваться на основе кода страны, установленного GeoIP. В приведенном ниже примере блокируются пользователи из стран AS (Азия) и США (США).

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

SetEnvIf GEOIP_COUNTRY_CODE AS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry
... place more countries here

Deny from env=BlockCountry

Разрешение пользователей в зависимости от страны

В приведенном ниже примере будут разрешены только пользователи из нижеуказанных стран.

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

SetEnvIf GEOIP_COUNTRY_CODE AS AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
... place more countries here

Deny from all
Allow from env=AllowCountry

Дополнительную информацию о mod_geoip и его использовании можно найти по адресу http://www.maxmind.com/app/mod_geoip. Если у вас возникли проблемы с настройкой модуля mod_geoip, сообщите нам об этом в комментариях и не забудьте поделиться им с друзьями.