前言
今年以來,Ubuntu 14.04服務器一直被人使用SSH在進行暴力破解眶诈,甚至被進入系統(tǒng),運行了挖礦和不知名的程序瓜饥,所以還是需要配置一下防爆破措施逝撬,本來準備使用iptables來設置的,但是服務器用的人太多了乓土,另外就是還有校外使用VPN的人在使用宪潮,通過搜索溯警,發(fā)現(xiàn)Fail2Ban比較適合我們這種情況。
Fail2Ban
Fail2Ban通過監(jiān)視服務器的系統(tǒng)日志auth.log坎炼,然后匹配日志中的的錯誤信息(正則式匹配)而執(zhí)行相應的屏蔽操作(一般情況下是防火墻)愧膀,而且可以配置發(fā)送e-mail通知系統(tǒng)管理員進行預警!
Fail2Ban谣光,防止暴力破解檩淋,工作原理是通過分析一定時間內(nèi)的相關(guān)服務日志,將滿足動作的相關(guān)IP利用iptables加入到drop(丟棄)列表一定時間萄金。
Fail2Ban 為各種服務提供了許多過濾器蟀悦,如 ssh、apache氧敢、nginx日戈、squid、named孙乖、mysql浙炼、nagios 等。
Fail2Ban 官方網(wǎng)址:http://www.fail2ban.org , github網(wǎng)址: http://github.com/fail2ban/fail2ban
安裝
本來想著源碼安裝的唯袄,但是發(fā)現(xiàn)有一鍵安裝工具腳本弯屈,可以直接通過apt進行安裝,所以就偷懶一下恋拷,工具的github地址:https://github.com/FunctionClub/Fail2ban, 功能齊全资厉,支持 Centos 6/7 Ubuntu 14.04/16.10 Debian 7/8 (x86/x64):
- 自助修改SSH端口 (初始是22)
- 自定義最高封禁IP的時間(以小時為單位)
- 自定義SSH嘗試連接次數(shù) (2-10次)
- 一鍵完成SSH防止暴力破解
安裝需要使用root權(quán)限:
su
wget https://raw.githubusercontent.com/FunctionClub/Fail2ban/master/fail2ban.sh
bash fail2ban.sh
- 第一步選擇是否修改SSH端口。
- 第二步輸入最多嘗試輸入SSH連接密碼的次數(shù)蔬顾。(2-10次)
- 第三步輸入每個惡意IP的封禁時間(Default: 24h)
選擇好宴偿,等待安裝腳本運行完:
* Restarting authentication failure monitor fail2ban [ OK ]
Finish Installing ! Reboot the sshd now !
ssh stop/waiting
ssh start/running, process 15018
Telegram Group: https://t.me/functionclub
Google Puls: https://plus.google.com/communities/113154644036958487268
Github: https://github.com/FunctionClub
QQ Group:277717865
Fail2ban is now runing on this server now!
安裝完成后,如若出現(xiàn)ssh無法連接的情況诀豁,請返回安裝log查看檢查是否修改過ssh端口窄刘,使用修改后的ssh端口進行連接。
Fail2Ban的配置文件:/etc/fail2ban/
Fail2Ban的安裝目錄:/usr/share/fail2ban/
Fail2Ban日志文件:/var/log/fail2ban.log
達到閾值之后的執(zhí)行Fail2Ban的動作的配置文件:/etc/fail2ban/action.d/
包含F(xiàn)ail2Ban所有的過濾規(guī)則:/etc/fail2ban/filter.d/
配置Fail2Ban
因為是一鍵安裝和配置且叁,所以這里介紹一下配置文件:/etc/fail2ban/jail.local
cat /etc/fail2ban/jail.local
#defalut這里是設定全局設置都哭,如果下面的監(jiān)控沒有設置就以全局設置的值設置。
[DEFAULT]
ignoreip = 127.0.0.1 //用于指定哪些地址ip可以忽略 fail2ban 防御,以空格間隔
bantime = 86400 //客戶端主機被禁止的時長(默認單位為秒)
maxretry = 5 //匹配到的密碼輸入次數(shù)閾值
findtime = 1800 //過濾的時長(秒)
destemail = user@seu.edu.cn //接收報警的郵件地址
sender = user@seu.edu.cn //發(fā)送者郵件地址
mta = mail //郵件發(fā)送軟件
protocol = tcp
[ssh-iptables]
enabled = true //是否開啟
filter = sshd //過濾規(guī)則
action = iptables[name=SSH, port=ssh, protocol=tcp] //動作
logpath = /var/log/auth.log //日志文件路徑
maxretry = 5 //匹配到的密碼輸入次數(shù)閾值
findtime = 3600 //過濾的時長(秒)
bantime = 86400 //客戶端主機被禁止的時長(默認單位為秒)
卸載
如若后面不想再使用Fail2Ban逞带,可以腳本卸載:
su
wget https://raw.githubusercontent.com/FunctionClub/Fail2ban/master/uninstall.sh
bash uninstall.sh
Fail2ban的命令
fail2ban-client
start 啟動fail2ban server和監(jiān)獄
reload 重新加載配置文件
stop 暫停fail2ban和監(jiān)獄
status 查看運行的監(jiān)控服務數(shù)量和列表
set loglevel 設置日志等級欺矫,有 CRITICAL, ERROR, WARNING,NOTICE, INFO, DEBUG
get loglevel 獲取當前日志的等級
set <JAIL> idle on|off 設置某個監(jiān)控(監(jiān)獄)的狀態(tài)。
set <JAIL> addignoreip <IP> 設置某個監(jiān)控(監(jiān)獄)可以忽略的ip
set <JAIL> delignoreip <IP> 刪除某個監(jiān)控(監(jiān)獄)可以忽略的ip
set <JAIL> banip <IP> 將ip加入 監(jiān)控(監(jiān)獄)
set <JAIL> unbanip <IP> 將ip從監(jiān)控(監(jiān)獄)移除
刪除禁止的IP
從 Fail2Ban 中刪除禁止的 IP 地址展氓,請運行以下命令:
fail2ban-client set ssh unbanip XXX.XXX.XXX.XXX
Fail2Ban郵件預警
使用mail發(fā)送郵件穆趴,配置文件末尾添加發(fā)件人的信息。
sudo vi /etc/nail.rc
## Add sendmail settings
set from=USER@seu.edu.cn //發(fā)信人郵箱
set smtp=smtps://smtp.seu.edu.cn:465 //發(fā)信人郵箱的SMTP地址
set smtp-auth-user=USER@seu.edu.cn //發(fā)信人郵箱登陸賬號
set smtp-auth-password=PASSWORD //發(fā)信人郵箱的密碼
set smtp-auth=login //認證方式
set ssl-verify=ignore //忽略證書警告
set nss-config-dir=/etc/pki/nssdb //證書所在目錄
往Fail2Ban的配置文件中添加郵箱設置:
cat /etc/fail2ban/jail.local
#defalut這里是設定全局設置遇汞,如果下面的監(jiān)控沒有設置就以全局設置的值設置未妹。
[DEFAULT]
ignoreip = 127.0.0.1 //用于指定哪些地址ip可以忽略 fail2ban 防御,以空格間隔
bantime = 86400 //客戶端主機被禁止的時長(默認單位為秒)
maxretry = 5 //匹配到的密碼輸入次數(shù)閾值
findtime = 1800 //過濾的時長(秒)
destemail = u1@seu.edu.cn //接收報警的郵件地址
sender = u2@seu.edu.cn //發(fā)送者郵件地址
mta = mail //郵件發(fā)送軟件
protocol = tcp
[ssh-iptables]
enabled = true //是否開啟
filter = sshd //過濾規(guī)則
action = iptables[name=SSH, port=ssh, protocol=tcp] //動作
## action = mail[name=SSH, dest=u1@seu.edu.cn]
mail-whois[name=SSH, dest=u1@seu.edu.cn, sender=u2@seu.edu.cn] //郵件發(fā)送
logpath = /var/log/auth.log //日志文件路徑
maxretry = 5 //匹配到的密碼輸入次數(shù)閾值
findtime = 3600 //過濾的時長(秒)
bantime = 86400 //客戶端主機被禁止的時長(默認單位為秒)
配置文件中的mail-whois在目錄/etc/fail2ban/action.d/
的mail-whois.conf
簿废,配置如下:
vi /etc/fail2ban/action.d/mail-whois.conf
# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
#
[Definition]
# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart = printf %%b "Hi,\n
The jail <name> has been started successfully.\n
Regards,\n
Fail2Ban"|mail -s "[Fail2Ban] <name>: started on `uname -n`" <dest>
# Option: actionstop
# Notes.: command executed once at the end of Fail2Ban
# Values: CMD
#
actionstop = printf %%b "Hi,\n
The jail <name> has been stopped.\n
Regards,\n
Fail2Ban"|mail -s "[Fail2Ban] <name>: stopped on `uname -n`" <dest>
# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck =
# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionban = printf %%b "Hi,\n
The IP <ip> has just been banned by Fail2Ban after
<failures> attempts against <name>.\n\n
Here are more information about <ip>:\n
`whois <ip>`\n
`/bin/curl http://ip.taobao.com/service/getIpInfo.php?ip=<ip>`\n\n
Regards,\n
Fail2Ban"|mail -s "[Fail2Ban] <name>: banned <ip> from `uname -n`" <dest>
# Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionunban =
[Init]
# Default name of the chain
#
name = default
# Destination/Addressee of the mail
#
dest = root
通過curl http://ip.taobao.com/service/getIpInfo.php?ip=<ip>淘寶的IP查詢獲取攻擊者的一些IP信息。
然后重新載入修改的配置:
sudo fail2ban-client reload
參考
配置mail使用SMTP發(fā)送郵件
Centos7安裝Fail2Ban并利用163郵箱發(fā)送郵件提醒功能
fail2ban的使用以及防暴力破解與郵件預警
—— dulunar 后記于 2020.08