Security
phpMyadmin暴力嘗試的自定義fail2ban過濾器
為了用 阻止過多的失敗
phpMyAdmin
登錄嘗試fail2ban
,我創建了一個腳本,該腳本記錄了對文件的失敗嘗試:/var/log/phpmyadmin_auth.log
自定義日誌
文件格式
/var/log/phpmyadmin_auth.log
為:phpMyadmin login failed with username: root; ip: 192.168.1.50; url: http://somedomain.com/phpmyadmin/index.php phpMyadmin login failed with username: ; ip: 192.168.1.50; url: http://192.168.1.48/phpmyadmin/index.php
自定義過濾器
[Definition] # Count all bans in the logfile failregex = phpMyadmin login failed with username: .*; ip: <HOST>;
phpMyAdmin 監獄
[phpmyadmin] enabled = true port = http,https filter = phpmyadmin action = sendmail-whois[name=HTTP] logpath = /var/log/phpmyadmin_auth.log maxretry = 6
fail2ban
日誌包含:2012-10-04 10:52:22,756 fail2ban.server : INFO Stopping all jails 2012-10-04 10:52:23,091 fail2ban.jail : INFO Jail 'ssh-iptables' stopped 2012-10-04 10:52:23,866 fail2ban.jail : INFO Jail 'fail2ban' stopped 2012-10-04 10:52:23,994 fail2ban.jail : INFO Jail 'ssh' stopped 2012-10-04 10:52:23,994 fail2ban.server : INFO Exiting Fail2ban 2012-10-04 10:52:24,253 fail2ban.server : INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.6 2012-10-04 10:52:24,253 fail2ban.jail : INFO Creating new jail 'ssh' 2012-10-04 10:52:24,253 fail2ban.jail : INFO Jail 'ssh' uses poller 2012-10-04 10:52:24,260 fail2ban.filter : INFO Added logfile = /var/log/auth.log 2012-10-04 10:52:24,260 fail2ban.filter : INFO Set maxRetry = 6 2012-10-04 10:52:24,261 fail2ban.filter : INFO Set findtime = 600 2012-10-04 10:52:24,261 fail2ban.actions: INFO Set banTime = 600 2012-10-04 10:52:24,279 fail2ban.jail : INFO Creating new jail 'ssh-iptables' 2012-10-04 10:52:24,279 fail2ban.jail : INFO Jail 'ssh-iptables' uses poller 2012-10-04 10:52:24,279 fail2ban.filter : INFO Added logfile = /var/log/auth.log 2012-10-04 10:52:24,280 fail2ban.filter : INFO Set maxRetry = 5 2012-10-04 10:52:24,280 fail2ban.filter : INFO Set findtime = 600 2012-10-04 10:52:24,280 fail2ban.actions: INFO Set banTime = 600 2012-10-04 10:52:24,287 fail2ban.jail : INFO Creating new jail 'fail2ban' 2012-10-04 10:52:24,287 fail2ban.jail : INFO Jail 'fail2ban' uses poller 2012-10-04 10:52:24,287 fail2ban.filter : INFO Added logfile = /var/log/fail2ban.log 2012-10-04 10:52:24,287 fail2ban.filter : INFO Set maxRetry = 3 2012-10-04 10:52:24,288 fail2ban.filter : INFO Set findtime = 604800 2012-10-04 10:52:24,288 fail2ban.actions: INFO Set banTime = 604800 2012-10-04 10:52:24,292 fail2ban.jail : INFO Jail 'ssh' started 2012-10-04 10:52:24,293 fail2ban.jail : INFO Jail 'ssh-iptables' started 2012-10-04 10:52:24,297 fail2ban.jail : INFO Jail 'fail2ban' started
當我發出:
sudo service fail2ban restart
fail2ban
我要說的電子郵件ssh
已重新啟動,但我沒有收到關於我的phpmyadmin
監獄的此類電子郵件。重複登錄失敗phpMyAdmin
不會導致發送電子郵件。我錯過了一些關鍵的設置嗎?我的過濾器的正則表達式是否錯誤?
更新:添加了預設安裝的更改
從全新
fail2ban
安裝開始:cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
將電子郵件地址更改為我自己的,操作:
action = %(action_mwl)s
將以下內容附加到
jail.local
[phpmyadmin] enabled = true port = http,https filter = phpmyadmin action = sendmail-whois[name=HTTP] logpath = /var/log/phpmyadmin_auth.log maxretry = 4
將以下內容添加到
/etc/fail2ban/filter.d/phpmyadmin.conf
# phpmyadmin configuration file # # Author: Michael Robinson # [Definition] # Option: failregex # Notes.: regex to match the password failures messages in the logfile. The # host must be matched by a group named "host". The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>\S+) # Values: TEXT # # Count all bans in the logfile failregex = phpMyadmin login failed with username: .*; ip: <HOST>; # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # # Ignore our own bans, to keep our counts exact. # In your config, name your jail 'fail2ban', or change this line! ignoreregex =
重新開始
fail2ban
sudo service fail2ban restart
PS:我喜歡雞蛋
這很好,但為什麼不使用 apache 功能來記錄失敗的登錄呢?
在相應的 VirtualHost 部分中將這些行添加到您的 Apache Config(即:/etc/apache2/conf.d/phpmyadmin.conf):
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{userID}n %{userStatus}n" pma_combined CustomLog /var/log/apache2/phpmyadmin_access.log pma_combined
然後創建 fail2ban 過濾器:
/etc/fail2ban/filter.d/phpmyadmin.conf
[Definition] denied = mysql-denied|allow-denied|root-denied|empty-denied failregex = ^<HOST> -.*(?:%(denied)s)$ ignoreregex =
現在將監獄添加到 /etc/fail2ban/jail.local
[phpmyadmin] enabled = true port = http,https filter = phpmyadmin logpath = /var/log/apache2/phpmyadmin_access.log
重啟 apache 和 fail2ban:
service apache2 reload service fail2ban reload
你就完成了,不需要php腳本等等..