Безопасность и защита ваших ботов.
В ботах Eggdrop присутствует множество потенциальных уязвимостей, которые могут быть использованы злоумышленниками, если вы не позаботитесь о безопасности своего робота. Ниже приведены несколько простых правил, следование которым поможет обезопасить вашего бота и избежать многих проблем.
Отключите learn-users.
Позволять юзерам самим добавлять себя в юзерфайл бота без сомнения очень удобно, но весьма небезопасно(особенно если юзер получает доступ в partyline при добавлении). И вы конечно не хотите чтобы кто-то зафлудил вашего бота msg сообщениями и добавил 1,000 новых юзеров. Вы должны отключить learn-users и для добавления юзеров использовать partyline команды .adduser и .+user.
eggdrop.conf писал(а):# If you want people to be able to add themselves to the bot's userlist
# with the default userflags (defined above in the config file) via the
# 'hello' msg command, set this to 1.
set learn-users 0
Если вы всеравно хотите позволить юзерам самим добавлять себя то измените команду на что-либо другое вместо дефолтного "hello".
eggdrop.conf писал(а):# Many IRCops find bots by seeing if they reply to 'hello' in a msg.
# You can change this to another word by un-commenting the following
# two lines and changing "myword" to the word wish to use instead of
# 'hello'. It must be a single word.
#unbind msg - hello *msg:hello
bind msg - myword *msg:hello
Где myword это и есть новая команда.
Выбирайте владельцев(+n) ваших ботов с большой осторожностью.
Будьте очень осторожны при выборе того, кому выдать флаг глобального владельца бота (+n). Лучшим решением будет вообще не давать никому такой флаг, в другом случае убедитесь, что вы даете этот флаг тем людям, которых знаете очень давно и можете им доверять. Статус владельца позволяет делать с ботом практически все, и вам бы очень не хотелось чтобы недобросовестный владелец использовал свой его для нарушения правил сети и в итоге ваш бот получил бы глобальный бан или был бы удален с шелла.
Не используйте auto-op.
Если ваш бот находится не на небольшом, приватном канале, где вы знаете почти всех посетителей, то, использование auto-op существенно увеличивает возможность захвата канала. Это происходит из-за того, что, для получения op`а необходимо установить себе такие ident и host какие у того, кому бот выдает этот статус. Наилучшим будет убедиться в том, что юзеры получают op только после того, как вводят пароль на боте отправив /msg боту с запросом на получение op`а. Еще более безопасный, но менее удобный способ это зайти в partyline или DCC бота и использовать там команду .op
Защита паролей
Не выбирайте легкоугадываемые пароли - пусть вашим паролем будет комбинация цифр и букв верхнего и нижнего регистров, или несколько слов в комбинации с цифрами - все что угодно кроме обычных одинарных слов. Также, убедитесь, когда отсылаете команду с паролем вашему боту (например /msg botnick op <пароль>) что вы не пишите /msg в окне канала - я сбился со счета сколько раз я видел как люди открывают свой пароль всему каналу потому, что или перепутают слеш или нечаянно зажимают Ctrl, в результате чего строка команды с паролем пишется в канал а не приватно боту.
Измените или отключитекоманды ident и addhost
Желательно для добаления новой хостмаски использовать иные команды а не дефолтные 'ident' или 'addhost'. Измените эти команды на что-либо другое.
eggdrop.conf писал(а):# Many takeover attempts occur due to lame users blindly /msg ident'ing to
# the bot and attempting to guess passwords. We now unbind this command by
# default to discourage them. You can enable these commands by commenting the
# following two lines.
unbind msg - ident *msg:ident
unbind msg - addhost *msg:addhost
bind msg - newident *msg:ident
bind msg - newaddhost *msg:addhost
где newident и newaddhost и есть эти новые команды.
Для еще большей безопасности вы можете совсем отключить эти команды но тогда мастерам(+m) и владельцам(+n) придется добавлять вручную хосты для юзеров.
eggdrop.conf писал(а):# Many takeover attempts occur due to lame users blindly /msg ident'ing to
# the bot and attempting to guess passwords. We now unbind this command by
# default to discourage them. You can enable these commands by commenting the
# following two lines.
unbind msg - ident *msg:ident
unbind msg - addhost *msg:addhost
Используйте уникальные хостмаски
Если ваша хостмаска, например, cool@modem36.ppp.yourisp.net, Eggdrop запишет вас в юзерфайл с маской *!cool@*.yourisp.net. Если вы владелец(+n) или мастер(+m) бота необходимо сделать вашу маску более специфичной - тоесть *!cool@*.ppp.yourisp.net или, к примеру, *!cool@modem*.ppp.yourisp.net. Иначе под маску *!cool@*.yourisp.net попадут все пользователи вашего провайдера кто поставят идент cool.
Включение protect-telnet
По умолчанию любой может соединиться с вашим ботом через telnet и попыталься угадать пароли пользователей. Включение protect-telnet в конфигурационном файле позволит вам запретить доступ в telnet определенным хостам.
eggdrop.conf писал(а):# This setting will drop telnet connections not matching a known host.
set protect-telnet 0
Чтобы разрешить юзеру доступ в telnet с включенной опцией protect-telnet вы должны добавить специальную telnet-хостмаску к его записи в юзерфайле бота, формат записи таков, -telnet!*@their.hostname.com. Например - если хостмаска у юзера *!cool@*.dudes.net, вам необходимо добавить -telnet!*@*.dudes.net в список его хостмасок. Ето позволит хосту *.dudes.net соединиться с вашим ботом по telnet. Опция protect-telnet также применима к ботам прилинкованным к вашему, на hub боте вам необходимо также добавить хостмаски всех leaf ботов.
Обратите внимание на то, что по умолчанию, Eggdrop дает владельцу(+n) -telnet!*@* хостмаску, что позволяет любому хосту соединиться с ним по telnet. Вы должны убедиться, что удалил эту хостмаску и добавили более специфичную (например -telnet!*@*.ppp.yourisp.net).
Также запомните, что в версиях Eggdrop ранее 1.6, telnet!*@* (без символа -) используется вместо -telnet!*@*.
Позвольте только юзерам соединять по telnet с leaf ботами.
Команда listen в конфигурационном вайле вашего бота обычно выглядит вот так: listen 54321 all, "all" означает что бот будет принимать соединения как от других ботов так и от пользователей. В большинстве случаев, leaf не должны принимать соединения от других ботов, и необходимо сменить "all" на "users", тоесть listen 54321 users, обеспечит вам запрет подобных соединений. Запомните, что команда .relay все равно будет приниматься, так как это обычное соединение с юзером.
Еще более безопасным будет совсем убрать listen порт на leaf ботах закомментировав listen строку символом # и перезапустив бота. Отсутствие listen порта также означает, что бот не будет подвержен telnet-based аттакам. Минус этого способа в том, что для того, чтобы попасть в консоль бота вам необходимо будет установить с ним DCC соединение. Во многих случаях отключение listen port не столь необходимо, также, как и использование protect-telnet.
Отключите команды tcl, set, и binds.
Используя .tcl и .set DCC команды, любой юзер со статусом global owner может получить доступ к шеллу. Это очень небезопасно, поэтому убедитесь, что эти команды отключены в конфигурационном файле вашего бота.
eggdrop.conf писал(а):# Comment these two lines if you wish to enable the .tcl and .set commands.
# If you select your owners wisely, you should be okay enabling these.
unbind dcc n tcl *dcc:tcl
unbind dcc n set *dcc:set
Команда .binds также может быть использована злоумышленниками, поэтому она должна быть отключена если вы ее не используете.
Включите must-be-owner
Эта опция появилась в версиях позднее 1.3.24. Она позволяет использовать команды .tcl и .set(если они включены) только постоянным владельцам (чьи имена вписаны в 'set owner' в конфигурационном файле бота). Также если вы хотите разрешить постоянным владельцам использовать команду .dump установите значение must-be-owner 2.
eggdrop.conf писал(а):# If you enable this setting, only permanent owners (owner setting) will be
# able to use .tcl and .set. Moreover, if you want only let permanent owners
# use .dump, then set this to 2.
set must-be-owner 1
Используйте private-user
Если в вашем ботнете юзерфайл делится между ботами, вы должны включить эту опцию. При включение этой опции не принимаются никакие изменения юзерфайла от leaf ботов, только от hub бота. Она значительно увеличит безопасность ботнета, но все изменения данных юзеров (например ident/addhost, пароли и флаги, и т.д.) придется делать через hub бот.
eggdrop.conf писал(а):# When sharing user lists, don't accept ANY userfile changes from other
# bots? Paranoid people should use this feature on their hub bot. This
# will force all userlist changes to be made via the hub.
set private-user 1
Используйте хорошую защиту от флуда.
Большинство людей думают что Eggdrop "пуленепробиваем", но это не так, по умолчанию боты весьма уязвимы для основных типов флуда. Настройки защиты от флуда подбираются индивидуально для каждого канала, тут не может быть единственно верного решения.
Для лучшей защиты используйте специальные скрипты защиты от флуда, к примеру, sentinel.tcl, который идет в дефолтной поставке бота, его вы можете найти в папке scripts. В дополнение в ним рекомендуется установить скрипт следящий за лимитом на канале, который предотвратит мгновенный заход сотен флудботов на ваш канал.