hAuthD — авторизационный сервер для Lineage II (en, ru)
hAuthD — альтернативный авторизационный сервер для Lineage II с расширенной функциональностью. Умеет одновременно работать с «PTS» и некоторыми L2J-серверами. Авторизационные данные хранятся в базе данных MSSQL.
Особенности:
- Динамические IP у игровых серверов (случайные адреса из списка, привязка к IP пользователя, автоматическая перезагрузка).
- Прокси-серверы в списке серверов со своими именами и статусами.
- Одновременное использование PTS и L2J серверов с одним авторизационным сервером и с единой базой учетных записей. Переход с PTS на L2J без необходимости конвертирования базы данных lin2db.
- Привязка учетных записей к IP.
- Полноценная защита от перебора паролей (AntiBrute).
- Надежное хранение паролей с использованием MD5 или SHA1.
- Пароль администратора с привязкой по IP (дает возможность зайти в игру любой учетной записью с обходом всех ограничений).
- Режим «тест» (ограниченный доступ к игровым серверам).
- Относительная устойчивость к DDOS.
- Определение реальных IP при работе через специальные внешние шлюзы.
Последняя версия (2.7.0.146):
http://hauthd.org/hAuthD.zip
Опциональная защита игровых серверов (hGuard)
hGuard - DLL, которая находится в папке с игрой и взаимодействует с hAuthD. DLL надежно шифрует авторизационные пакеты и передает на сервер дополнительную информацию: список обнаруженных запрещенных программ (читов), контрольные суммы (CRC32) некоторых файлов клиента, число запущенных копий игры, уникальный идентификатор компьютера (hardware key).
Основные возможности:
- Наказание за использование запрещенных программ (L2Tower, L2Ext, L2Walker, L2Net, L2Control, ZRanger, L2PacketHack, Wicked Patcher, Hide Toolz и др.)
- Ограничение числа игровых окон
- Запрет на модификацию указанных файлов клиента
- Блокировка компьютеров по уникальным идентификаторам (hKey)
- Поиск учетных записей одного пользователя по hKey
- Привязка учетных записей к hKey
Защита не работает с игровым сервером и не шифрует игровой трафик. DLL не защищает игровой сервер от использования каких-либо багов, а только выявляет у пользователей конкретные программы и передает информацию серверу hAuthD (сервер принимает решения в зависимости от настроек). Защита передает информацию только в момент авторизации, а во время игры уже действует автономно (контролирует запущенные процессы, предотвращает эмуляцию нажатий клавиш и при необходимости завершает работу клиента).
За каждый чит игроку начисляются штрафные баллы (штраф зависит от типа программы и устанавливается администратором).
В стандартном режиме работы сервер начисляет штрафы и пускает в игру (игрок не знает о том, был обнаружен чит или нет). Учетная запись блокируется, когда сумма штрафов достигает установленного лимита. Блокировка происходит не сразу, а с задержкой (задержка устанавливается администратором, но не может быть меньше часа).
В альтернативном режиме работы сервер блокирует вход в игру при обнаружении читов и добавляет компьютер игрока во временный черный список (список очищается только при перезагрузке сервера). Также возможно добавление компьютеров нарушителей в постоянный черный список.
DLL привязывается ко внешнему IP авторизационного сервера (число игровых серверов не ограничено).
Стоимость DLL для одного домена: 40 000 ₽
Почта: hint.ru@gmail.com
Защита обновлена 3 декабря 2018.
Конфигурация (hAuthD.ini)
Сервер загружает настройки из файла hAuthD.ini только в момент запуска. После изменения параметров требуется перезапуск программы.
Секция L2J
IP — список адресов L2J-серверов.
Возможно использование масок, возможно перечисление нескольких адресов через запятую, возможно использование символа * (любой адрес).
Параметр позволяет определить программе тип подключаемого сервера и отправить правильный пакет "приветствия".
Protocol — версия внутреннего протокола (для взаимодействия авторизационного сервера с игровыми).
FixedPorts (0 или 1) — передавать клиентам порт, считанный из базы данных (lin2db.server), или порт, полученный от игрового сервера (0).
Секция Log
Отвечает за ведение логов.
Auth (0 или 1) — сохранять результаты авторизации в файлы.
Guard (0 или 1) — сохранять сообщения защиты в файлы.
All (0 или 1) — сохранять в файлы все сообщения из окна программы.
DB (0 или 1) — сохранять в БД информацию о входе в игру.
Если параметр DB имеет значение 1, то требуется наличие следующей таблицы:
USE [lin2db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[hauthd_log](
[time] [datetime] NOT NULL,
[account] [varchar](14) NOT NULL,
[ip] [varchar](15) NOT NULL,
[hkey] [varchar](16)
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
Секция Online
Multiplier — множитель онлайна (например, 1.5).
Онлайн указывается в списке серверов, который передается клиентам.
UserCount — заполнять или нет (0) таблицу user_count, как это делает стандартный авторизационный сервер.
Значение отличное от нуля обозначает интервал в минутах.
Interval — интервал в секундах между запросами онлайна у игровых серверов.
Секция Admin
Password — универсальный пароль, позволяющий войти в игру любой учетной записью с обходом всех ограничений (бан, привязка по IP, защита и т.д.).
IP — список IP-адресов (или масок) для которых разрешено использование универсального пароля (для разделения адресов используется запятая).
Секция Adv
EULA (0 или 1) — отображать (1) или нет (0) пользовательское соглашение (отключение может приводить к конфликтам на некоторых серверах).
Test (0 или 1) — вход в игру разрешен всем (0) или только избранным учетным записям (1) из списка Test_IDs.
Помимо списка Test_IDs учитывается значение поля login_flag из таблицы user_account (вход разрешен, если login_flag имеет значение 16).
TestServers — id тестовых серверов через запятую.
Позволяет скрыть некоторые сервера от обычных пользователей. Аналог — значение 16 в поле kind таблицы server. Работает независимо от глобального режима Test.
C4 (0 или 1) — режим совместимости с С4 клиентом.
Не забудьте изменить параметр BlowfishKey в секции Main.
Необходимо использовать клиент, который поддерживает чистый C4 протокол авторизации!
MaxConnectionsPerIP — ограничение на число одновременных соединений с одного IP к серверу авторизации.
Ограничение не на ИГРУ, а только на АВТОРИЗАЦИЮ. Соединение продолжается с момента нажатия кнопки login и до выбора сервера из списка включительно.
AntiDOS (0 или 1) — если параметр установлен в единицу, то при резком повышении нагрузки (когда сервер уже не успевает обрабатывать все запросы) включается режим AntiDOS. Режим работает 5 минут и отключается (если атака продолжается, то включается опять).
В этом режиме таймауты сведены к минимуму, включаются жесткие ограничения как по времени обработки каждого запроса, так и по количеству одновременных запросов с IP-подсетей.
AntiBrute и AntiBruteIP (0 или 1) — включение секции AntiBrute и AntiBruteIP (защита от перебора паролей).
MD5Simple (0 или 1) — использовать md5 хеш вместо l2-хеша.
Никаких изменений в БД не требуется. Хеш пароля, как обычно, сравнивается с хешем из поля password, но вычисляется уже с использованием MD5. Для перехода на MD5 в данном случае пользователям необходимо вручную пересохранять пароли в MD5 формате через специальный скрипт на сайте. Предпочтительнее использовать функцию MD5Password из секции Ext (информация ниже). Опция MD5Simple скорее нужна для совместимости с другими авторизационными серверами.
SHA1 (0 или 1) — использовать SHA1 вместо l2-хеша.
Необходимо увеличить размер поля password до 20 байт.
Proxy — список адресов доверенных прокси-серверов (шлюзов).
Программа позволяет пропускать запросы через внешний сервер (например, через шлюз, защищающий от DDOS). Внешний сервер должен при этом передавать реальный IP пользователя в специальном пакете. Этот пакет должен быть отправлен первым и содержать 6 байт: 2 байта размера (всегда 0x06, 0x00) и 4 байта реального IP-адреса. На шлюзы не распространяется ограничение на число одновременных соединений.
AutoReloadFiles (0 или 1) — автоматическая перезагрузка файлов (Black_hKeys, Black_IPs, White_IDs, Test_IDs, ...) каждые 90 секунд.
AutoReloadServers (0 или 1) — автоматическая перезагрузка списка серверов (lin2db.dbo.server) каждые 90 секунд.
Секция Ext
Mask — включают привязку аккаунтов к IP (поле mask в таблице user_account).
Если поле пустое или содержит *, то вход разрешен с любого IP, иначе вход разрешен только с адресов, подходящих по маске. Возможен ввод нескольких масок через запятую.
Пример: 192.168.1.*,192.168.2.*,10.24.*
MD5Password — использовать хеш на основе MD5 для хранения паролей пользователей.
Необходимо наличие текстового поля md5password в таблице user_auth (размер поля может быть любым). Если поле пустое, то выполняется обычная проверка пароля. Если пароль верный, то вычисляется хеш с использованием MD5 и заносится в поле md5Password (в поле password заносится 0). Если поле md5Password уже заполнено, то выполняется проверка только с использованием MD5.
Значение параметра — ключ для получения хеша (задается раз и навсегда). Опция отключена, если параметр не задан или равен нулю.
Функция на PHP для получения хеша (замените 'key' на значение параметра MD5Password):
<?php
function hCrypt($password)
{
$md5password = 'key';
$s = md5($password) . md5($md5password);
$j = 0;
for ($i = 0; $i < strlen($s); $i++)
{
if ($j >= strlen($md5password)) $j = 0;
$s[$i] = $s[$i] ^ $md5password[$j];
$j++;
}
return md5($s);
}
?>
Внимание! Используйте эту опцию только в том случае, если до конца понимаете на что идете!
ExecLogin (0 или 1) — позволяет при каждой успешной авторизации вызывать процедуру MSSQL.
Если значение 1, то hAuthD после всех проверок вызывает hauthd_login (Stored Procedure). Процедуре передается id учетной записи (параметр @uid), IP клиента (@ip) и hKey (@hkey). Вход в игру блокируется, если процедура возвращает ok со значением 0.
Пример процедуры hauthd_login:
USE [lin2db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[hauthd_login]
@uid int,
@ip varchar(15),
@hkey varchar(16)
AS
SELECT pay_stat AS ok FROM user_account WITH (nolock) WHERE uid = @uid
Guard — активирует модуль защиты (требуется специальная DLL для клиента).
Секции AntiBrute и AntiBruteIP
Защита от перебора работает с идентификатором, состоящим из IP и имени учетной записи.
Аналогичная секция AntiBruteIP управляет защитой, привязанной только к IP.
MaxAttempts — максимальное число попыток входа за интервал времени (interval).
Interval — интервал в секундах для расчета количества попыток входа.
Penalty — интервал в секундах в течение которого вход в игру запрещен (независимо от того, введен правильный пароль или нет) после того, как пользователь сделал
MaxAttempts попыток за Interval секунд.