hAuthD — авторизационный сервер для Lineage II (en, ru)

hAuthD — альтернативный авторизационный сервер для Lineage II с расширенной функциональностью. Умеет одновременно работать с «PTS» и некоторыми L2J-серверами. Авторизационные данные хранятся в базе данных MSSQL.

Особенности:

Последняя версия (2.7.0.146): http://hauthd.org/hAuthD.zip

Опциональная защита игровых серверов (hGuard)

hGuard - DLL, которая находится в папке с игрой и взаимодействует с hAuthD. DLL надежно шифрует авторизационные пакеты и передает на сервер дополнительную информацию: список обнаруженных запрещенных программ (читов), контрольные суммы (CRC32) некоторых файлов клиента, число запущенных копий игры, уникальный идентификатор компьютера (hardware key).
Основные возможности:
Защита не работает с игровым сервером и не шифрует игровой трафик. 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 секунд.