網路安全之iptables實驗篇一

餘二五發表於2017-11-23
linux下iptables的重要性大家都不陌生吧?今天就以實驗的形式把iptables的基本配置簡要總結一下,還請大家不吝賜教,多多斧正才好!有關iptables的具體語法和格式將在理論部分具體闡述,在這裡就不贅述了。
先來回顧一下iptables的語法格式:
iptables [ -t table ] COMMAND chains [ num ] match condition –j Action
table 表示的是一個表名,例如:filter nat mangle 等。
COMMAND 對鏈規則進行管理,常用引數為:-A -I -R -D等。
若要對鏈本身進行管理,則常用引數為: -F -P -N -X 等。
match condition 表示匹配規則。
Action 表示要執行的動作。
例如:
iptables –t filter -A OUTPUT –s 192.168.0.83 –d 192.168.0.82 –p tcp –dport 80 –j REJECT
閒話少說,開始做實驗吧!
實驗一:用iptables鏈拒絕主機ping
所搭建的實驗環境為:兩臺RehHat linux虛擬機器。
IP地址分別為:192.168.0.82 192.168.0.86
在預設情況下,兩臺虛擬機器是可以互相ping通的,現在我們為了模擬真實環境,假定192.168.0.82的主機為伺服器,192.168.0.86的主機為客戶機,為了保證伺服器的安全,我不允許客戶機來ping我的伺服器。所以呢,我們目的是讓這兩臺虛擬機器不能ping通,我們可以用iptables很輕鬆的來實現。
clip_image001
在進行配置之前,先來測試一下兩臺主機是否可以ping通。
clip_image002
現在就來設定一下,讓PC2不能ping通PC1,那麼該如何設定呢?
規則如下:設定好之後要記得檢視一下是否生效。
clip_image004
再從PC2上ping 一下PC1,結果顯示是沒有反應。
上面的iptables鏈的意思就是說:當來自192.168.0.86主機通過ICMP協議來連結192.168.0.82主機時,PC1所做的動作是DROP(忽略:既不響應,也不拒絕)。打個比方吧:PC2對PC1打招呼(PC2 嘗試pingPC1),但是PC1就是不理你,把PC2當空氣了(iptables鏈所定義的規則)。因此,主機PC2當然不能ping通主機PC1了。
clip_image005
當主機PC2來ping主機PC1時,PC1的反應還有可能是立即拒絕PC2,命令為:
iptables –t filter -A INPUT –s 192.168.0.86 –d 192.168.0.82 -p icmp –icmp-type 8
-j REJECT
新增完命令時要養成檢視,命令是否新增成功的好習慣。
【注:】與前面一幅圖對比,可以發現執行iptables –L –t命令後,顯示的結果仍然是一條,因為在寫iptables鏈之前,執行了iptables –F的命令,因此,就可以知道iptables —F 命令的意思就是清除上一次的iptables鏈。
clip_image007
再次用主機PC2來ping主機PC1時,就可以看到顯示的結果與前一條命令的不同之處了。
clip_image008
【思考:】如果允許主機PC2可以ping通主機PC1,該如何設定呢?
對啦!就是把第二條iptables鏈中的REJECT改為ACCEPT就行了。
【擴充:】上面的實驗是對進入PC1的ping資料進行拒絕,如果不想讓PC1的ping資料外界傳送,那麼命令就要改為:
iptables –t filter –A OUTPUT –s 192.168.0.82 –d 192.168.0.86 –p icmp –icmp-type 0
-j REJECT
由於上面的實驗中設定的是不允許ping資料進入主機PC1,那麼也就談不上PC1向外界傳送資料了。
實驗二:基於源地址的NAT轉發(將內網地址轉換為外網地址)
現在網路需求提高了,我們需要對資料進行埠轉發。具體實驗環境為三臺虛擬機器示意圖為:
clip_image010 
【注:】需要說明的是:PC1屬於內部區域網,PC2外部網 (我們所處的位置是PC1)
先來搭建實驗環境,關於PC1和PC2的設定比較簡單,手動配置IP地址就行了,有一點要說明的是PC1的閘道器指向網路卡1 ,同理,PC2的閘道器要指向網路卡2。接下來就是重頭戲伺服器的配置了。
在設定之前,要保證PC1與伺服器可以ping通,PC2與伺服器可以ping通。並且在PC1上可以ping通伺服器和PC2
clip_image011
為了使PC1能ping通PC2,要開啟伺服器的路由轉發功能。編輯/etc/systcl.conf檔案,把net.ipv4.ip_forward=0修改為1。儲存退出後,要記得重新讀取該檔案。命令為:sysctl –p
clip_image012
在PC2 上配置www服務,編輯一個測試頁面,並測試配置成功。
clip_image015
 
 
 
clip_image014
 
測試結果顯示,在本地訪問PC2的www服務是沒有任何問題的。
為了使試驗的結果明顯,在沒有進行iptables配置之前,再來從PC1端來訪問一下看是否可以成功訪問。結果顯示如下:
 
clip_image017
 
好了,實驗前的所有準備工作都完成了,現在開始實驗的重要部分:
 
1、內網訪問外網的nat地址轉換。具體配置如下:
 
clip_image019
 
使用iptables –t nat –L 來檢視一下剛才的配置是否成功。
 
clip_image021
 
再次從PC1上訪問PC2,測試是否能訪問PC2。
 
clip_image023
 
結果是可以訪問PC2的,從PC1的角度來看,配置地址轉發與開啟伺服器的路由功能得到的結果是相同的。那麼這兩者究竟有什麼區別呢?
這個問題可以到PC2上來解決,由於PC2上www的服務會記錄來訪者的日誌,我們可以通過檢視一下日誌,看看能不能發現這兩者的不同之處。如圖所示:在四個日誌記錄中,前兩次是本地測試的記錄,第三個記錄是PC1通過路由器來訪問PC2的。第
四個記錄是PC1通過地址轉換來訪問PC2的。現在該明白了吧?
 
clip_image025
實驗三 基於目標地址的NAT轉發(將外網地址轉換成內網地址)
clip_image026
【注:】需要說明的是:PC1屬於外網,PC2內部區域網 (我們所處的位置是PC2)
千萬不可與前面實驗二攪合到一起了,這是兩個完全獨立的實驗,借用前面的所搭建的實驗環境和示意圖,只是為了節省時間,還請見諒!
實驗開始前還是測試PC1可以ping通PC2,以及測試PC1可以訪問PC2的www服務。在這裡就省略測試連通性的步驟。
執行iptables –F命令清除所有已經存在的iptables鏈。實驗環境搭建好了,現在就可以直接進行配置iptables鏈了。命令如下:
iptables –t nat –A PREROUTING –s 192.168.0.0/24 –d 192.168.8.82 –p tcp –dport 80 –j DNAT –-to-dest 192.168.8.100
使用iptables -t nat –L來檢視命令是否執行。
 
 
clip_image028
 
重新登陸PC1,使用elinks 192.168.8.100訪問PC2的www服務,結果是可以訪問到PC2的www服務。切換到PC2上,檢視PC2上的www服務訪問日誌記錄,可以看到最後一行的源地址依然是主機PC1的IP地址,並沒有發生改變。
 
clip_image030
除此之外,還可以指定目標地址的轉發埠。在PC2上,把www預設的服務埠80修改為8080。
用vim編輯器開啟位於/etc/httpd/conf,找到Listen 80 這一項,把80修改8080,完成後儲存退出即可。
clip_image031
重啟www服務,命令為:service httpd restart
然後檢視8080埠是否開啟,命令為:netstat –tunl
clip_image033
 
清除所有iptables鏈,然後寫一條新的iptables鏈,命令為:
iptables –t nat –A PREROUTING –s 192.168.0.0/24 -d 192.168.0.82 –p tcp –dport 80 –j DNAT
–to-dset 192.168.8.100:8080
執行完成後,記得檢視是否新增成功。
 
clip_image035
 
重新登陸PC1,使用elinks 192.168.8.100訪問
PC2的www服務,結果是仍然可以正常訪問到PC2的www服務。切換到PC2上,檢視PC2上的www服務訪問日誌記錄,可以看到最後一行的源地址依然是主機PC1的IP地址,並沒有發生改變。
 
本文轉自 linuxtro 51CTO部落格,原文連結:http://blog.51cto.com/linuxtro/279334,如需轉載請自行聯絡原作者


相關文章