簡介:
Fail2ban能夠監(jiān)控系統(tǒng)日志,匹配日志中的錯誤信息(使用正則表達(dá)式)憎兽,執(zhí)行相應(yīng)的屏蔽動作(支持多種冷离,一般為調(diào)用 iptables ),是一款很實用纯命、強(qiáng)大的軟件西剥。
如:攻擊者不斷嘗試窮舉SSH、SMTP 亿汞、FTP 密碼等瞭空,只要達(dá)到預(yù)設(shè)值,fail2ban 就會調(diào)用防火墻屏蔽此 IP 疗我,并且可以發(fā)送郵件通知系統(tǒng)管理員咆畏。
功能、特性:
1吴裤、支持大量服務(wù):sshd 旧找、apache 、qmail 等2麦牺、支持多作動作:iptables 钮蛛、tcp-wrapper 、shorewall 剖膳、mail notifications 等3魏颓、logpath 選項中支持通配符4、需要 Gamin 支持(Gamin 用于監(jiān)控文件和目錄是否更改)5潮秘、如果需要郵件通知琼开,則系統(tǒng)事先要確保能夠正常發(fā)送郵件
1、fail2ban 安裝
2枕荞、fail2ban 結(jié)構(gòu)
/etc/fail2ban ? ? ? ? ? ? ? ? ?## fail2ban服務(wù)配置目錄/etc/fail2ban/action.d ? ? ## iptables、mail 等動作文件目錄/etc/fail2ban/filter.d ? ? ? ##條件匹配文件目錄搞动,過濾日志關(guān)鍵內(nèi)容/etc/fail2ban/jail.conf ? ? ## fail2ban防護(hù)配置文件/etc/fail2ban/fail2ban.conf ? ## fail2ban配置文件躏精,定義日志級別、日志鹦肿、sock 文件位置等
3矗烛、fail2ban.conf 配置
shell > grep -v ^# /etc/fail2ban/fail2ban.conf
[Definition]
loglevel = 3 ##定義日志級別,默認(rèn)
logtarget = /var/log/fail2ban.log ##定義 fail2ban 日志文件
socket = /var/run/fail2ban/fail2ban.sock ## sock文件存放位置,默認(rèn)
pidfile = /var/run/fail2ban/fail2ban.pid ## pid文件存放位置瞭吃,默認(rèn)
4碌嘀、jail.conf 防護(hù)配置
shell > grep -v ^# /etc/fail2ban/jail.conf
[DEFAULT] ##全局設(shè)置,優(yōu)先級最小
ignoreip = 127.0.0.1/8 ##不受限制的 IP 歪架,多組用空格分割
bantime = 600 ##非法 IP 被屏蔽時間(秒)股冗,-1 代表永遠(yuǎn)封鎖
findtime = 600 ##設(shè)置多長時間(秒)內(nèi)超過 maxretry 限制次數(shù)即被封鎖
maxretry = 3 ##最大嘗試次數(shù)
backend = auto ##日志修改檢測機(jī)制(gamin 、polling 和蚪、auto 三種)
usedns = warn
[ssh-iptables] ##分類設(shè)置(基于 SSHD 服務(wù)的防護(hù))
enabled = true ##是否開啟防護(hù)止状,false 為關(guān)閉
filter = sshd ##過濾規(guī)則 filter 名稱,對應(yīng) filter.d 目錄下的 sshd.conf
action = iptables[name=SSH, port=ssh, protocol=tcp] ##動作參數(shù)
sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"] ##郵件通知參數(shù)
##收件人地址 ??????????## 發(fā)件人地址
logpath = /var/log/secure ##檢測系統(tǒng)登陸日志文件
maxretry = 5 ##最大嘗試次數(shù)
##默認(rèn)此配置文件中還有大量的服務(wù)防護(hù)配置攒霹,只不過默認(rèn)都是關(guān)閉(false)狀態(tài)怯疤,不用理會。
5催束、fail2ban 啟動集峦、測試 SSHD 防護(hù)
shell > service fail2ban start ##如果重啟 iptables ,必須重啟 fail2ban
shell > fail2ban-client status ##可以看到有一個實例已經(jīng)開始監(jiān)控
Status
|- Number of jail: 1
`- Jail list: ssh-iptables
shell > iptables -nL ## iptables也加入了一條規(guī)則
fail2ban-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
##這時客戶端嘗試登陸本機(jī)抠刺,故意輸入五次密碼塔淤,就會看到如下日志:
shell > tail?-1?/var/log/fail2ban.log
2015-06-05?17:39:19,647?fail2ban.actions[1313]: WARNING [ssh-iptables] Ban 192.168.214.1
##可以看到:192.168.214.1 被 Ban 掉了。
shell > cat /var/log/secure ##系統(tǒng)登陸日志
Jun 5 17:39:01 localhost sshd[1341]: Failed password for root from 192.168.214.1 port 2444 ssh2
Jun 5 17:39:06 localhost sshd[1341]: Failed password for root from 192.168.214.1 port 2444 ssh2
Jun 5 17:39:11 localhost sshd[1341]: Failed password for root from 192.168.214.1 port 2444 ssh2
Jun 5 17:39:14 localhost sshd[1341]: Failed password for root from 192.168.214.1 port 2444 ssh2
Jun 5 17:39:18 localhost sshd[1341]: Failed password for root from 192.168.214.1 port 2444 ssh2
Jun 5 17:41:39 localhost login: pam_unix(login:session): session opened for user root by LOGIN(uid=0)
6矫付、加入 Nginx 防護(hù)( httpd 代替 )
##目的是把規(guī)定時間內(nèi)達(dá)到限定訪問次數(shù)的 IP 封鎖(例如凯沪,一分鐘內(nèi)有幾百次請求)
shell > vim /etc/fail2ban/jail.conf
[nginx] ## nginx防護(hù)
enabled = true
filter = nginx ?##訪問規(guī)則定義文件,位置在 /etc/fail2ban/filter.d/nginx.conf
action = iptables[name=nginx, port=http, protocol=tcp]
sendmail-whois[name=nginx, dest=1355*******@139.com, sender=fail2ban@aoath.com, sendername="Fail2Ban"]
logpath = /var/log/httpd/access_log ## nginx訪問日志
bantime = 86400 ##符合規(guī)則的屏蔽一天买优,如果參數(shù)值與全局有沖突妨马,優(yōu)先級大于全局配置
findtime = 600 ?## 10分鐘內(nèi)訪問超過 maxretry 次數(shù)的封鎖 IP
maxretry = 1000 ##最大嘗試次數(shù)
shell > vim /etc/fail2ban/filter.d/nginx.conf
[Definition]
failregex =.*-.*-.*$ ## 表示訪問 IP ,其余的其實是最簡單匹配了杀赢。因為這里沒有要匹配精確的 URL 烘跺,只是限制訪問次數(shù)
ignoreregex =
shell > fail2ban-regex /var/log/httpd/access_log /etc/fail2ban/filter.d/nginx.conf ##可以測試條件規(guī)則是否可用
shell > service fail2ban restart ##重啟服務(wù)
shell > fail2ban-client status ##可以看到有兩個實例在監(jiān)控中
Status
|- Number of jail: 2
`- Jail list: nginx, ssh-iptables
##開始測試,通過腳本或者不管刷新頁面測試 Nginx 防護(hù)( 便于測試脂崔,可以將 maxretry 的值調(diào)為 10 )
shell > fail2ban-client status nginx ##可以看到被 Ban 掉的 IP
Status for the jail: nginx
|- filter
| |- File list: /var/log/httpd/access_log
| |- Currently failed: 1
| `- Total failed: 39
`- action
|- Currently banned: 1
| `- IP list: 192.168.214.1
`- Total banned: 1
Linux下使用extundelete實現(xiàn)文件/文件夾數(shù)據(jù)恢復(fù)
注意事項
恢復(fù)文件的時候一定要卸載磁盤分區(qū)
1.首先關(guān)閉防火墻和SELINUX
2.在虛擬機(jī)上創(chuàng)建一個2G的磁盤
# fdisk /dev/sdb
n+p+1+回車+回車+w
4.使分區(qū)無需重啟就能生效
# partx -a /dev/sdb
5.格式化為ext4分區(qū)并掛載
# mkfs.ext4 /dev/sdb1
# mkdir /data
# mount /dev/sdb1 /data
注: 在實際線上恢復(fù)過程中滤淳,切勿將extundelete安裝到你誤刪的文件所在硬盤,這樣會有一定幾率將需要恢復(fù)的數(shù)據(jù)徹底覆蓋砌左。
建議加裝一塊硬盤將extundelete安裝到此硬盤脖咐,再做以下操作。
二.extundelete安裝
1.安裝依賴包
2.下載并安裝extundelete
# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
# tar -jxvf extundelete-0.2.4.tar.bz2
# cd extundelete-0.2.4
# ./configure --prefix=/usr/local/extundelete
# make && make install
3.驗證是否安裝成功
# cd /usr/local/extundelete/bin
# ./extundelete -v
4.設(shè)置環(huán)境變量
# echo "PATH=/usr/local/extundelete/bin:$PATH" >> /etc/profile
# echo "export PATH" >> /etc/profile
# source /etc/profile
5.上傳一些圖片汇歹,安裝包等文件到/data目錄
# cd /data
# yum install lrzsz -y
# rz
-------------
本地文件.....
-------------
# ls
------------------
lost+found ?mysql-5.6.10.tar.gz ?nginx.conf ?pic.jpg
------------------
6.全部刪除
# rm -rf *
7.查看被刪除文件
1).查看前需卸載該磁盤分區(qū)
# cd ~
# umount /dev/sdb1
2).查看文件
注:一般一個分區(qū)掛載到一個目錄下時屁擅,這個”根”目錄的inode值為2
我們?yōu)榱瞬榭锤夸浰形募圆榭捶謪^(qū)inode為2的這個部分
# extundelete /dev/sdb1 --inode 2
--------------------------------
.....
File name ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | Inode number | Deleted status
. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2
.. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2
lost+found ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?11 ? ? ? ? ? ? Deleted
mysql-5.6.10.tar.gz ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 12 ? ? ? ? ? ? Deleted
nginx.conf ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?13 ? ? ? ? ? ? Deleted
pic.jpg ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 14 ? ? ? ? ? ? Deleted
--------------------------------
注:標(biāo)記為”Deleted”的文件則是被刪除的文件
8.恢復(fù)指定的文件
注: 默認(rèn)被刪文件會恢復(fù)到當(dāng)前目錄下的RECOVERED_FILES目錄中去
# extundelete --restore-file pic.jpg /dev/sdb1 ?
# cd RECOVERED_FILES/
# ll
----------------
-rw-r--r-- 1 root root 52592 8月 ?13 07:18 pic.jpg
----------------
9.完全恢復(fù)設(shè)備上文件
# extundelete --restore-all /dev/sdb1
# ll
-----------------------------------
總用量34464
-rw-r--r-- 1 root root 35174149 8月 ?13 07:24 mysql-5.6.10.tar.gz
-rw-r--r-- 1 root root ? ? 4551 8月 ?13 07:24 nginx.conf
-rw-r--r-- 1 root root ? ?52592 8月 ?13 07:18 pic.jpg
-rw-r--r-- 1 root root ? ?52592 8月 ?13 07:24 pic.jpg.v1
-----------------------------------
注:這里完全恢復(fù)并不會把之前恢復(fù)的pic.jpg文件覆蓋掉产弹,而是重命名為pic.jpg.v1
10.恢復(fù)指定的時間點后被刪文件
1).指定一個時間點
# date -d "Sep 4 03:09:13 2013" +%s
------------------
1378235353
------------------
2).恢復(fù)這個時間點后的文件
# extundelete --restore-all --after “1378235353” /dev/sdb1
--------------------
..........
--------------------
注:如果要恢之前的就用before參數(shù)派歌。extundelete命令與after結(jié)合使用,在進(jìn)行恢復(fù)時非常有用,可以過濾掉那太舊的文件胶果,減小恢復(fù)壓力匾嘱。
11.檢驗是否恢復(fù)成功
# md5sum RECOVERED_FILES/mysql-5.6.10.tar.gz
------------------------------------
9dcee911fb4bc7e977a6b63f4d3ffa63??RECOVERED_FILES/mysql-5.6.10.tar.gz
------------------------------------
上傳剛才誤刪的mysql安裝包
# rz
...
# md5sum mysql-5.6.10.tar.gz
---------------------------------
9dcee911fb4bc7e977a6b63f4d3ffa63??mysql-5.6.10.tar.gz
---------------------------------
MD5值相同,恢復(fù)成功早抠。霎烙。。
-----------大功告成-------------
5.寫出你認(rèn)為的運(yùn)維是什么
保證代碼上線后贝或,你的服務(wù)正常能夠被用戶訪問吼过。