實 驗 目 標
KEYNES 實作防火牆Policy 較同意於前端網路設備Juniper SSG 5, Cisco ASA
設置防火牆相關Policy與NAT轉譯,本例將測試主機型態Firewall IPTABLES
經執行後,其設計觀念與Cisco ACL List 類似,因此KEYNES覺得還蠻容易上手
另外 IPTABLES 可設計為 主機型閘道防火牆應用,也可以使用NAT 功能
IPTABLES 工具另外掛許多模組可以阻斷DDOS,SPOOLING 外來攻擊
(當然最重要是將可替省錢企業省下購買硬體試防火牆經費)
防火牆可攜性: 運用Linux 平台底下IPTABLE,我們可將所以Policy 寫成一個bash script
檔案,隨意修改檔案內容,方便複製移轉至他台機器運行
最後編寫 /etc/rc.d/rc.local/ 讓其 bash script 開機時自動運作
(1) 牛刀小試(二): 建立第一條Policy
iptables -A INPUT -p tcp -m state --state INVAID -j Drop
# 比對INPUT 方向條件, 比對封包協定 為 tcp , -m state INVAID -J Drop
使用state 模組,偵測對方若是"狀態不明封包"即丟棄該封包
(2) 牛刀小試(二): 建立第二條Policy
iptables -A INPUT -p tcp -s 192.168.0.198 -d 192.168.0.197 --dport 22 -j ACCEPT
# SSH 端連線主機: 192.168.0.198
IPTABLES 主機 : 192.168.0.197(亦是本機)
眼尖的讀者可以查得目前INPUT Chain Default Policy 為 ACCEPT(預設為ACCEPT)
故在我們還沒建立上述第二條Poicy 時, 來源端IP 192.168.0.198 是無法連線到
IPTABLES 主機 : 192.168.0.197 的 22 Port 進行遠端主機管理
Default Poicy : 視為每個Chain 最後一條Policy ,與 Cisco ACL 類似比對方式
IPTABLES 依序是從第一條Policy 往下比對至最後一條Policy 比對方式
我們隨後將INPUT Chain Default Policy 更改為DROP 以符合企業需求
(3) 牛刀小試(三): 更改INPUT Chain Default Policy 由 ACCEPT 變為DROP
iptables -P INPUT DROP
(4) 牛刀小試(四): 利用 參數 I 插入一條policy 於指定行數
iptables -I INPUT 2 -p icmp -d 192.168.0.197 -j ACCEPT
#插入一筆Policy 於INPUT中第2行, 內容: 開放所有來源端可以Ping通防火牆主機
接下來我們利用192.168.0.198 去Ping 192.168.0.197 這台主機,測試是否會Ping通
#由下圖可知在未加入上述筆條例時,彼此是無法Ping通,經icmp開放後得已ping通該主機
現在我們要刪除上述Policy(icmp) ,可利用參數 -D 刪除 Chain 中某一筆Policy
iptables -D INPUT 3
# 下圖為我們要刪除 來源端: anywhere ->目的端: 192.168.0.197
這條例 ,該條例為第3行數
(5) 牛刀小試(五): 新增一筆條例,讓192.168.0.198 可以存取Firwall 主機上VSFTPD 服務
iptables -A INPUT -p tcp -s 192.168.0.198 -d 192.168.0.197 --dport 21 -j ACCEPT
利用192.168.0.198 主機去 telnet 192.168.0.197(F/W )的21Port Success
(6) 牛刀小試(六):
以下圖為例,我們將.198 主機 連線到.197 : 80 ACCEPT
利用參數 -R : 可做取代條例之用
iptables -R INPUT 5 -p tcp -s 192.168.0.198 -d 192.168.0.197 --dport 80 -j REJECT
(7) 牛刀小試(七): 將所有iptables 寫成一個shell script 檔案以執行
主機型F/W
vi fw.sh
# /bin/bash
fw=/sbin/iptables
Default= 192.168.0.100
Block1= 10.10.10.0/24
#Clear Policy & Set Defualt Policy as Drop
iptables -t filter -F
iptables -t filter -P INPUT DROP
#Rules
$fw -A INPUT -p tcp -m state --state INVALID -j DROP
$fw -A INPUT -p tcp -d $Default --deport 22 -j ACCEPT
$fw -A INPUT -p tcp -d $Default --deport 53 -j ACCEPT
$fw -A INPUT -p tcp -d $Default --deport 80 -j ACCEPT
$fw -A INPUT -p tcp -d $Default --deport 25 -j ACCEPT
$fw -A INPUT -p tcp -d $Default --deport 110 -j ACCEPT
$fw -A INPUT -p tcp -s $Block1 -d $Default --deport 22 -j REJECT
$fw -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
建構FW Script 完成後請執行
chown root:root fw.sh
chmod 700 fw.sh #修改權限
./fw.sh #修改完成請手動執行此Script
開機運行此Script
vi /etc/rc.d/rc.local
/usr/local/bin/fw.sh #插入此行即可
參考資料: Linux 網路安全技術與實現/悅知/陳勇勳