自動透過 iptables 封鎖 IP 黑名單
網路的世界,總是存在一群隱密的駭客,無時無刻連線網路上主機所開放的任何連接方式,來嘗試入侵或破壞。當完成一台主機的部署之後,第一件要做的就是建立安全區的連線,透過基本的 iptables 設定,在最短時間將主機設定允許的連線區域,避免在軟體環境尚未更新或設定前就被攻破。
這看似十分安全,但當主機真正開始提供服務時,部份需公開的服務就可能不受 iptables 設定保護(如 WEB,匿名FTP),此時,我們也沒辦法告訴 iptables 誰可能駭客,也不可能隨時盯著連線IP來分析。這時就會想,如果有誰能告訴我那些 IP 可能是危險的那有多好?!
www.spamhaus.org 提供了一個固定更新的黑名單,會自動將網路上不法的 IP 定期記錄於 http://www.spamhaus.org/drop/drop.lasso 清單當中,因此,我們可以透過 Shell 腳本 + Crond 自動排程,每天自動下載該清單,並寫入我們的 iptables 設定中來阻擋那些可疑的 IP 。
依據官方解釋,這些 IP 網段主要是被用來當做發送垃圾封包使用,因此,這並不能有效的阻擋真實 IP 的攻擊,若要對真實 IP 來查驗,那可能只能多透過腳本寫出針對本機連線的次數、特性等分析加阻擋。但無論如何,我們還是把它列入阻擋清單當中吧。
我習慣將 iptables 寫成腳本來呼叫,這樣一來方便備份設定,另外也能快速加入新的條件,如果了解 iptables 運作,可以參考上面的圖。
接下來,來看基本型的 iptables 腳本(set_iptables.sh)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#!/bin/bash
#
# iptables 基本設定腳本檔
#
# 將 iptables 清空重設,只允許指定的服務連線
#
PATH=/sbin:/bin:/usr/sbin:/usr/bin; export PATH
### iptables 清空初始化 ###
iptables -F # 清空所有鏈的規則
iptables -X # 刪除所有非內建的鏈
iptables -Z # 將所有的計數器歸零
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
### 允許本機和已經建立連線的封包通過 ###
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state - -state RELATED,ESTABLISHED -j ACCEPT
### icmp 全部開放 ###
iptables -A INPUT -p icmp -j ACCEPT
### sshd 內網 開放 ###
iptables -A INPUT -p tcp -s 192.168.1.0/24 - -dport 3322 -j ACCEPT
### nginx 全部開放 ###
iptables -A INPUT -p tcp - -dport 80 -j ACCEPT
### 儲存設定檔給下次開機使用 ###
iptables -save > /etc/sysconfig/iptables
|
當我需要更改服務的 port 或添增時,我就只要更改這個腳本檔,並再重新呼叫。
再來看看如何達成自動下載 drop list 並生效的腳本(set_iptables_drop_lasso.sh)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#!/bin/bash
#
# iptables 阻擋黑名單腳本
#
# 透過下載 http://www.spamhaus.org/drop/drop.lasso 提供的黑名單
# 產生一組專門阻擋的 chain,並建議使用 link (ln) 至 crond 來達成每日自動更新
#
PATH=/sbin:/bin:/usr/sbin:/usr/bin; export PATH
### 設定暫存檔與 drop.lasso url
FILE= "/tmp/drop.lasso"
CHAIN_NAME= "DropList"
### 準備開始 ###
echo ""
echo "準備開始產生 $CHAIN_NAME chain 至 iptables 設定中"
### 下載 drop.lasso ###
[ -f $FILE ] && /bin/ rm -f $FILE || :
cd /tmp
wget $URL
blocks=$( cat $FILE | egrep -v '^;' | awk '{ print $1}' )
### 清空與產生 chain ###
iptables -F $CHAIN_NAME 2>/dev/null
iptables -N $CHAIN_NAME 2>/dev/null
### 放入規則 ###
for ipblock in $blocks
do
iptables -A $CHAIN_NAME -s $ipblock -j DROP
done
### 刪除並放入主 chain 生效
iptables -D INPUT -j $CHAIN_NAME 2>/dev/null
iptables -D OUTPUT -j $CHAIN_NAME 2>/dev/null
iptables -D FORWARD -j $CHAIN_NAME 2>/dev/null
iptables -I INPUT -j $CHAIN_NAME 2>/dev/null
iptables -I OUTPUT -j $CHAIN_NAME 2>/dev/null
iptables -I FORWARD -j $CHAIN_NAME 2>/dev/null
### 刪除暫存檔 ##
/bin/ rm -f $FILE
### 完成 ##
echo "已完成"
|
這個腳本的內容我就不再詳加解釋,有興趣的就再研究看看啦。
留言列表