Подсети облачного хостинга DigitalOcean (AS14061)
Подсети облачного хостинга DigitalOcean (AS14061) — Американский облачный хостинг с дата-центрами в США, Европе (Амстердам, Франкфурт, Лондон), Сингапуре и Индии. Мгновенное развертывание виртуальных серверов (Droplets) с почасовой оплатой делает DigitalOcean любимой площадкой разработчиков парсеров, автоматизаторов на Selenium/Playwright и прокси-ферм. Серверы DigitalOcean генерируют значительный объем несанкционированного сбора данных, кликфрода и сканирования портов.
1. Общие сведения и профиль сетевой активности
Диапазоны адресов закреплены за инфраструктурой AS14061 (DIGITALOCEAN-ASN). Входящий трафик из этих сетей исходит от серверных виртуальных машин (VPS), контейнеров и выделенных серверов. Живые пользователи интернета не используют серверные IP-адреса для веб-серфинга (за редким исключением частных VPN-туннелей). По статистике AntiBotCore WAF, свыше 90–95% запросов из подсетей DigitalOcean к публичным сайтам являются автоматизированными скриптами: парсерами цен конкурентов, скрейперами контента, краулерами на базе Selenium/Puppeteer, спам-ботами и сканерами уязвимостей.
Рекомендация по защите сайта:
Если ваш ресурс предназначен для конечных пользователей (e-commerce, медиа, доска объявлений) и не предоставляет публичный API для интеграций, ограничение доступа к данным подсетям снижает паразитную нагрузку на базу данных и веб-сервер на 30–70% без потерь в реальном трафике. Если вы используете собственные серверы в DigitalOcean для CRM или выгрузок, добавьте персональные IP в список исключений перед блокировкой.
2. Диапазоны IPv4 (CIDR)
Актуальный перечень IPv4-подсетей провайдера для добавления в правила блокировки или ограничения:
| Подсеть (CIDR) | Сетевая маска | Количество IP-адресов | Действие |
|---|---|---|---|
| 104.131.0.0/16 | 255.255.0.0 | 65 536 | |
| 104.236.0.0/16 | 255.255.0.0 | 65 536 | |
| 104.248.0.0/16 | 255.255.0.0 | 65 536 | |
| 128.199.0.0/16 | 255.255.0.0 | 65 536 | |
| 134.209.0.0/16 | 255.255.0.0 | 65 536 | |
| 138.68.0.0/16 | 255.255.0.0 | 65 536 | |
| 138.197.0.0/16 | 255.255.0.0 | 65 536 | |
| 142.93.0.0/16 | 255.255.0.0 | 65 536 | |
| 143.110.128.0/17 | 255.255.128.0 | 32 768 | |
| 143.198.0.0/16 | 255.255.0.0 | 65 536 | |
| 143.244.128.0/17 | 255.255.128.0 | 32 768 | |
| 146.190.0.0/16 | 255.255.0.0 | 65 536 | |
| 157.230.0.0/16 | 255.255.0.0 | 65 536 | |
| 157.245.0.0/16 | 255.255.0.0 | 65 536 | |
| 159.65.0.0/16 | 255.255.0.0 | 65 536 | |
| 159.89.0.0/16 | 255.255.0.0 | 65 536 | |
| 159.203.0.0/16 | 255.255.0.0 | 65 536 | |
| 161.35.0.0/16 | 255.255.0.0 | 65 536 | |
| 164.90.128.0/17 | 255.255.128.0 | 32 768 | |
| 164.92.64.0/18 | 255.255.192.0 | 16 384 | |
| 165.22.0.0/16 | 255.255.0.0 | 65 536 | |
| 165.227.0.0/16 | 255.255.0.0 | 65 536 | |
| 167.99.0.0/16 | 255.255.0.0 | 65 536 | |
| 174.138.0.0/16 | 255.255.0.0 | 65 536 | |
| 178.62.0.0/16 | 255.255.0.0 | 65 536 | |
| 188.166.0.0/16 | 255.255.0.0 | 65 536 | |
| 188.226.128.0/17 | 255.255.128.0 | 32 768 | |
| 206.189.0.0/16 | 255.255.0.0 | 65 536 | |
| 207.154.192.0/18 | 255.255.192.0 | 16 384 | |
| 209.97.128.0/17 | 255.255.128.0 | 32 768 | |
| 46.101.0.0/16 | 255.255.0.0 | 65 536 | |
| 64.225.0.0/16 | 255.255.0.0 | 65 536 | |
| 64.226.64.0/18 | 255.255.192.0 | 16 384 | |
| 64.227.0.0/16 | 255.255.0.0 | 65 536 | |
| 67.205.128.0/17 | 255.255.128.0 | 32 768 | |
| 68.183.0.0/16 | 255.255.0.0 | 65 536 |
3. Диапазоны IPv6 (CIDR)
Для веб-серверов с активированным IPv6 добавьте следующие диапазоны:
| IPv6 подсеть (CIDR) | Длина префикса | Действие |
|---|---|---|
| 2604:a880::/32 | 32 бит | |
| 2a03:b0c0::/32 | 32 бит |
4. Проверка подлинности (Reverse DNS / PTR)
PTR-записи хостов DigitalOcean заканчиваются на *.digitalocean.com. Живые пользователи никогда не выходят в интернет напрямую из дата-центров DigitalOcean, за исключением пользователей личных VPN-серверов. Рекомендуется отправлять весь трафик с AS14061 на интерактивную проверку (JS-Challenge / CAPTCHA).
# 1. Получаем PTR запись проверяемого IP:
$ dig -x <IP-АДРЕС> +short
# 2. Проверяем прямую A-запись полученного хоста:
$ dig <ПОЛУЧЕННЫЙ_ХОСТ> +short
# Если возвращенный хост оканчивается на *.digitalocean.com — запрос исходит из серверного пула хостинга.
# Любой поисковый User-Agent (YandexBot, Googlebot) с такого адреса является подделкой (spoofing).
5. Конфигурации для веб-серверов
Используйте готовые директивы для блокировки или ограничения трафика с подсетей данного хостинга:
# Поместите в блок server { ... } или location / { ... }
deny 104.131.0.0/16;
deny 104.236.0.0/16;
deny 104.248.0.0/16;
deny 128.199.0.0/16;
deny 134.209.0.0/16;
deny 138.68.0.0/16;
deny 138.197.0.0/16;
deny 142.93.0.0/16;
deny 143.110.128.0/17;
deny 143.198.0.0/16;
deny 143.244.128.0/17;
deny 146.190.0.0/16;
deny 157.230.0.0/16;
deny 157.245.0.0/16;
deny 159.65.0.0/16;
deny 159.89.0.0/16;
deny 159.203.0.0/16;
deny 161.35.0.0/16;
deny 164.90.128.0/17;
deny 164.92.64.0/18;
deny 165.22.0.0/16;
deny 165.227.0.0/16;
deny 167.99.0.0/16;
deny 174.138.0.0/16;
deny 178.62.0.0/16;
deny 188.166.0.0/16;
deny 188.226.128.0/17;
deny 206.189.0.0/16;
deny 207.154.192.0/18;
deny 209.97.128.0/17;
deny 46.101.0.0/16;
deny 64.225.0.0/16;
deny 64.226.64.0/18;
deny 64.227.0.0/16;
deny 67.205.128.0/17;
deny 68.183.0.0/16;
deny 2604:a880::/32;
deny 2a03:b0c0::/32;
# Или через модуль geo (контекст http):
geo $is_bad_digitalocean {
default 0;
104.131.0.0/16 1;
104.236.0.0/16 1;
104.248.0.0/16 1;
128.199.0.0/16 1;
134.209.0.0/16 1;
138.68.0.0/16 1;
138.197.0.0/16 1;
142.93.0.0/16 1;
143.110.128.0/17 1;
143.198.0.0/16 1;
# ...
}
<RequireAll>
Require all granted
Require not ip 104.131.0.0/16
Require not ip 104.236.0.0/16
Require not ip 104.248.0.0/16
Require not ip 128.199.0.0/16
Require not ip 134.209.0.0/16
Require not ip 138.68.0.0/16
Require not ip 138.197.0.0/16
Require not ip 142.93.0.0/16
Require not ip 143.110.128.0/17
Require not ip 143.198.0.0/16
Require not ip 143.244.128.0/17
Require not ip 146.190.0.0/16
Require not ip 157.230.0.0/16
Require not ip 157.245.0.0/16
Require not ip 159.65.0.0/16
Require not ip 159.89.0.0/16
Require not ip 159.203.0.0/16
Require not ip 161.35.0.0/16
Require not ip 164.90.128.0/17
Require not ip 164.92.64.0/18
Require not ip 165.22.0.0/16
Require not ip 165.227.0.0/16
Require not ip 167.99.0.0/16
Require not ip 174.138.0.0/16
Require not ip 178.62.0.0/16
Require not ip 188.166.0.0/16
Require not ip 188.226.128.0/17
Require not ip 206.189.0.0/16
Require not ip 207.154.192.0/18
Require not ip 209.97.128.0/17
Require not ip 46.101.0.0/16
Require not ip 64.225.0.0/16
Require not ip 64.226.64.0/18
Require not ip 64.227.0.0/16
Require not ip 67.205.128.0/17
Require not ip 68.183.0.0/16
Require not ip 2604:a880::/32
Require not ip 2a03:b0c0::/32
</RequireAll>
(ip.src in {
104.131.0.0/16 104.236.0.0/16 104.248.0.0/16 128.199.0.0/16
134.209.0.0/16 138.68.0.0/16 138.197.0.0/16 142.93.0.0/16
143.110.128.0/17 143.198.0.0/16 143.244.128.0/17 146.190.0.0/16
157.230.0.0/16 157.245.0.0/16 159.65.0.0/16 159.89.0.0/16
159.203.0.0/16 161.35.0.0/16 164.90.128.0/17 164.92.64.0/18
165.22.0.0/16 165.227.0.0/16 167.99.0.0/16 174.138.0.0/16
178.62.0.0/16 188.166.0.0/16 188.226.128.0/17 206.189.0.0/16
207.154.192.0/18 209.97.128.0/17 46.101.0.0/16 64.225.0.0/16
64.226.64.0/18 64.227.0.0/16 67.205.128.0/17 68.183.0.0/16
2604:a880::/32 2a03:b0c0::/32
})
Создайте Custom Rule в Cloudflare Dashboard: Security → WAF → Custom rules с действием: Managed Challenge (Капча) или Block (Блокировка).
# Блокировка входящего трафика подсетей хостинга:
iptables -A INPUT -s 104.131.0.0/16 -j DROP
iptables -A INPUT -s 104.236.0.0/16 -j DROP
iptables -A INPUT -s 104.248.0.0/16 -j DROP
iptables -A INPUT -s 128.199.0.0/16 -j DROP
iptables -A INPUT -s 134.209.0.0/16 -j DROP
iptables -A INPUT -s 138.68.0.0/16 -j DROP
iptables -A INPUT -s 138.197.0.0/16 -j DROP
iptables -A INPUT -s 142.93.0.0/16 -j DROP
iptables -A INPUT -s 143.110.128.0/17 -j DROP
iptables -A INPUT -s 143.198.0.0/16 -j DROP
iptables -A INPUT -s 143.244.128.0/17 -j DROP
iptables -A INPUT -s 146.190.0.0/16 -j DROP
# Для массовой загрузки сотен подсетей без замедления используйте ipset:
# ipset create digitalocean hash:net
# iptables -I INPUT -m set --match-set digitalocean src -j DROP