Linux核心中有著內建防火牆,iptables
防火牆乍聽之下難以親近,但iptables運作原理是很單純的
不外乎是正面列舉或是負面列舉的概念:
正面列舉:預設條件是全部拒絕,唯有滿足列舉出的條件方得通過
負面列舉:預設條件是全部接受,唯有滿足列舉出的條件會被拒於門外
如何?不難理解吧,那就開始操作iptable的設定吧!
首先先來讀看看預設的iptables規則如何設定,在此使用iptables-save來讀取目前的設定值
單純使用iptables-save指令時,目前的規則會顯示在主控台上
而為了基於目前的設定來作修改,我們把內容印在檔案中,之後改完檔案後再使用iptables-restore將規則存回,操作上方便很多。
將iptables規則重導向到文件內:
#iptables-save > 任意文件
使用vim讀看看預設的規則長何樣:
# Generated by iptables-save v1.4.7 on Thu Apr 4 20:20:29 2013
*filter
:INPUT ACCEPT [0:0] //進入封包預設條件為全部通過
:FORWARD ACCEPT [0:0] //轉發封包預設條件為全部通過
:OUTPUT ACCEPT [431:50629] //發出封包預設條件為全部通過
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
//已建立連線狀態的封包予以通過
-A INPUT -p icmp -j ACCEPT //icmp封包予以通過(讓別人可以ping你)
-A INPUT -i lo -j ACCEPT //來自內部迴路的封包予以通過
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
// 欲建立於port-22的封包予以通過
-A INPUT -j REJECT --reject-with icmp-host-prohibited //不滿以上規則的統統拒絕!
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Apr 4 20:20:29 2013
iptables的規則分為三群:
INPUT:進入系統的封包該受到何種過濾方法
OUTPUT:從系統發出的封包該受到何種過濾方法
FORWARD:從系統轉發的封包該受到何種過濾方法
而過濾流程是序列式的,照著規則由上至下判定條件並決定動作,動作就是 -j 所描述,條件就是動作以外的描述部份(很像C語言中的 if(條件){動作}語句塊),
你也可以視iptable照此scripts依序執行動作,所以設定規則的順序是很重要的!
從上面的預設規則可以看出,預設防火牆只允許SSH通過,為了之後能讓其他服務通過,有必要改一下預設設定。
宅哥家裡是以一台router連結所有區網內的電腦,目前不想對外部網路進行開放,想作出以下設定:
- 預設政策為丟棄所有封包
- 只開放內部網路(192.168.0.0/24)通過
- 對於外部網路而言…好啦勉強能讓我連進ssh就好(至少留了一扇回家的門)
那麼我們就通過預設設定檔進行修改:
# Generated by iptables-save v1.4.7 on Thu Apr 4 21:38:30 2013
*filter
:INPUT DROP [15:888] // 進入封包預設為全部拒絕!
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [629:126630]
-A INPUT -i lo -j ACCEPT // 來自內部迴路的封包予以通過
-A INPUT -s 192.168.0.0/24 -j ACCEPT // 來自區域網路的封包予以通過
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
// 欲建立於port-22的封包予以通過(來自外部網路也過的去喔)
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
// 已經建立連線的封包予以通過(這是讓SSH能維持連線的規則)
COMMIT
# Completed on Thu Apr 4 21:38:30 2013
很簡單的設定吧!然後將此設定載回iptables服務:
#iptables-restore < 新設定設定完記得存個檔:
#iptables-save > 備份檔名如此以來我的SERVER就在網際網路上隱形啦,應該變的比較安全
做完以上幾個動作之後會發現,疑,怎麼我重開機後,防火牆整個糟金(台語)去?
那是因為iptable又載入的規則啦!
所以我們要在開機自訂腳本內加上自己想跑的流程:
#vim /etc/rc.d/rc.local
加上:
iptables-restore < 新設定
後記:本來想嘗試開放特定硬體位址(MAC)通過,比方說我的筆電,希望能讓他也可以在任何網域也能進入這台伺服器,但最終得知受到路由器遮蔽的情形下,最後進入伺服器的封包硬體位址(MAC)會是路由器的,無法辨識出是不是來自特定設備,此解行不通,仍在想辦法…
接著準備來練習森巴舞了(Samba),彭掐掐、掐掐…
(To Be Continued)