目標:模擬生產環境的基本拓撲,實現通過源位址轉換內網多台主機公共乙個ip位址訪問網際網路,並通過目標位址轉換,把www等多個伺服器放到互聯中,並實現安全控制,基本拓撲結構如下:
在這個拓撲結構中來說,就是區域網中的機器都可以訪問網際網路中的web1,區域網中的機器也可以訪問web2與內部ftp(電腦配置有限以www為例),外部的web1看做客戶端也可以訪問web2,並實現對訪問進行一些控制,比如對firea的ssh嚴格控制,以防攻破第一道牆。用兩個防火牆的意義在於如果dmz中的伺服器被攻破而不會對內網造成影響,下面慢慢來說這個實驗吧。
一,實驗準備
1.1 用虛擬機器模擬出4臺安裝了redhat5.8的機器,分別對應web1,firea,web2,fireb,真實的物理主機作為區域網中的一台機器,其中fire的機器需要兩塊網絡卡。
1.2 根據拓撲結構圖我們來配置虛擬機器網絡卡需要的連線方式。
web1:eth0 橋接
firea:eth0 橋接; eth1 host-only
web2:eth0 host-only
fireb:eth0 host-only;eth1 橋接
1.3 根據拓撲圖設定他們的ip位址,閘道器,路由等
web1:eth0 ip:1.1.1.2/8 gateway: 1.1.1.1
firea:eth0 ip:1.1.1.1/8 eth1 192.168.1.1 gateway:192.168.1.254
web2:eth0 ip:192.16.1.2/24 gateway:192.168.1.1
fireb:eth0 ip:192.168.1.254/24 eth1:172.16.1.1/16 gateway:192.168.1.1
ifconfig eth0 1.1.1.2/8##設定ip
route add default gw 1.1.1.1
##設定閘道器
1.4 web1,web2配置乙個簡單的站點。
這個此處就不在贅述。
1.5 開啟firea,fireb的**功能
echo 1 > /proc/sys/net/ipv4/ip_forward到此網路已經連通,主機之間可以相互訪問,但是這在現實網路中是行不通的,因為公網的位址是不能訪問私網位址的,這就用到了位址轉換。
二,源位址轉換實現多台主機通過乙個ip上網,同時隱藏區域網主機,增加安全性。
從拓撲中可知lan1訪問web1得通過兩個防火牆,這意思是說位址需要轉換兩次。
iptables -t nat -a postrouting -s 172.16.0.0/16 -j snat --to-source 192.168.1.254通過fireb後資料幀中的 源ip:172.16.1.2 目的ip:1.1.1.2 變為 源ip:192.168.1.254 目的ip:1.1.1.2
iptables -t nat -a postrouting -s 192.168.1.254/24 -j snat --to-source 1.1.1.1通過fireb後資料幀中的 源ip:192.168.1.254 目的ip:1.1.1.2 變為 源ip:1.1.1.1 目的ip:1.1.1.2 資料到達web1.web1收到後對資料進行響應,源ip: 1.1.1.2 目的ip:1.1.1.1 經過firea,firea發現這個是轉換過位址的封包,於是查詢內部的表得知原來的ip位址,於是便還原回原來的位址這時 源ip:1.1.1.2 目的ip:192.168.1.254 當資料幀到達fireb後發現這個是轉換過位址的封包,於是查詢自己內部的表得知對應的ip位址,這時 源ip:1.1.1.2目的ip:172.16.1.2 整個過程到此為乙個迴圈,會話正常建立。
訪問web1的站點,然後查詢web1的access日誌,檢視訪問ip是否與分析的一致。
三.通過目標位址轉換,多台伺服器公用乙個公網ip,並實現正常訪問
由於我們只有乙個公網ip,但是我們有多種服務提供,比如說www,如果說ftp等等,私網ip公網上的其它主機又訪問不到,公網ip也只有乙個,這個時候我們就用目標位址轉換吧。以web1訪問web2為例,先來操作,後來解釋。
iptables -t nat -a prerouting -p tcp --dport 80 -j dnat --to-destination 192.168.1.2這時web1訪問1.1.1.1的80 即可訪問web2的站點。web1發出的資料幀 源ip:1.1.1.2 目標ip:1.1.1.1 經過firea時,發現訪問的是80埠,自己本身沒有提供web服務,於是轉換目的位址,源ip:1.1.1.2 目的ip:192.168.1.2 這時資料報就順利到達了web2,web2作出響應,源ip:192.168.1.2 目的ip:1.1.1.2 經過firea,firea發現這個包曾位址轉換過於是,便把位址還原回來,這時源ip:1.1.1.1 目的ip:1.1.1.2 資料報到達web1,乙個迴圈結束,會話建立。
四.通過iptables來實現訪問控制。
由於美帝國主義亡我之心不死,見從經濟與軍事無法戰勝我大中華,於是便派這種怪客啊,***等從網路上對我國安全構成威脅,於是我們偉大 網際網路專家、國家防火牆之父、集各種名譽為一身的科學家 方濱興 大人首先舉起了反抗的大旗,構築了偉大的國家防火牆,很大程度上減少了對我們的***。但是我們也不能放鬆警惕,時刻提高自我的安全意識……扯太遠了,繼續說我們的iptables吧。
4.1 把所有的預設策略設定為drop,然後針對性的放行。
##firea設定iptables -p input drop
iptables -p output drop
iptables -p forward drop
##放行本機sshd以允許管理員遠端 ##當然最好配合修改ssh埠號,禁止root登陸等
iptables -a output -m state --state established -j accept ##凡是建立連線的都讓出去
iptables -a input -p tcp --dport 22 -m state --state new -m recent --set --name ssh
iptables -a input -p tcp --dport 22 -m state --state new -m recent --update --seconds 60 --hitcount 3 --name ssh -j drop
iptables -a input -p tcp --dport 22 -m connlimit ! --connlimit-above 3 -j accept ##放行 ssh
4.2 放行外網對80的訪問(以及對你已知埠的訪問)
##所有建立的連線都予以**iptables -a forward -m state --state established -j accept
##對放鬆進來的埠為80的資料報
iptables -a forward -d 192.168.1.2 -p tcp --dport 80 -m state --state new,established -j accept
4.3 放行來自192.168.1.254 即來自內網需要出去的包,一般對內網出去的包設定稍微寬鬆點,針對不同的生產環境,設定不同的嚴厲程度。
##放行內網出去的所有包 ##也可以設定寬鬆點iptables -a forward -s 192.168.1.254 -j accept
4.4 設定fireb,設定ssh的限制,允許已建立的連線通過**,不允許所有new狀態包通過
##這個防火牆稍微寬鬆些吧,預設政策就是允許吧##設定ssh與firea的相同
##禁止所有進入區域網為new狀態的包
iptables -a forward -m --state new -j drop
4.5 限制內網的某個搗亂機器連線外網,遮蔽其mac
iptables -a forward -s 172.16.0.0/16 -m mac --mac-source ##:##:##:##:##:## -j drop4.6 過濾內網中訪問包含***字串的內容
iptables -a forward -s 172.16.0.0/16 -m string --algo kmp --string '***' -j drop##當然也可以對第一道防火牆那也這麼設定
4.7 如果想對內網中某些軟體的過濾需要重新編譯核心與iptables,比如用l7layer來給核心打補丁,然後編譯iptables,用來過濾qq,迅雷等,如果有需要訪問 。
iptables 先寫到此吧,如果你按一下贊,我會灰常感謝你的。
iptables 實現位址轉換與安全控制
目標 模擬生產環境的基本拓撲,實現通過源位址轉換內網多台主機公共乙個ip位址訪問網際網路,並通過目標位址轉換,把www等多個伺服器放到互聯中,並實現安全控制,基本拓撲結構如下 在這個拓撲結構中來說,就是區域網中的機器都可以訪問網際網路中的web1,區域網中的機器也可以訪問web2與內部ftp 電腦配...
iptables配置 NAT位址轉換
iptables nat 原理 同filter表一樣,nat表也有三條預設的 鏈 chains 把從外來的訪問重定向到其他的機子上,比如內部server,或者dmz。因為路由時只檢查資料報的目的ip位址,所以必須在路由之前就進行目的prerouting dnat 系統先prerouting dnat...
Redis 中list的實現(位址傳值)
include adlist.h include include include includeint main printf s n pd free pb i free pd free pd printf n listnode p null p t head if p prev null whil...