📱 mobile443 - Фильтрация 443 порта по мобильным сетям РФ
📋 Содержание
- Назначение
- Принцип работы
- Системные требования
- Установка
- Проверка работы
- Мониторинг и логи
- Управление
- Удаление
- Настройка AS-списка
- Устранение неполадок
🎯 Назначение
Скрипт создает систему фильтрации входящих подключений на TCP/UDP порт 443 (HTTPS/QUIC), разрешая трафик только из мобильных сетей России (MTS, Beeline, MegaFon, Tele2, Yota и др.) и блокируя все остальные подключения.
- Защиты от ботов и сканеров из зарубежных дата-центров
- Ограничения доступа к сервисам только для мобильных абонентов РФ
- Снижения нагрузки от автоматических атак
⚙️ Принцип работы
- Сбор префиксов - ежедневно в 00:00 скрипт запрашивает у RIPEstat (статистика RIPE) все объявленные префиксы для указанных AS-номеров
- Фильтрация и валидация - собранные префиксы сортируются, проверяются на валидность
- Защита от ошибок - система не применит обновление, если префиксов слишком мало или их количество упало более чем на 30%
- Применение правил - создается ipset с подсетями, iptables цепочка FILTER_MOBILE_443, которая разрешает трафик только из этих подсетей
- Автоматическое восстановление - при загрузке системы применяется последний успешно загруженный кеш префиксов
RIPEstat API (список префиксов AS) → mobile443-update.sh → ipset → iptables
↓
/var/lib/mobile443/prefixes.txt (кеш)💻 Системные требования
- ОС: Ubuntu 18.04+, Debian 10+, CentOS 7+ (с поддержкой systemd)
- Ядро: с поддержкой ipset и iptables
- Память: от 256 MB RAM
- Диск: от 50 MB свободного места
- Зависимости: curl, jq, ipset, iptables, util-linux (flock)
🚀 Установка
1. Сохраните скрипт
Сохраните полный код скрипта (который начинается с #!/usr/bin/env bash) в файл:
sudo nano /usr/local/bin/mobile443-installer.sh
Вставьте код и сохраните (Ctrl+X, Y, Enter).
2. Сделайте скрипт исполняемым
sudo chmod +x /usr/local/bin/mobile443-installer.sh
3. Запустите установку
sudo /usr/local/bin/mobile443-installer.sh install
4. Что происходит при установке:
/opt/mobile443/- конфигурация (asns.conf)/var/lib/mobile443/- состояние (кеш префиксов, lock-файл)/usr/local/sbin/- исполняемые скрипты
mobile443-common.sh- общие функцииmobile443-update.sh- обновление списка префиксовmobile443-apply-cache.sh- применение кеша при загрузке
mobile443-update.service- разовое обновлениеmobile443-update.timer- ежедневное обновление в 00:00mobile443-apply.service- применение кеша при старте
✅ Запускается первое обновление
🔍 Проверка работы
После установки выполните следующие проверки:
Статус служб
# Статус таймера (должен быть active и waiting) systemctl status mobile443-update.timer # Статус последнего обновления systemctl status mobile443-update.service --no-pager # Статус службы применения кеша systemctl status mobile443-apply.service --no-pager
Проверка ipset
# Информация о множестве ipset list allowed_mobile_443 | head -20 # Количество подсетей (должно быть несколько тысяч) ipset list allowed_mobile_443 | grep -c "^[0-9]"
Проверка iptables
# Просмотр правил iptables -L FILTER_MOBILE_443 -n -v --line-numbers # Где применяется цепочка iptables -L INPUT -n -v | grep -A 2 FILTER_MOBILE_443 iptables -L FORWARD -n -v | grep -A 2 FILTER_MOBILE_443
Тестирование фильтрации
# С сервера, который НЕ в мобильной сети (например, зарубежный VPS): curl -I https://ваш-сервер.com # С мобильного телефона РФ (через мобильный интернет): curl -I https://ваш-сервер.com
📊 Мониторинг и логи
Просмотр логов обновлений
# Последние обновления journalctl -u mobile443-update.service -n 30 --no-pager # Следить за обновлениями в реальном времени journalctl -u mobile443-update.service -f # Логи применения кеша journalctl -u mobile443-apply.service -n 30
Статистика по трафику
# Сколько пакетов пропущено/заблокировано iptables -L FILTER_MOBILE_443 -n -v -x # Сброс счетчиков (если нужно) iptables -Z FILTER_MOBILE_443
Проверка кеша
# Размер кеша (количество подсетей) wc -l /var/lib/mobile443/prefixes.txt # Просмотр первых записей head -20 /var/lib/mobile443/prefixes.txt
🛠️ Управление
Ручное обновление списка префиксов
sudo systemctl start mobile443-update.service journalctl -u mobile443-update.service -f # следить за процессом
Применение кеша (если правила "слетели")
sudo systemctl start mobile443-apply.service
Временное отключение фильтрации (для отладки)
# Удалить правила из INPUT/FORWARD/DOCKER-USER (фильтрация отключится) sudo iptables -D INPUT -p tcp --dport 443 -j FILTER_MOBILE_443 sudo iptables -D INPUT -p udp --dport 443 -j FILTER_MOBILE_443 # Вернуть обратно sudo /usr/local/sbin/mobile443-apply-cache.sh
Полная перезагрузка правил
# Очистить и пересоздать всё sudo ipset destroy allowed_mobile_443 sudo ipset destroy allowed_mobile_443_tmp sudo /usr/local/sbin/mobile443-apply-cache.sh
🗑️ Удаление
sudo /usr/local/bin/mobile443-installer.sh remove
- Все systemd-юниты (mobile443-*)
- Все iptables правила и цепочки
- Все ipset множества
- Скрипты в /usr/local/sbin/
- Директории /opt/mobile443/ и /var/lib/mobile443/
⚙️ Настройка AS-списка
Список AS-номеров находится в /opt/mobile443/asns.conf
Текущий состав (по умолчанию):
- MTS (8359)
- Beeline (3216)
- MegaFon (31133, 8263, и др.)
- Tele2 (12958, 15378, и др.)
- Ростелеком (12389) - добавлен для расширения покрытия
- Yandex Cloud (205638)
- Другие мобильные операторы
Редактирование списка:
sudo nano /opt/mobile443/asns.conf
Формат: один AS-номер на строку, строки начинающиеся с # игнорируются.
echo "12345 # Новый оператор" | sudo tee -a /opt/mobile443/asns.conf
После изменения списка необходимо выполнить обновление:
sudo systemctl start mobile443-update.service journalctl -u mobile443-update.service -f
🔧 Устранение неполадок
Проблема: "Refusing update: too few prefixes"
Причина: API вернуло менее 500 префиксов (обычно проблема с сетью или API RIPE)
Решение:
# Проверить соединение с RIPE curl -I https://stat.ripe.net # Применить последний рабочий кеш sudo systemctl start mobile443-apply.service # Проверить логи ошибок journalctl -u mobile443-update.service -n 50
Проблема: "Refusing update: new prefix count dropped too much"
Причина: Количество префиксов упало более чем на 30% от предыдущего значения (защита от битого обновления)
Решение: Если изменение ожидаемое (например, удалили AS из списка), можно принудительно обновить:
# Удалить старый кеш и запустить обновление sudo rm /var/lib/mobile443/prefixes.txt sudo systemctl start mobile443-update.service
Проблема: Нет доступа с мобильных устройств
Причина: Ваш мобильный оператор не в списке AS или использует нестандартные префиксы
Решение:
- Узнать AS своего оператора: https://2ip.ru/whois/
- Добавить AS в
/opt/mobile443/asns.conf - Обновить список
Проблема: Docker контейнеры не могут принимать соединения
Решение: Скрипт автоматически добавляет правила в цепочку DOCKER-USER, если она существует. Проверьте:
# Убедиться, что правила есть iptables -L DOCKER-USER -n -v | grep FILTER_MOBILE_443 # Если нет - применить кеш заново sudo systemctl start mobile443-apply.service
Проблема: Не запускается таймер
# Проверить статус systemctl status mobile443-update.timer # Перезапустить таймер sudo systemctl restart mobile443-update.timer sudo systemctl daemon-reload
📝 Примечания
- Скрипт использует flock для предотвращения одновременных запусков
- Применяется защита от "пустого" обновления (минимум 500 префиксов)
- При падении числа префиксов >30% обновление отклоняется
- Кеш хранится в
/var/lib/mobile443/prefixes.txt - Все операции идемпотентны - можно запускать многократно