API
Загружайте список на сервер, проверяйте отдельные адреса и сообщайте о том, что блокирует сервер. Каждый вызов — JSON по HTTPS.
Плагин MCSec
The easiest way: one plugin for Spigot, Paper, BungeeCord, Waterfall and Velocity. It downloads the list, refuses listed addresses at login and reports join floods, ping floods, chat spam bots and crash books by itself.
- Скачать MCSec.jar and put it in the
pluginsfolder of your proxy (best) or server. - Start the server once, then put your API key in
plugins/MCSec/config.properties(api-key=). - Run
/mcsec reload./mcsec statusshows the list size and what was refused and reported.
Commands (permission mcsec.admin): /mcsec status, /mcsec reload, /mcsec check <player|ip>, /mcsec report <player|ip> <category> [evidence]. Set mode=log to only watch for a while before refusing anyone.
Ваш ключ
Используйте API-ключ сервера из Панели → API и интеграции. Пользоваться MCSec могут только серверы, опубликованные на CraftRank. Отправляйте ключ в заголовке, а не в адресе:
X-API-Key: your-32-character-key
Двадцать неверных ключей с одного адреса за десять минут — и адрес ждёт десять минут.
Загрузить список
GET https://craftrank.org/api/mcsec?a=blocklist&min=75
GET https://craftrank.org/api/mcsec?a=blocklist&min=60&format=txt
GET https://craftrank.org/api/mcsec?a=blocklist&category=crash-exploit
min is the lowest confidence to include, 40 to 100 (default 75). format=txt gives one address per line; IPv6 entries are /64 ranges. Pull at most once a minute on Free (every 15 seconds on Pro, every 10 on Network); every few minutes is enough for most servers. Firewall formats are under Форматы.
{"min":75,"count":2,"generated":1793567000,
"addresses":[{"ip":"203.0.113.7","ref":"MCT-7F3A9C","score":92,"category":"bot-join-flood","last":1793566880}, …]}
Проверить один адрес
GET https://craftrank.org/api/mcsec?a=check&ip=203.0.113.7
До 120 проверок в минуту. В ответе есть listed, score, ref и категории.
Сообщить об атакующем
POST https://craftrank.org/api/mcsec?a=report
ip=203.0.113.7&category=bot-join-flood&evidence=46 joins in 60 s with 46 names
Чтобы отправить много сразу, шлите до 100 за один вызов:
POST https://craftrank.org/api/mcsec?a=bulk
Content-Type: application/json
{"reports":[{"ip":"203.0.113.7","category":"crash-exploit","evidence":"oversized book packet, 2.1 MB","time":1793566880}]}
Сообщайте только о том, что ваш сервер заблокировал сам. Пишите доказательство в нескольких словах: что видели и сколько. Не вставляйте саму атаку (payload, строки эксплойтов), адреса, ссылки и e-mail — они удаляются, потому что доказательства публичны. Жалобы на один адрес и категорию в течение десяти минут считаются одной. До 2 000 жалоб в час на сервер. Собирайте жалобы и отправляйте их через bulk раз в несколько секунд, а не по вызову на жалобу: больше ~90 вызовов в минуту с одного адреса тормозит файрвол сайта.
Категории
| category | Название | Что это |
|---|---|---|
bot-join-flood | Наплыв ботов | Много фальшивых игроков заходят с одного адреса или диапазона. |
ping-flood | Флуд пингами и статусом | Пинги списка серверов сотни раз в секунду. |
query-flood | Флуд query-запросами | UDP-пакеты query для нагрузки или отражения трафика. |
ddos | Сетевой флуд (DDoS) | Сырой трафик, чтобы положить сервер. |
crash-exploit | Крэш-эксплойт | Пакеты для краша сервера: книги, NBT, чанки. |
packet-spam | Спам пакетами | Пакеты движения, чата или кликов намного выше нормы. |
login-brute-force | Подбор пароля при входе | Много неверных паролей в /login или /register. |
rcon-brute-force | Подбор пароля RCON | Подбор пароля на порту RCON. |
server-scanner | Сканер серверов | Боты, прочёсывающие интернет в поисках открытых серверов. |
port-scan | Сканирование портов | Проверка множества портов на одной машине. |
forwarding-bypass | Обход прокси | Прямой вход на бэкенд в обход BungeeCord или Velocity. |
remote-code | Попытка удалённого кода | Log4Shell и похожие нагрузки в никах или чате. |
chat-spam | Спам-боты в чате | Боты, которые сразу после входа пишут рекламу, ссылки или оскорбления. |
proxy-abuse | Злоупотребление открытым прокси или VPN | Выходные узлы для повторных атак или обхода банов. |
website-attack | Атака на сайт | Атаки на сайт, магазин или страницы голосования сервера. |
panel-attack | Атака на хостинг-панель | Подбор входа или эксплойты против игровых панелей. |
Как считается оценка
Каждый сервер, сообщивший об адресе за последние 30 дней, добавляет к его оценке. Сервер весит больше, когда другие серверы сообщают о тех же адресах (его доверие), когда он сообщал об адресе несколько раз и когда жалобы свежие; недельная жалоба весит вдвое меньше. Крэш-эксплойты и попытки удалённого кода весят больше, чем сканирование.
- Один сервер не может поднять адрес выше 55. Для отклонения нужно несколько серверов.
- Домашние и мобильные подключения остаются на 60 или ниже и покидают список через 3 дня без жалоб, потому что их адреса меняются.
- От 40 — в списке. От 75 отклоняется серверами с настройкой по умолчанию.
- Запись исчезает через 14 дней без жалоб.
Форматы
Добавьте format= к запросу списка. port=25565 ограничивает форматы файрвола одним портом.
| format | Что ты получаешь |
|---|---|
json | The default: every address with its reference, score, category and last report. |
txt | Один адрес на строку. |
csv | A spreadsheet: ip, ref, score, category, last_report. |
ipset | For ipset restore: sets mcsec (IPv4) and mcsec6 (IPv6). |
nftables | For nft -f: a table inet mcsec that drops listed addresses. |
iptables, ip6tables | For iptables-restore -n: a chain MCSEC; jump to it from INPUT. |
crowdsec | For cscli decisions import -i file.json: 24-hour bans. |
curl -s -H "X-API-Key: $KEY" "https://craftrank.org/api/mcsec?a=blocklist&min=75&format=nftables&port=25565" | nft -f -
Вызовы Pro и Network
These calls come with the paid plans.
GET https://craftrank.org/api/mcsec?a=history&ip=203.0.113.7 (Pro)
GET https://craftrank.org/api/mcsec?a=changes&since=0 (Network)
POST https://craftrank.org/api/mcsec?a=check_bulk {"ips":["203.0.113.7", …]} (Network, up to 500)
The changes feed returns addresses that joined or left the list, or crossed 75; pass the next number back as since. A call your plan does not include answers 402 plan_required.
Ошибки
401 bad_key, 403 not_active, 403 blocked, 400 bad_ip / bad_category / not_reportable (частные адреса, поисковики и Cloudflare никогда не попадают в список), 402 plan_required, 429 rate_limited с заголовком Retry-After.