[FilterScript] [FS] INGAME RCON GUARD
#1

INGAME RCON GUARD
фильтрскрипт
04/04/2010
Предупреждение:
- Этот ФС эффективен, если отключить неигровые РКОН конекты.
В настройках сервера нужно выставить rcon 0

Описание:
- Это ФС для SA-MP сервера, который следит за кол-вом
неудачных игровых РКОН логинов. И в случае превышения
лимита неудачных попыток, банит ИП игрока на 12 часов.

- Неважно под какими никами был игрок, сколько он входил/выходил
на сервер. При неудачных попытках запоминается только IP.

- Все забаненные ИПы хранятся в памяти в упакованном виде.
Каждые 12 часов или при выгрузке ФС, все ИПы, которые были
забанены этим ФС, будут разбанены.

- Если сервер аварийно выключится, то все забаненные ИПы
придется удалить из файла samp.bans вручную.

Как использовать:
- сохранить как файл с PWN расширением
- скомпилировать PWN и загрузить полученный AMX файл в папку сервера filterscripts
- в настройках (server.cfg) в строке filterscripts добавить строку с именем АМХ файла без расширения

Код:
- pastebin: http://pawn.pastebin.com/Vr3whYMA

ЗЫ:
- я знаю, что такие скрипты уже есть, но я всегда делал максимально быстрые и точные скрипты
- этот скрипт сейчас работает на моем сервере
- скрипт теперь называется INGAME RCON GUARD
Reply
#2

Не знаю, мне не пригодиться. Я сразу всех кто пытается юзать ркон баню скриптом.

Список релизов обновлён. В нашем разделе 15 релизов и 3 урока.
Reply
#3

Лично мое мнение это очень бесполезный и вредный скрипт.

Причин несколько:
1. На сколько я знаю, все программы для подбора паролей ркон работают через внешнюю консоль. Причина проста: через внешнюю консоль довольно легко установить пароль подошел или нет, это можно делать быстро и эффективно. И на данный момент, большинство серверов беспомощны против этого (можно только просто отключить внешнюю консоль). В подкреплении этому, на сервере со средним онлайном в 201,5 игрока за март этого года за больше чем год (я протоколировал внешние и внутренние попытки захода в ркон еще в сампе 0.2X) не было ни одного случая автоматического подбора ркона в игре.

Таким образом, причина номер один: фильтр скрипт бесполезен, так как подбирать ркон могут в игре только в ручную (не быстрее 1 пароля в несколько секунд, что не является угрозой).

2. Многие игроки играют через NAT. У меня на сервере было что до 5 игроков, которые не знают друг друга имеют 1 ip адрес. Предложенный тут и авторами сампа алгоритм просто забанет игрока ид которого меньше (то есть случайного). Я понимаю, после такого бана выкинет всех таких игроков (с одним ип адресом). Можно говорить что ситуация, когда несколько игроков играют с одного ип адреса редки и это скорей всего с рядом стоящих компьютеров люди, но многолетний опыт администрирования самп серверов говорит, что это довольно обыденная ситуация, и как правило игроки с одним ип адресом друг друга не знают.

Итого, причина номер два: фильтр скрипт опасен тем, что в общем случае забанит случайного игрока.


Маленькое лирическое отступление.

Нужно всегда адекватно оценивать риски возможных угроз и степень неудобства, которое будет, если бороться с угрозами опасности. Это не значит что не стоит плевать на все возможные угрозы безопасности, просто к этому стоит подходить комплексно и здраво.

Например, глупо на ркон ставить пароль из 3х цифр. Также глупо, на ркон ставить 30 символьный пароль, который будет состоять из русских и английский букв в верхнем и нижнем регистрах, специальных символов и цифр, и менять его каждый день. Также, очень часто, может оказаться не целесообразно отключать внешнюю консоль. Ужесточая методы борьбы с потенциальными взломщиками, вы делаете не удобным эксплуатирование системы. Вопрос в том, стоит ли это таких потерь?

Лично мой опыт подсказывает, что ркон попадает к третьим людям из-за человеческого фактора. Либо админ наберет ркон не с той раскладкой (а точку, вместо слеша, сервер не засчитает за команду и выведет это все в чат), либо просто еще как ошибется, в результате чего ркон попадет в общий чат. Также бывали случаи, когда админ по привычке, набирает ркон не на своем сервере, и хозяин этого сервера узнает ркон из логов.
Reply
#4

сори за нубство , но всё же: что за внешняя консоль? и почему отключение rcon'a в server.cfg плохо? ( что там за потери такие )
Reply
#5

Quote:
Originally Posted by [Saint
]
что за внешняя консоль?
https://sampwiki.blast.hk/wiki/Remote_Console

Если вкратце, то средство удаленного управления сервером, например, можно перезагрузить сервер.

Quote:
Originally Posted by [Saint
]
почему отключение rcon'a в server.cfg плохо? ( что там за потери такие )
Просто отключение определенной функциональности самп сервера. Эта функциональность может быть удобна (хотя бы тем, что она есть по умолчанию в сервере), но, безусловно, может быть реализована как то иначе.

Точно также, как можно почти полностью отказаться от ркон админки, заменив ее своими скриптами (внутри игры) и каким либо внешним механизмом.

Но так или иначе, на данный момент, данный фильтр скрипт нисколько не увеличит безопасность игрового сервера, так как он защищает от опасности, которой нет, а ту опасность которая есть, предлагается решать отключением.


Это примерно как (утрированно): мой самп сервер досят, что мне делать? Ответ: выключи самп сервер, и проблем с досом больше не будет.
Reply
#6

Весь лог во флуде BAD RCON ATTEMPT из-за включенной внешней ркон консоли. Зачем мне такая функциональность, если серв сам не банит за брут через удаленную консоль. Я со спокойно душой отключаю (rcon 0), т.к. через ркон админы и я ничо почти не делаем, а если что нужно, с игры заходят и админят.

Раз с внешней консоли подобрать ркон низя, то могут вручную пробовать. Так что ФС этот как второй барьер при попытке узнать ркон.

Про нубов, которые палят ркон в русской раскладке - смяшно (:

Про игроков, которые играют с одного IP - в нашей стране, могут играть через NAT только те, кто сидит рядом по локалке, а еси кто-то с дуру будет вручную подбирать ркон, то стессна забанит и его соIPовца (сам виноват). IP в нашей стране динамически меняются, поэтому бан ника/ИПа у нас ваще как таковой не запретит играть ))

И опять же, если у тебя есть средство лучше, предложи его народу, и тока потом можешь говорить, что такой способ - плохой.


-- забыл добавить --
для тех, кто может палить пароли в русской раскладке можно сделать тоже простенький ФС, который не показывает сообщение в общий чат, если это была попытка ввода какой-то команды. Все просто, не правда ли?

-- PS --
через удаленную консоль сумели подобрать ркон для одного из KZ сервов, и видимо юный взломщик был, т.к. потом зашел и всех забанил ))
Reply
#7

Я отказался от ркон, т.е. теоретически он еще есть но навредить чем-то имея ркон пароль нельзя, более высокие уровни администратора прописаны для их аккаунтов, удаленная консоль отключена и попыток входа под ркон у меня с ноября небыло вообще, кроме меня остальные администраторы даже и пароля то не знают)
Reply
#8

я у себя тоже отказался от rcon (в файле server.cfg поставил rcon 0) а все команды (ну или почти все) такие как например /rcon say
у меня реализованы вот таким вот способом:

Code:
//------------------------------------------------------------------------------
	if(strcmp(cmd, "/radminsay", true) == 0 || strcmp(cmd, "/ras", true) == 0)
	{
		new length = strlen(cmdtext);
		while ((idx < length) && (cmdtext[idx] <= ' '))
		{
			idx++;
		}
		new offset = idx;
		new result[64];
		while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
		{
			result[idx - offset] = cmdtext[idx];
			idx++;
		}
		result[idx - offset] = EOS;
		if(PlayerInfo[playerid][pAdmin] >= 1337)
		{
			if(!strlen(result))
			{
				SendClientMessage(playerid, COLOR_SAMP, "SERVER: Используйте: /ras [text]");
				return 1;
			}
			format(string, sizeof(string), "say %s", result);
			SendRconCommand(string);
		}
		return 1;
	}
//------------------------------------------------------------------------------

Reply
#9

у меня например rcon команды все использует бот в мирке
+ по защите: даркбайт делал программу, блокирующую любой флуд, посылаемый самп серверу

опискать можно на http://wog74.ru (как то так)
Reply
#10

Quote:
Originally Posted by MX_Master
Так что ФС этот как второй барьер при попытке узнать ркон.
Видимо основной посыл моих постов так и не дошел
Основная мысль была в том, что нужно адекватно оценивать угрозы. Подбор пароля методом грубой силы (перебором) NP - сложная задача.

Дано:
- Алфавит пароля: abcdefghijklmnopqrstuvwxyz0123456789 (36 символов)
- Скорость набора каждого следующего пароля игроком в игре: 1 пароль/секунда
- Длина пароля: 5 символов
Найти:
- Сколько нужно времени, чтобы подобрать такой пароль в ручную

Решение:
- Количество_комбинаций = множество_символов_пароля ^ длина_пароля = 36^5 = 60466176
- Время на подбор такого пароля = Количество_комбинаций / скорость = 60466176 / (1 пароль/секунда * 60 * 60 * 24 * 365) = 1,9 лет

Повторю еще раз вопрос: за чем защищать внутренний ркон сервера, если даже такой простой пароль игрок подобрать не сможет? Автоматических средств для такого подбора НЕТ. Что дает этот скрипт? Он защищает от угрозы, которой нет, поэтому я его критикую.

А чтобы оценить NP сложность, можно увеличить длину пароля на 1 символ и повторить расчет

Quote:
Originally Posted by MX_Master
И опять же, если у тебя есть средство лучше, предложи его народу, и тока потом можешь говорить, что такой способ - плохой.
За такие вещи тут банят. Скрипт хороший, плохи базовые идеи в нем заложенные


И под конец лирическое замечание. Часто бывает важно организовать систему так, чтобы наиболее частые ошибки приводили к наименьшим последствиям и наиболее быстро обнаруживались.

Пример из программирования, кусочек программы на языке си:
Code:
int i;
...
if (i == 5) {
 ...
}
Это правильный код, и безусловно, можно программиста, который написал его так:
Code:
int i;
...
if (i = 5) { // Присваивание, вместо проверки на равенства
 ...
}
называть нубом и ламером, но вот я программирую на с/с++ более десяти лет и этим зарабатываю себе на жизнь, но несколько раз за год такие ляпы со мной случаются. Я человек, соответвенно я ошибаюсь.

А если писать так:
Code:
int i;
...
if (5 == i) {
 ...
}
то такой ляп не возможен в принципе, так как 5 - rvalue и не может выступать в роли lvalue (компилятор не скомпилирует данный код)

Это пример того, как организационные меры уменьшают опасность ошибок.

Про рконы. Боитесь что ваш ркон узнают и вам насолят, примите организационные меры: не делайте совсем тривиальный пароли (123456 это плохо, также как и qwerty), меняйте пароли с какой то периодичностью (раз в месяц, например), протоколируйте все заходы в ркон и анализируйте данные логи с какой то периодичностью, как микс_мастер замерил, напишите скрипт, который не дает напечатать в общий чат ркон пароль (не дает печатать сообщения начинающиеся с "." (точки), не дает печатать сообщения с самим рконом), организуйте админку так, чтобы человек, знающий ркон не смог навредить серверу (например, удалить командой все профили пользователей) и возможно есть еще куча организационных и программных мер, которе защитят ваш сервер.
Reply
#11

[Saint] Убери эту жесть...
pawn Code:
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
А так считаю, что всё же фс даже очень будет полезен.
Reply
#12

у меня вопрос...если ркон будут подбирать автоматически то много ли это будет "есть" оперативной памяти?
Reply
#13

dimonml, логически мыслить нужно, спору нет, и подсчитывать нужно. Но я вижу и другие стороны, а не только одну "угрозу подбора".

Давайте разберемся в плюсах:
С моим фс и выключенной удаленной ркон консолью (rcon 0 в конфиге серва) я могу поставить ркон пароль вроде `qwe159asd` и его будет трудно подобрать, зато как легко запомнить. И все потому, что через ркон консоль подбирать низя, а с игры попыток очень мало. Админу даже не нужно мучительно вспоминать сложные пароли. Если надо, опять сменил на простенький новый паролик и делоф. Это разве не очевидный плюсик?

Насчет средств, запрещенных для публикации на этом форуме могу сказать, что их использование будет считаться нарушением лицензии (: Проги и плагины, которые играются с памятью все равно не будут работать на последующих версиях, не правда ли? Их каждый раз надо обновлять. А вот официальные средства при обновлении сервера, как были так и остались.. работают как и прежде хорошо.


Quote:
Originally Posted by WILD33
у меня вопрос...если ркон будут подбирать автоматически то много ли это будет "есть" оперативной памяти?
протестируйте, но вас это не затронет, если удаленная консоль будет отключена
Reply
#14

Беспорочно, плюсы весьма существенны. Но они будут точно такие же, как и если просто отключить внешнюю консоль, и не использовать твой фильтр скрипт.

Лично у меня политика с рконом следующая: ркон это 2 - 3 коротких русских слова (осмысленная фраза), обычно отображающая какое то событие из жизни сервера. У каждого слова первая буква большая. Ркон меняется раз в 2 месяца. Внутренние события захода в ркон просто пишутся в лог и иногда просматриваются, чтобы понять общую картину (раз в несколько месяцев )

В игре за все время обычно народ пытался подобрать ркон набрав 5 - 6 разных слов (обычно changeme, имя сервера, что ни будь из мата (английского) и пара цифирных комбинаций). Один (за полтора года!) пытался раз 30 ввести один и тот же пароль (вроде как прогой для флуда). Все.

Случаи когда пароль попадал третьим лицам, в большинстве своем, я уже описал ранее: набрали на на том сервере, набрали не в той раскладки или просто с ошибкой и дело попало в общий чат. Так же были случаи, когда администратор, будучи в гостях у "проверенного" друга, админил с его компа или давал админить (наблюдая за процессом) из под своего акаунта. Потом этот друг, уже самостоятельно пытался использовать пароль

Так что, мой личный опыт такой и именно на основании опыта я тут пишу. А также потому что в вузе занимался подбором паролей и знаю эту кухню изнутри


Про запрет вещей, которые основаны на хаке сервера я читал пост Кая и его понимаю, так же как и твой перевод этих мыслей . Это его форум, и тут он в праве требовать то, что считает нужным.

Это конечно немного оффтоп тут будет, но все же хочется рассказать свою историю, как я до такого докатился

Где то года полтора назад так вышло что я стал заниматься управлением самп сервера. Я немного скриптил на павн, и тоже иногда наблюдал то, что в логе иногда появляется куча записей о неверном рконе. Они конечно не могли подобрать пароль, но логи по многу десятков мегобайт в день напрягали. Больше этого напрягала только беспомощность перед этим: я мог только каждый день смотреть на размер лог файла и если он необычно быстро разрастался его закачивать и банить ип адрес "хакера". Хакер часто просто менял ип адрес и продолжал дальше

Потом в списке плагинов на этом форуме я увидел плагин, который обещал мне события неверного захода во внешний ркон с ип адресом злоумышленника. И через некоторое время, кто-то подобрал адреса для сампа 0.2.2 R_уже_не_помню_сколько и я смог воспользоваться этим чудом Я при попытках зайти во внешнюю консоль писал всем админам об этом и в случае частых попыток, банил ип адрес. Первые испытания показали, что после недолгой атаки сервер падал, поэтому я сделал разрешенными 5 попыток (это как раз как описал Кай из-за того, что павн не тхрид-сейф, так как внешняя консоль обрабатывается в другом потоке управления, нежели живет цикл павна сервера, но тогда я об этом не думал). Также я вычитал, что автора плагина банили на форуме сампе именно из-за него, но потом разбанили и плагин на форуме остался.
Потом появился 0.2Х. Мне не хотелось расставаться с плагином, но и новый сервер хотелось, а плагин никто не обновлял. Это вынудило меня попытаться найти заветные адреса самому. Под виндоус дело было для меня не сложным, так как отладчиком Visual Studio я немного умел пользоваться, под линуксом я не умел ничего такого и мне пришлось изучить gdb и objdumb на уровне, необходимом чтобы найти эти заветные адреса. Пара недель ковыряния с этим и я портировал плагин под нужный мне самп Но тут примечательно другое: основной толчок для этого мне дал именно исходный плагин, который показал что это возможно и указал путь по которому нужно идти.

Прошло время, на форуме сампа в разделе плагинов Y_less кому то рассказывает скриншотами, как он ковыряет самп сервер, чтобы найти адреса для своего мультитхридед плагина. Я увидел название дизассемблера и методику его использования. Все это меня научило самостоятельно искать в самп сервере то, что мне нужно и делать это довольно быстро. И по иронии судьбы, основные моменты я узнал именно с форума сампа Видимо Кай понимает эти тенденции и именно поэтому против таких вещей.


Quote:

что их использование будет считаться нарушением лицензии

Это не так. Запрещено модифицировать файлы сервера / клиента и его распространять. А вот выпустить патч, который кто-то может применить? чтобы сделать такую модификацию у себя? это уже совсем другая вещь и она явным образом не запрещена. И более того, во многих странах модификация законно полученного программного продукта, если он не устраивает чем то потребителя (за исключением случаев, когда данная модификация нарушает закон, например, снимает защиту от незаконного использования) является неотделимым правом и если бы лицензия запрещала это, она была бы просто недействительна.

Например, купив машину, можно в ней поменять руль на спортивный, как бы этого не хотел производитель авто (но производитель может лишить гарантии, частично или полностью). Так и тут

В качестве еще одного примера можно посмотреть на сам самп и гта. Самп в своей поставке не содержит и не может содержать исполняемые файлы ГТА, но самп может менять исполняемый файлы ГТА в памяти (динамически, как это происходит сейчас) и на диске (путем патченья) и это не может нарушать лицензию ГТА до тех пор, пока такая модификация не будет использована, например, для снятия защиты с ГТА. Именно на основании этого SA-MP полностью лицензионно чист.
Reply
#15

Ты разъясни в 2 словах, почему же нельзя отключать внешнюю консоль и бороться в игре с подбором паролей такими ФСками?

А главное, почему вместо разрешенных вариантов и верных скриптов, я должен пользоваться средствами защиты сервера, которые запрещает публиковать сам разработчик сервера?
Reply
#16

Quote:
Originally Posted by Toney
[Saint] Убери эту жесть...
pawn Code:
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
без этого команда работать не будет
Reply
#17

Quote:
Originally Posted by MX_Master
почему же нельзя отключать внешнюю консоль
Можно и это полностью решит проблему с подбором паролей.

Я ни где не говорил что это нельзя, я говорил, что иногда это бывает неудобно. А что делать каждый решаем сам (соотнося потерянный функционал и разного рода риски).

Quote:
Originally Posted by MX_Master
бороться в игре с подбором паролей такими ФСками?
Потому что бороться не с чем. Такой угрозы нет.

Quote:
Originally Posted by MX_Master
А главное, почему вместо разрешенных вариантов и верных скриптов, я должен пользоваться средствами защиты сервера, которые запрещает публиковать сам разработчик сервера?
Вот на это я уже в двух словах не отвечу. Я именно по причине запрета разработчика тебе не могу предложить такой вариант. Я просто описываю как я борюсь с этим и это совсем не значит, что это лучший вариант. Просто у меня так сложилось.


Еще раз, что мы имеем на данный момент:
- Если внешняя консоль выключена, угрозы подбора ркона нет.
- Если внешняя консоль включена, то сервер нам дает только сообщения в лог, но не дает никакой возможности скриптовой обработки события неверного пароля во внешней консоли (хотя, я думаю, это в следующей версии сампа должно появиться, и тогда пригодиться твой скрипт). Можно поступать 2 способами: забить и просто ставить такой пароль что не подберут, а можно пытаться банить такие ип адреса.

Банить можно в ручную (просматривая иногда логи), можно автоматически. Если хочется автоматически, то придется что-то придумывать, так как штатных средств нет. Что можно придумать (на скидку):

- Плагином (который запрещен к публикации), который будет отлавливать такое событие;
- Внешней программой парсить весь сетевой трафик (libpcap), который идет к серверу, там отлавливать пакеты работы с рконом и анализировать верность пароля. Это делается внешними средствами и мне кажется в линуксе это реализуемо;
- Парсить лог файл сампа и если там много попыток захода в ркон, банить такие ип адреса. Например, сделать задание cron, которое будет раз в сколько-то времени разбирать файл лога и посылать команды в iptables. Тоже делается шелл скриптами.

Может еще есть варианты

На этом форуме иногда просят сделать защиту от доса, а в ответ разработчики сампа говорят, что дос с сампом не связан, это свойство интернета (и при этом они правы). Чтобы сервер работал приходиться бороться внешними средствами (до определенного момента они эффективны), хотя бы правилами для iptables. Брут ркона точно такая же внешняя угроза, с которой тоже приходиться бороться внешними средствами.
Reply
#18

***
У меня внешняя консоль отключена, за ввод команды с префиксом /rcon кикает. Защиту круче придумать невозможно.
Сейчас у меня другая проблема.. как ограничить палево вводимых команд (cmdtext и dialoginput) и как сделать запрет на фс, чтобы мод сам проверял.

Пока для ввода пароля планирую меню-вариант. Тыкать циферфу, отображать её как TextDraw и таким образом вводить.

модератор:
- подобные выкрики с нецензурной лексикой буду удалять впреть, и неважно было ли там в посте что-то ценное.
- неуважение к остальным участникам и местами нарушение правил (пункт 1.
Reply
#19

Было бы меньше пищи для наших рассуждений, если бы с забаненного IPa (samp.bans) было также нельзя и конектиться через ркон консоль. Вроде, звучит логично и вполне реализуемо (если Kye захочет). Если хотя бы было так, я бы сам написал плагин, который пускай даже парсит лог и банит стандартными средствами.

Как было справедливо замечено, скриптовых средств для работы с конектами через удаленную консоль - нет. И получается, что каждый выкручивается как может.

Если, хотите, давайте атакуем тему "Пожеланий для следующий версий" просьбами о дополнительный скриптовых средствах по управлению конектами с ркон консолей.
Reply
#20

Quote:
Originally Posted by MX_Master
с забаненного IPa (samp.bans) было также нельзя и конектиться через ркон консоль.
От версии к версии баны то банят внешнюю консоль, то не банят. Видимо, тут единого ответа нет. Лично мне приятно иметь возможность себя разбанить без использования компьютера с другой сети

Quote:
Originally Posted by MX_Master
Если, хотите, давайте атакуем тему "Пожеланий для следующий версий" просьбами о дополнительный скриптовых средствах по управлению конектами с ркон консолей.
Лично мое мнение, что разработчики сампа дореализуют событие, которое ты используешь в скрипте и уже можно будет жить. Где то валялся плагин, который является врапером над системным вызовом system, который позволяет запустить с текущем шелом внешнее приложение. Этого будет достаточно, чтобы забанить, например, через iptables.

Реализовать правильно работу требуемого события довольно легко: нужена очередь, доступ к которой защищен мютексом (объект синхронизации, для потокобезопасности).

Код, который пишет в лог сообщение о неправомерном доступе к внешней консоли добавляет данные об этом событии в эту очередь (один поток управления).

В свою очередь, в павне создается таймер, обработчик которого будет обращаться к очереди (под защитой мютекса) и, если очередь не пуста, то вызывается наш OnRconLoginAttempt (это другой поток управления, основной цикл обработки павна)

Такая асинхронная работа нам гарантирует threadsave решение, не требующее больших накладных расходов.

Кай не любит C++ (судя по его стилю написания ), но и на си это не очень сложно реализуется.


Фаус, а что ты имел в виду, когда говорил про запрет ФС. Чтобы админы (люди имеющие ркон доступ) не могли запускать свои фильтр скрипты или что то другое?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)