2016-06-23 7 views
1

Я использую nginx в контейнере докера, и я могу с легкостью поделиться своим файлом журнала на моем контейнере dginx nginx с хостом. Журнал находится на нем и работает в папке /var/log/nginx.Защищенный сервер с Fail2ban и Docker

У меня есть установка fail2ban на хосте для проверки файлов журналов, в частности access.log.

Испытываю простой фильтр

# Fail2Ban configuration file 
# Author: Miniwark 

[Definition] 
failregex = ^<HOST> .*"GET .*w00tw00t 
# try to access to admin directory 
      ^<HOST> .*"GET .*admin.* 403 
      ^<HOST> .*"GET .*admin.* 404 
# try to access to install directory 
      ^<HOST> .*"GET .*install.* 404 
# try to access to phpmyadmin 
      ^<HOST> .*"GET .*dbadmin.* 404 
      ^<HOST> .*"GET .*myadmin.* 404 
      ^<HOST> .*"GET .*MyAdmin.* 404 
      ^<HOST> .*"GET .*mysql.* 404 
      ^<HOST> .*"GET .*websql.* 404 
      ^<HOST> .*"GET \/pma\/.* 404 
# try to access to wordpress (we use another CMS) 
      ^<HOST> .*"GET .*wp-content.* 404 
      ^<HOST> .*"GET .*wp-login.* 404 
# try to access to typo3 (we use another CMS) 
      ^<HOST> .*"GET .*typo3.* 404 
# try to access to tomcat (we do not use it)  
      ^<HOST> .*"HEAD .*manager.* 404 
# try to access various strange scripts and malwares 
      ^<HOST> .*"HEAD .*blackcat.* 404 
      ^<HOST> .*"HEAD .*sprawdza.php.* 404 

ignoreregex = 

И я активный легко в /etc/fail2ban/jail.local

[nginx-nokiddies] 
# ban script kiddies 
enabled = true 
port  = http,https 
filter = nginx-nokiddies 
logpath = /var/log/nginx*/*access.log 
maxretry = 1 

перезапустить/стоп/старт/перезагрузить Fail2ban обслуживание. Затем я проверить это регулярное выражение с

fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-nokiddies.conf 

Это соответствует тысячам линии, особенно с любым администратором запроса.

Основная проблема: fail2ban не работает автоматически, поэтому не отправляет почту, как раньше. Действительно, он отлично работает, когда я использую установку nginx непосредственно на хосте.

Журнал находятся в базовом формате, называют «комбинированные» форматы, как это:

log_format combined '$remote_addr - $remote_user [$time_local] ' 
      '"$request" $status $body_bytes_sent ' 
      '"$http_referer" "$http_user_agent"'; 

Нет разрешения проблемы, потому что мой Nginx контейнер и его дети полные права (777), чтобы быть уверенным, я могу изменить его конечно же!

Почему fail2ban процесс не запрещает ip и не соответствует чему-либо с докером?

ответ

0

Если ваш nginx работает в изображении докеров, вы, вероятно, тоже захотите запустить fail2ban в контейнере докера?

+1

Хорошая идея, но я хочу отключить пользователя на главном брандмауэре моего хоста, а не в контейнере, так что можно заблокировать кого-то в контейнере nginx, а также на главном брандмауэре? Достаточно ли блокировать кого-то в контейнере nginx? Это заблуждение? – kiedis

+0

Нет заблуждений @kiedis, вы правы. Я действительно не уверен, какая польза от использования fail2ban в контейнере докера будет обеспечиваться, если кто-то не разветвит fail2ban для связи с брандмауэром на хостеле докера –

0

Вы можете установить fail2ban на хосте, а затем сопоставить файл журнала доступа из контейнера nginx на ваш хост. Что-то вроде docker run -v /path/in/host:/var/log/nginx/access.log nginx. Затем в fail2ban просто ссылается на этот файл.