Мой вывод таков: да, fail2ban стоит использовать с Meteor. Насколько я могу судить, Nginx защита паролем не имеет значения, но есть и другие полезные вещи, которые вы можете сделать.
Во-первых, я думаю, что стоит использовать fail2ban на любом сервере, чтобы блокировать атаки методом перебора. Мой тестовый сервер был в сети только пару дней без ссылок, указывающих на него, и я уже вижу пробы на пути, такие как wp-admin и robots.txt в журналах Nginx. Эти пробники ничего не могут достичь, потому что файлы не существуют, но я думаю, что безопаснее запретить повторные вызовы.
Я работал с этого урока , чтобы установить тюрьму для запрещенных URL , изменив определение тюрьмы так, чтобы оно указывало на мой фактический Nginx файл журнала.
Затем я изменил свое приложение, чтобы записывать неудачные попытки входа в систему, и написал собственную тюрьму и фильтр, чтобы заблокировать их. Может случиться так, что никто не потрудится написать сценарий специально для атаки на сайт Meteor, и мое приложение Meteor регулирует вход в систему, но я снова чувствую, что лучше быть осторожнее, чем меньше.
Вот как я изменили мое приложение:
сервер / основной. js
const buildServerLogText = ((text) => {
const connection = Meteor.call('auth.getClientConnection');
return `${moment(new Date()).format('YYYY/MM/DD HH:mm:ss')} ${text}, client: ${connection.clientAddress}, host: "${connection.httpHeaders.host}"`;
});
// log failed login attempts so fail2ban can find them in the Nginx logs
Accounts.onLoginFailure(() => {
const text = buildServerLogText('[error]: Meteor login failure');
console.log(text);
});
Это пишет неудачные попытки входа на сервер в этой форме:
2020/03/10 15:40:20 [error]: Meteor login failure, client: 86.180.254.102, host: "209.97.135.5"
формат даты важен, в этом случае сбои fail2ban.
Мне также пришлось установить passenger_disable_log_prefix on;
в моем файле конфигурации Phusion Passenger, чтобы префикс был добавлен в запись журнала. При развертывании моего приложения с Phusion Passenger конфигурация Nginx находится в конфигурационном файле Passenger.
Тогда мой фильтр fail2ban выглядит так:
/ etc / fail2ban / filter. d / nginx -login-fault.conf
[Definition]
failregex = ^ \[error\]:.*Meteor login failure.*, client: <HOST>, .*$
ignoreregex =