擋掉溢位入侵駭客(病毒)的 Script. 如下
grep "URI too long" /var/log/apache/error.log| awk '{FS="client ";print $2}'|awk '{FS="] request";print $1}'| sort|uniq|grep [0-9.]| awk '{print "/usr/sbin/iptables -A INPUT -s "$1" -j DROP"}'
取自 用 iptables 擋掉可能是新病毒的連線
不過. 知道自己的 Apache 有溢位的漏洞,
應該要去修補 Apache 才對呀.. XD
解說:
以下取自 用 iptables 擋掉可能是新病毒的連線
因為這個 script 有點長, 分別解釋一下用途,
指令之間是以管道(pipeline, | )隔開, 讓前一個指令輸出的結果當成下一個指令的輸入.
1. grep "URI too long" /var/log/apache/error.log
從 apache 的錯誤紀錄中, 找到偶 "URI too long" 這個字串的紀錄, 而會有這個連線的電腦, 可能是中毒的電腦.
2. awk '{FS="client ";print $2}'|awk '{FS="] request";print $1}'
這是兩個指令, 不過功能是一組的, 也就是將紀錄中, 屬於 IP 的部份抓出來, 所以用 awk 來去頭去尾.
3. sort|uniq
這也是兩個指令, 功能是將重覆的 IP 消除, 所以先以 sort 將剛剛抓到的資料排序, 再以 uniq 指令, 將同樣的資料只取一次
4. grep [0-9.]
這個比較特別, 由於抓出來的資料有幾筆會有問題, 所以用 grep 過濾, 只抓看起來像 IP 的資料.
(註: 後來改成了 grep [0-9]|grep "." , 因為 grep [0-9.] 還是會有些看起來是日期的資料留下來, 所以分成兩個步驟, 可以比較確實的過濾掉.
5. awk '{print "/usr/sbin/iptables -A INPUT -s "$1" -j DROP"}'
將剛剛抓下來的資料, 改寫成 iptables 的用法, 也就是:
-A INPUT : 對本主機的連線
-s 剛剛抓的資料 : 如果是從可能中毒的電腦來的
-j DROP : 就丟掉....
如果上面的 script 沒有問題, 應該可以看到類似以下的結果:
/usr/sbin/iptables -A INPUT -s 192.168.0.3 -j DROP
/usr/sbin/iptables -A INPUT -s 192.168.0.21 -j DROP
/usr/sbin/iptables -A INPUT -s 192.168.1.32 -j DROP
/usr/sbin/iptables -A INPUT -s 192.168.1.40 -j DROP
/usr/sbin/iptables -A INPUT -s 192.168.1.77 -j DROP
之後就可以選擇幾種作法:
1. 直接用 xargs 執行
2. 將結果寫入 /etc/rc.d/rc.firewall.uritoolong (舉例)
3. 使用 crontab 定期執行這個 script
舉一反三:
1. 以同樣的原理, 也可以將 root.exe , /script/*.dll , MSOffice/ , _vti_ 等字串列入, 因為這幾個也是中毒後的電腦會嘗試攻擊的連線, 如果不屬於自己管理的網域, 就擋掉.
2. 以同樣的原理, 如果屬於自己管理的網域, 就可以查到中毒的電腦, 先將電腦離線以免再傳染.
引用:
awk '{print "/usr/sbin/iptables -A INPUT -s "$1" -j DROP"}'
-s的解釋應該如下
-s:位址[遮罩] [!][連接埠[:port]]
我們可以指定來源連接埠的範圍
這部份設為"$1"有點不太懂
在這邊的 $1 是變數, 你把他想成 ip 就是了.
可以了解嗎?
原來那是變數喔
FW_IP="163.26.197.8"
類似這樣子嗎?
嗯~~ $1 是 awk parse 回來的東西暫存變數,
就類似你說的那樣子沒錯 🙂