■ 河南 郭建偉
編者按:在實際的網絡管理中,為了提高運維效率,管理員會使用Zabbix,Ansible 等工具,來實現(xiàn)自動管理行為。例如,監(jiān)控服務器的狀態(tài),部署各種軟件等。但是,這些工具配置和使用起來比較繁瑣,而且在一些特殊的場合并不適用。其實,系統(tǒng)自身已經提供了強大的Shell 腳本功能,利用各種簡單的命令,可以很輕松的實現(xiàn)各種自動化操作。這里就結合實例,來說明具體的實現(xiàn)方法。
自動攔截非法攻擊
對于公網上的服務器來說,如何提高其安全性,保證其可靠的運行,是管理員必須面對的問題。
對于頻繁的攻擊行為,如何將其自動屏蔽,避免其危害服務器的運行呢?例如很多服務器開啟了SSH 遠程訪問服務,在利于管理員工作的同時,也會招致諸如掃描端口、猜測密碼和非法登錄等攻擊。
除了設置復雜的密碼,啟用SSH 密鑰認證的方法外,還可以利用系統(tǒng)NetFilter防火墻,配合Shell 腳本,自動屏蔽各種惡意IP,來保護服務器的安全。例如,執(zhí)行“tail -fn 100 /var/log/secure”命令,可能會發(fā)現(xiàn)“Failed pasword”開頭的警告信息,說明系統(tǒng)已經記錄了非法的嘗試登錄行為。
執(zhí) 行“vi zdfh.sh”命令,輸入“#!/bin/sh”,“SEC_File=/var/log/secure”,“I P_ADDDR= tail -n 1000 /va r/log/secure } grep "Fail ed password" | egrep -o "([0-9]{1.3}.){3}[0-9]{1.3}" sort -nr |uniq -c |awk ' $1>=3 {print $2}'”,“IPTABLE_CONF=/etc/sysconfig/iptables”,“ech o”,“cat </dev/null”,“if”,“[$? -ne 0];then”,“sed -I "/lo/a -A INPUT -s $im state --state NEW -m tcp -p tco --dport 22 -j DROP "$IPTABLE_CONF" "else”,“echo " 已 經 存 在先關IP 紀錄信息"”,“fi”,“done”,“/etc/init.d/ipta blesrestart”行。
保存該腳本。
該腳本的原理是從“/var/log/secure”文件中讀取針對SSH 訪問的非法的登錄信息,這里提取其后1 000行的紀錄,將所有的可疑IP提取出來,并計算出其嘗試登錄的次數(shù)。如果其登錄的此時超過3 次,那么就在防火墻規(guī)則中針對該IP 添加攔截紀錄。
例如,“-A INPUT -s x.x.x.x -m state --state NEW -m tcp -dport 22 -j DROP”等。如果在防火墻規(guī)則中已經存在該IP 信息,那么僅僅顯示提示信息。當配置好防火墻規(guī)則后,重啟防火墻時規(guī)則生效。除了手工執(zhí)行外,還可以將其和計劃任務結合起來使用。例如,執(zhí)行“crontab -e”命令,輸入“0/2 /opt/data/auto_deny.sh”行,每隔2 h 執(zhí)行一次該腳本。
實現(xiàn)遠程復制和執(zhí)行
在實際管理網絡時,經常需要批量復制文件到遠程服務器。利用Shell 腳本,可以輕松解決該問題。
執(zhí) 行“vi zdfzfile.sh” 命 令,創(chuàng) 建 名 為“zdfzfile.sh” 的 文件, 輸 入“#!/bin/sh”,“#SRC=/etc/”,“if [! -f ip.txt ];then”,“echo -e "