НейроАгент

Блокировка российских IP в htaccess: Полное руководство

Как скрыть спорные материалы от российских пользователей с помощью htaccess. Настройка блокировки IP и кастомных сообщений для образовательного сайта.

Как через .htaccess скрыть от российских IP-адресов спорные ссылки и материалы на образовательном сайте?

У меня есть образовательный сайт с материалами по изучению английского и других языков. Я прочитал о судебном преследовании сайта, который публиковал материалы о Британском совете и его языковых экзаменах. Как можно скрыть ссылки на такой сайт и страницы с упоминаниями от пользователей из России? Как настроить .htaccess для отображения сообщения “Данный материал/ссылка недоступны на территории Российской Федерации” при попытке доступа с российских IP-адресов?

НейроАгент

Вы можете использовать .htaccess файл для блокировки доступа пользователей из России к определенным материалам на вашем образовательном сайте. Настройте блокировку российских IP-адресов и создайте кастомное сообщение об ограничении доступа для защиты юридической безопасности вашего сайта.

Содержание

Настройка .htaccess для блокировки российских IP

Для блокировки доступа пользователей из России вам необходимо добавить соответствующие директивы в ваш .htaccess файл. Основной подход использует блокировку по диапазонам IP-адресов, принадлежащих России.

Базовая конфигурация

apache
# Блокировка всех IP-адресов из России
Order Allow,Deny
Deny from 5.0.0.0/8
Deny from 37.0.0.0/8
Deny from 77.0.0.0/8
Deny from 79.0.0.0/8
Deny from 80.0.0.0/8
Deny from 81.0.0.0/8
Deny from 82.0.0.0/8
Deny from 83.0.0.0/8
Deny from 84.0.0.0/8
Deny from 85.0.0.0/8
Deny from 86.0.0.0/8
Deny from 87.0.0.0/8
Deny from 88.0.0.0/8
Deny from 89.0.0.0/8
Deny from 90.0.0.0/8
Deny from 91.0.0.0/8
Deny from 92.0.0.0/14
Deny from 93.0.0.0/8
Deny from 94.0.0.0/8
Deny from 95.0.0.0/8
Deny from 96.0.0.0/8
Deny from 97.0.0.0/8
Deny from 98.0.0.0/8
Deny from 99.0.0.0/8
Deny from 100.0.0.0/8
Deny from 101.0.0.0/8
Deny from 102.0.0.0/8
Deny from 103.0.0.0/8
Deny from 104.0.0.0/8
Deny from 105.0.0.0/8
Deny from 106.0.0.0/8
Deny from 107.0.0.0/8
Deny from 108.0.0.0/8
Deny from 109.0.0.0/8
Deny from 110.0.0.0/8
Deny from 111.0.0.0/8
Deny from 112.0.0.0/8
Deny from 113.0.0.0/8
Deny from 114.0.0.0/8
Deny from 115.0.0.0/8
Deny from 116.0.0.0/8
Deny from 117.0.0.0/8
Deny from 118.0.0.0/8
Deny from 119.0.0.0/8
Deny from 120.0.0.0/8
Deny from 121.0.0.0/8
Deny from 122.0.0.0/8
Deny from 123.0.0.0/8
Deny from 124.0.0.0/8
Deny from 125.0.0.0/8
Deny from 126.0.0.0/8
Deny from 127.0.0.0/8
Deny from 128.0.0.0/16
Deny from 129.0.0.0/8
Deny from 130.0.0.0/8
Deny from 131.0.0.0/8
Deny from 132.0.0.0/8
Deny from 133.0.0.0/8
Deny from 134.0.0.0/8
Deny from 135.0.0.0/8
Deny from 136.0.0.0/8
Deny from 137.0.0.0/8
Deny from 138.0.0.0/8
Deny from 139.0.0.0/8
Deny from 140.0.0.0/8
Deny from 141.0.0.0/8
Deny from 142.0.0.0/8
Deny from 143.0.0.0/8
Deny from 144.0.0.0/8
Deny from 145.0.0.0/8
Deny from 146.0.0.0/8
Deny from 147.0.0.0/8
Deny from 148.0.0.0/8
Deny from 149.0.0.0/8
Deny from 150.0.0.0/8
Deny from 151.0.0.0/8
Deny from 152.0.0.0/8
Deny from 153.0.0.0/8
Deny from 154.0.0.0/8
Deny from 155.0.0.0/8
Deny from 156.0.0.0/8
Deny from 157.0.0.0/8
Deny from 158.0.0.0/8
Deny from 159.0.0.0/8
Deny from 160.0.0.0/8
Deny from 161.0.0.0/8
Deny from 162.0.0.0/8
Deny from 163.0.0.0/8
Deny from 164.0.0.0/8
Deny from 165.0.0.0/8
Deny from 166.0.0.0/8
Deny from 167.0.0.0/8
Deny from 168.0.0.0/8
Deny from 169.0.0.0/8
Deny from 170.0.0.0/8
Deny from 171.0.0.0/8
Deny from 172.0.0.0/12
Deny from 173.0.0.0/8
Deny from 174.0.0.0/8
Deny from 175.0.0.0/8
Deny from 176.0.0.0/8
Deny from 177.0.0.0/8
Deny from 178.0.0.0/8
Deny from 179.0.0.0/8
Deny from 180.0.0.0/8
Deny from 181.0.0.0/8
Deny from 182.0.0.0/8
Deny from 183.0.0.0/8
Deny from 184.0.0.0/8
Deny from 185.0.0.0/8
Deny from 186.0.0.0/8
Deny from 187.0.0.0/8
Deny from 188.0.0.0/8
Deny from 189.0.0.0/8
Deny from 190.0.0.0/8
Deny from 191.0.0.0/8
Deny from 192.0.0.0/8
Deny from 193.0.0.0/8
Deny from 194.0.0.0/8
Deny from 195.0.0.0/8
Deny from 80.0.0.0/11
Deny from 81.0.0.0/8
Deny from 82.0.0.0/8
Deny from 83.0.0.0/8
Deny from 84.0.0.0/8
Deny from 85.0.0.0/8
Deny from 86.0.0.0/8
Deny from 87.0.0.0/8
Deny from 88.0.0.0/8
Deny from 89.0.0.0/8
Deny from 90.0.0.0/8
Deny from 91.0.0.0/8
Deny from 92.0.0.0/14
Deny from 93.0.0.0/8
Deny from 94.0.0.0/8
Deny from 95.0.0.0/8
Deny from 96.0.0.0/8
Deny from 97.0.0.0/8
Deny from 98.0.0.0/8
Deny from 99.0.0.0/8
Deny from 100.0.0.0/8
Deny from 101.0.0.0/8
Deny from 102.0.0.0/8
Deny from 103.0.0.0/8
Deny from 104.0.0.0/8
Deny from 105.0.0.0/8
Deny from 106.0.0.0/8
Deny from 107.0.0.0/8
Deny from 108.0.0.0/8
Deny from 109.0.0.0/8
Deny from 110.0.0.0/8
Deny from 111.0.0.0/8
Deny from 112.0.0.0/8
Deny from 113.0.0.0/8
Deny from 114.0.0.0/8
Deny from 115.0.0.0/8
Deny from 116.0.0.0/8
Deny from 117.0.0.0/8
Deny from 118.0.0.0/8
Deny from 119.0.0.0/8
Deny from 120.0.0.0/8
Deny from 121.0.0.0/8
Deny from 122.0.0.0/8
Deny from 123.0.0.0/8
Deny from 124.0.0.0/8
Deny from 125.0.0.0/8
Deny from 126.0.0.0/8
Deny from 127.0.0.0/8
Allow from all

Упрощенный подход с использованием GeoIP

Если ваш хостинг поддерживает модуль GeoIP, можно использовать более эффективный метод:

apache
# Использование GeoIP модуля для блокировки России
<IfModule mod_geoip.c>
    GeoIPEnable On
    GeoIPDBFile /path/to/GeoIP.dat
    
    <FilesMatch "\.(php|html|htm)$">
        SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
        Order allow,deny
        Allow from all
        Deny from env=BlockCountry
    </FilesMatch>
</IfModule>

Важно: Для работы этого метода необходимо установить и настроить модуль GeoIP на вашем сервере. По данным Hostinger, этот подход более эффективен для блокировки целых стран.


Создание кастомного сообщения об ограничении

Чтобы показать пользователю из России понятное сообщение вместо стандартной ошибки 403, используйте директиву ErrorDocument.

Конфигурация с кастомным сообщением

apache
# Блокировка российских IP с кастомным сообщением
ErrorDocument 403 /access-restricted.html

<IfModule mod_rewrite.c>
    RewriteEngine On
    
    # Проверка на российский IP и перенаправление
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^RU$
    RewriteRule .* - [F]
</IfModule>

# Альтернативный метод без GeoIP
Order Allow,Deny
Deny from 5.0.0.0/8
Deny from 37.0.0.0/8
Deny from 77.0.0.0/8
Deny from 79.0.0.0/8
Deny from 80.0.0.0/8
Deny from 81.0.0.0/8
Deny from 82.0.0.0/8
Deny from 83.0.0.0/8
Deny from 84.0.0.0/8
Deny from 85.0.0.0/8
Deny from 86.0.0.0/8
Deny from 87.0.0.0/8
Deny from 88.0.0.0/8
Deny from 89.0.0.0/8
Deny from 90.0.0.0/8
Deny from 91.0.0.0/8
Deny from 92.0.0.0/14
Deny from 93.0.0.0/8
Deny from 94.0.0.0/8
Deny from 95.0.0.0/8
Deny from 96.0.0.0/8
Deny from 97.0.0.0/8
Deny from 98.0.0.0/8
Deny from 99.0.0.0/8
Deny from 100.0.0.0/8
Deny from 101.0.0.0/8
Deny from 102.0.0.0/8
Deny from 103.0.0.0/8
Deny from 104.0.0.0/8
Deny from 105.0.0.0/8
Deny from 106.0.0.0/8
Deny from 107.0.0.0/8
Deny from 108.0.0.0/8
Deny from 109.0.0.0/8
Deny from 110.0.0.0/8
Deny from 111.0.0.0/8
Deny from 112.0.0.0/8
Deny from 113.0.0.0/8
Deny from 114.0.0.0/8
Deny from 115.0.0.0/8
Deny from 116.0.0.0/8
Deny from 117.0.0.0/8
Deny from 118.0.0.0/8
Deny from 119.0.0.0/8
Deny from 120.0.0.0/8
Deny from 121.0.0.0/8
Deny from 122.0.0.0/8
Deny from 123.0.0.0/8
Deny from 124.0.0.0/8
Deny from 125.0.0.0/8
Deny from 126.0.0.0/8
Deny from 127.0.0.0/8
Deny from 128.0.0.0/16
Deny from 129.0.0.0/8
Deny from 130.0.0.0/8
Deny from 131.0.0.0/8
Deny from 132.0.0.0/8
Deny from 133.0.0.0/8
Deny from 134.0.0.0/8
Deny from 135.0.0.0/8
Deny from 136.0.0.0/8
Deny from 137.0.0.0/8
Deny from 138.0.0.0/8
Deny from 139.0.0.0/8
Deny from 140.0.0.0/8
Deny from 141.0.0.0/8
Deny from 142.0.0.0/8
Deny from 143.0.0.0/8
Deny from 144.0.0.0/8
Deny from 145.0.0.0/8
Deny from 146.0.0.0/8
Deny from 147.0.0.0/8
Deny from 148.0.0.0/8
Deny from 149.0.0.0/8
Deny from 150.0.0.0/8
Deny from 151.0.0.0/8
Deny from 152.0.0.0/8
Deny from 153.0.0.0/8
Deny from 154.0.0.0/8
Deny from 155.0.0.0/8
Deny from 156.0.0.0/8
Deny from 157.0.0.0/8
Deny from 158.0.0.0/8
Deny from 159.0.0.0/8
Deny from 160.0.0.0/8
Deny from 161.0.0.0/8
Deny from 162.0.0.0/8
Deny from 163.0.0.0/8
Deny from 164.0.0.0/8
Deny from 165.0.0.0/8
Deny from 166.0.0.0/8
Deny from 167.0.0.0/8
Deny from 168.0.0.0/8
Deny from 169.0.0.0/8
Deny from 170.0.0.0/8
Deny from 171.0.0.0/8
Deny from 172.0.0.0/12
Deny from 173.0.0.0/8
Deny from 174.0.0.0/8
Deny from 175.0.0.0/8
Deny from 176.0.0.0/8
Deny from 177.0.0.0/8
Deny from 178.0.0.0/8
Deny from 179.0.0.0/8
Deny from 180.0.0.0/8
Deny from 181.0.0.0/8
Deny from 182.0.0.0/8
Deny from 183.0.0.0/8
Deny from 184.0.0.0/8
Deny from 185.0.0.0/8
Deny from 186.0.0.0/8
Deny from 187.0.0.0/8
Deny from 188.0.0.0/8
Deny from 189.0.0.0/8
Deny from 190.0.0.0/8
Deny from 191.0.0.0/8
Deny from 192.0.0.0/8
Deny from 193.0.0.0/8
Deny from 194.0.0.0/8
Deny from 195.0.0.0/8
Deny from 80.0.0.0/11
Deny from 81.0.0.0/8
Deny from 82.0.0.0/8
Deny from 83.0.0.0/8
Deny from 84.0.0.0/8
Deny from 85.0.0.0/8
Deny from 86.0.0.0/8
Deny from 87.0.0.0/8
Deny from 88.0.0.0/8
Deny from 89.0.0.0/8
Deny from 90.0.0.0/8
Deny from 91.0.0.0/8
Deny from 92.0.0.0/14
Deny from 93.0.0.0/8
Deny from 94.0.0.0/8
Deny from 95.0.0.0/8
Deny from 96.0.0.0/8
Deny from 97.0.0.0/8
Deny from 98.0.0.0/8
Deny from 99.0.0.0/8
Deny from 100.0.0.0/8
Deny from 101.0.0.0/8
Deny from 102.0.0.0/8
Deny from 103.0.0.0/8
Deny from 104.0.0.0/8
Deny from 105.0.0.0/8
Deny from 106.0.0.0/8
Deny from 107.0.0.0/8
Deny from 108.0.0.0/8
Deny from 109.0.0.0/8
Deny from 110.0.0.0/8
Deny from 111.0.0.0/8
Deny from 112.0.0.0/8
Deny from 113.0.0.0/8
Deny from 114.0.0.0/8
Deny from 115.0.0.0/8
Deny from 116.0.0.0/8
Deny from 117.0.0.0/8
Deny from 118.0.0.0/8
Deny from 119.0.0.0/8
Deny from 120.0.0.0/8
Deny from 121.0.0.0/8
Deny from 122.0.0.0/8
Deny from 123.0.0.0/8
Deny from 124.0.0.0/8
Deny from 125.0.0.0/8
Deny from 126.0.0.0/8
Deny from 127.0.0.0/8
Allow from all

Создание страницы с сообщением об ограничении

Создайте файл access-restricted.html в корне вашего сайта:

html
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Доступ ограничен</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            margin: 0;
            background-color: #f5f5f5;
        }
        .container {
            text-align: center;
            padding: 40px;
            background: white;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
            max-width: 500px;
        }
        .icon {
            font-size: 48px;
            margin-bottom: 20px;
        }
        h1 {
            color: #333;
            margin-bottom: 15px;
        }
        p {
            color: #666;
            line-height: 1.6;
            margin-bottom: 20px;
        }
        .back-link {
            color: #0066cc;
            text-decoration: none;
        }
        .back-link:hover {
            text-decoration: underline;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="icon">🔒</div>
        <h1>Доступ ограничен</h1>
        <p>
            <strong>Данный материал/ссылка недоступны на территории Российской Федерации</strong><br><br>
            К сожалению, доступ к запрошенному ресурсу ограничен в соответствии с требованиями законодательства.
        </p>
        <a href="/" class="back-link">← Вернуться на главную страницу</a>
    </div>
</body>
</html>

Совет: Как отмечает Super User, такой подход позволяет вежливо информировать пользователей о причинах блокировки, что улучшает пользовательский опыт.


Блокировка конкретных страниц и ссылок

Если вам нужно блокировать доступ только к определенным страницам или материалам, а не ко всему сайту, используйте более точечные настройки.

Блокировка конкретных директорий

apache
# Блокировка доступа к определенной директории для российских IP
<Directory "/path/to/controversial-materials">
    Order Allow,Deny
    Deny from 5.0.0.0/8
    Deny from 37.0.0.0/8
    Deny from 77.0.0.0/8
    # ... другие диапазоны IP для России
    Allow from all
    ErrorDocument 403 /access-restricted.html
</Directory>

Блокировка по URL-шаблону

apache
# Блокировка страниц, содержащих определенные ключевые слова
RewriteEngine On
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^RU$
RewriteRule ^(british-council|ielts|toefl) - [F]
ErrorDocument 403 /access-restricted.html

Блокировка ссылок на внешний сайт

apache
# Блокировка прямых ссылок на британский совет
RewriteEngine On
RewriteCond %{HTTP_REFERER} britishcouncil\.ru [NC,OR]
RewriteCond %{HTTP_REFERER} ielts\.ru [NC,OR]
RewriteCond %{HTTP_REFERER} toefl\.ru [NC]
RewriteRule .* - [F]
ErrorDocument 403 /access-restricted.html

Проверка и тестирование настроек

После настройки .htaccess важно проверить корректность работы блокировки.

Проверка IP-адреса

Используйте онлайн-сервисы для проверки вашего IP-адреса:

Тестирование блокировки

  1. С российского IP-адреса:

    • Попробуйте доступ к заблокированным страницам
    • Убедитесь, что отображается кастомное сообщение
  2. С IP-адреса из другой страны:

    • Проверьте, что доступ к материалам не ограничен
    • Убедитесь, что сайт работает в обычном режиме

Отладка проблем

Если блокировка не работает:

apache
# Включение логирования отладки
LogLevel debug

# Проверка синтаксиса htaccess
apache2ctl -t

Важно: Как указано в InMotion Hosting, обязательно проверяйте синтаксис файла .htaccess после внесения изменений, чтобы избежать ошибок сервера.


Альтернативные методы защиты

Помимо .htaccess существуют и другие способы ограничения доступа.

PHP-блокировка

Создайте файл geoip_check.php:

php
<?php
// Проверка IP-адреса и перенаправление
function isRussianIP($ip) {
    // Список диапазонов IP для России
    $russian_ranges = [
        '5.0.0.0/8', '37.0.0.0/8', '77.0.0.0/8', // и т.д.
    ];
    
    foreach ($russian_ranges as $range) {
        if (ip_in_range($ip, $range)) {
            return true;
        }
    }
    return false;
}

function ip_in_range($ip, $range) {
    // Реализация проверки IP в диапазоне
    // ...
}

if (isRussianIP($_SERVER['REMOTE_ADDR'])) {
    header('HTTP/1.0 403 Forbidden');
    include 'access-restricted.html';
    exit;
}
?>

JavaScript-проверка (менее надежный)

javascript
// Клиентская проверка (дополняет серверную)
fetch('https://ipapi.co/json/')
    .then(response => response.json())
    .then(data => {
        if (data.country === 'RU') {
            document.body.innerHTML = `
                <div style="text-align: center; padding: 50px;">
                    <h2>Доступ ограничен</h2>
                    <p>Данный материал недоступен на территории Российской Федерации</p>
                    <a href="/">Вернуться на главную</a>
                </div>
            `;
        }
    })
    .catch(error => console.error('IP check failed:', error));

Источники

  1. How to use .htaccess to block Russian IP addresses? - Super User
  2. Block Country IPs From Your Site Using htaccess | InMotion Hosting
  3. Block Blog Spammers & Hostile Servers in Russia With Apache Web Server .htaccess IP Blocklist - WizCrafts
  4. How to block visitors from countries using htaccess - Hostinger
  5. How to Allow or Block Visitors from Specific Countries Using .htaccess - HostAdvice
  6. apache - Block both the Russian Federation and Ukraine Countries from accessing my websites - Stack Overflow
  7. Crucial - Block IP Addresses and Countries using .htaccess
  8. Blocking a country’s IP ranges in .htaccess | Web Hosting Hub
  9. How can I deny from a certain IP address but still show a custom error page with Apache2? - Server Fault
  10. htaccess IP blocking with custom 403 Error not working - Server Fault

Заключение

  • Настройте .htaccess с полным списком российских IP-диапазонов для эффективной блокировки доступа
  • Создайте дружелюбное сообщение об ограничении вместо стандартной ошибки 403 для улучшения пользовательского опыта
  • Блокируйте только необходимые материалы, а не весь сайт, чтобы сохранить доступность образовательного контента для других пользователей
  • Регулярно обновляйте IP-списки, так как они могут меняться со временем
  • Тестируйте настройки на разных IP-адресах для гарантии корректной работы
  • Рассмотрите альтернативные методы блокировки через PHP или JavaScript для дополнительной защиты

Эти меры помогут вам соблюсти юридические требования и защитить ваш образовательный сайт от возможных проблем с доступом к спорным материалам на территории Российской Федерации.