亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2866 | 回復: 0
打印 上一主題 下一主題

用iptales實現包過慮型防火墻 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-02-04 15:20 |只看該作者 |倒序瀏覽
   
用iptales實現包過慮型防火墻
一、概述
1. 什么是NAT
在傳統(tǒng)的標準的TCP/IP通信過程中,所有的路由器僅僅是充當一個中間人的角色,也就是通常所說的存儲轉發(fā),路由器并不會對轉發(fā)的數據包
進行修改,更為確切的說,除了將源MAC地址換成自己的MAC地址以外,路由器不會對轉發(fā)的數據包做任何修改。NAT(Network Address
Translation網絡地址翻譯)恰恰是出于某種特殊需要而對數據包的源ip地址、目的ip地址、源端口、目的端口進行改寫的操作。
2. 為什么要進行NAT
我們來看看再什么情況下我們需要做NAT。
假設有一家ISP提供園區(qū)Internet接入服務,為了方便管理,該ISP分配給園區(qū)用戶的IP地址都是偽IP,但是部分用戶要求建立自己的WWW服務器
對外發(fā)布信息,這時候我們就可以通過NAT來提供這種服務了。我們可以再防火墻的外部網卡上綁定多個合法IP地址,然后通過NAT技術使發(fā)給
其中某一個IP地址的包轉發(fā)至內部某一用戶的WWW服務器上,然后再將該內部WWW服務器響應包偽裝成該合法IP發(fā)出的包。
再比如使用撥號上網的網吧,因為只有一個合法的IP地址,必須采用某種手段讓其他機器也可以上網,通常是采用代理服務器的方式,但是代
理服務器,尤其是應用層代理服務器,只能支持有限的協(xié)議,如果過了一段時間后又有新的服務出來,則只能等待代理服務器支持該新應用的
升級版本。如果采用NAT來解決這個問題,
因為只在應用層以下進行處理,不但可以獲得很高的訪問速度,而且可以無縫的支持任何新的服務或應用。
還有一個方面的應用就是重定向,也就是當接收到一個包后,不是轉發(fā)這個包,而是將其重定向到系統(tǒng)上的某一個應用程序。最常見的應用就
是和squid配合使用成為透明代理,在對http流量進行緩存的同時,可以提供對Internet的無縫訪問。
3. NAT的類型
在linux2.4的NAT-HOWTO中,作者從原理的角度將NAT分成了兩種類型,即源NAT(SNAT)和目的NAT(DNAT),顧名思義,所謂SNAT就是改變轉發(fā)數
據包的源地址,所謂DNAT就是改變轉發(fā)數據包的目的地址。
二、原理
下圖是linux2.4的原理圖:
點擊打開新窗口
在“用iptales實現包過慮型防火墻”一文中我們說過,netfilter是Linux 核心中一個通用架構,它提供了一系列的"表"(tables),每個表由
若干"鏈"(chains)組成,而每條鏈中可以有一條或數條規(guī)則(rule)組成。并且系統(tǒng)缺省的表是"filter"。但是在使用NAT的時候,我們所使用的
表不再是"filter",而是"nat"表,所以我們必須使用"-t nat"選項來顯式地指明這一點。因為系統(tǒng)缺省的表是"filter",所以在使用filter功
能時,我們沒有必要顯式的指明"-t filter"。
同filter表一樣,nat表也有三條缺省的"鏈"(chains),這三條鏈也是規(guī)則的容器,它們分別是:
PREROUTING:可以在這里定義進行目的NAT的規(guī)則,因為路由器進行路由時只檢查數據包的目的ip地址,所以為了使數據包得以正確路由,我們
必須在路由之前就進行目的NAT;
POSTROUTING:可以在這里定義進行源NAT的規(guī)則,系統(tǒng)在決定了數據包的路由以后在執(zhí)行該鏈中的規(guī)則。
OUTPUT:定義對本地產生的數據包的目的NAT規(guī)則。
三、操作語法
如前所述,在使用iptables的NAT功能時,我們必須在每一條規(guī)則中使用"-t nat"顯示的指明使用nat表。然后使用以下的選項:
1. 對規(guī)則的操作
加入(append) 一個新規(guī)則到一個鏈 (-A)的最后。
在鏈內某個位置插入(insert) 一個新規(guī)則(-I),通常是插在最前面。
在鏈內某個位置替換(replace) 一條規(guī)則 (-R)。
在鏈內某個位置刪除(delete) 一條規(guī)則 (-D)。
刪除(delete) 鏈內第一條規(guī)則 (-D)。
2. 指定源地址和目的地址
通過--source/--src/-s來指定源地址(這里的/表示或者的意思,下同),通過--destination/--dst/-d來指定目的地址?梢允褂靡韵滤闹蟹
法來指定ip地址:
a. 使用完整的域名,如“www.linuxaid.com.cn”;
b. 使用ip地址,如“192.168.1.1”;
c. 用x.x.x.x/x.x.x.x指定一個網絡地址,如“192.168.1.0/255.255.255.0”;
d. 用x.x.x.x/x指定一個網絡地址,如“192.168.1.0/24”這里的24表明了子網掩碼的有效位數,這是 UNIX環(huán)境中通常使用的表示方法。
缺省的子網掩碼數是32,也就是說指定192.168.1.1等效于192.168.1.1/32。
3. 指定網絡接口
可以使用--in-interface/-i或--out-interface/-o來指定網絡接口。從NAT的原理可以看出,對于 PREROUTING鏈,我們只能用-i指定進來的網
絡接口;而對于POSTROUTING和OUTPUT我們只能用-o指定出去的網絡接口。
4. 指定協(xié)議及端口
可以通過--protocol/-p選項來指定協(xié)議,如果是udp和tcp協(xié)議,還可--source-port/--sport和 --destination-port/--dport來指明端口。
四、準備工作
1. 編譯內核,編譯時選中以下選項,具體可參看“用iptales實現包過慮型防火墻”一文:
Full NAT
MASQUERADE target support
REDIRECT target support
2. 要使用NAT表時,必須首先載入相關模塊:
modprobe ip_tables
modprobe ip_nat_ftp
iptable_nat 模塊會在運行時自動載入。
五、使用實例
1. 源NAT(SNAT)
比如,更改所有來自192.168.1.0/24的數據包的源ip地址為1.2.3.4:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 1.2.3.4
這里需要注意的是,系統(tǒng)在路由及過慮等處理直到數據包要被送出時才進行SNAT。
有一種SNAT的特殊情況是ip欺騙,也就是所謂的Masquerading,通常建議在使用撥號上網的時候使用,或者說在合法ip地址不固定的情況下使
用。比如
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
可以看出,這時候我們沒有必要顯式的指定源ip地址等信息。
2. 目的SNAT(DNAT)
比如,更改所有來自192.168.1.0/24的數據包的目的ip地址為1.2.3.4:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -i eth1 -j DNAT --to 1.2.3.4
這里需要注意的是,系統(tǒng)是先進行DNAT,然后才進行路由及過慮等操作。
有一種DNAT的特殊情況是重定向,也就是所謂的 Redirection,這時候就相當于將符合條件的數據包的目的ip地址改為數據包進入系統(tǒng)時的網
絡接口的ip地址。通常是在與squid配置形成透明代理時使用,假設squid的監(jiān)聽端口是3128,我們可以通過以下語句來將來自192.168.1.0/24
,目的端口為80的數據包重定向到 squid監(jiān)聽
端口:
iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.1.0/24 --dport 80
-j REDIRECT --to-port 3128
六、綜合例子
1. 使用撥號帶動局域網上網
小型企業(yè)、網吧等多使用撥號網絡上網,通?赡苁褂么,但是考慮到成本、對協(xié)議的支持等因素,建議使用ip欺騙方式帶動區(qū)域網上網。
成功升級內核后安裝iptables,然后執(zhí)行以下腳本:
#載入相關模塊
modprobe ip_tables
modprobe ip_nat_ftp
#進行ip偽裝
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
2. ip映射
假設有一家ISP提供園區(qū)Internet接入服務,為了方便管理,該ISP分配給園區(qū)用戶的IP地址都是偽IP,但是部分用戶要求建立自己的WWW服務器
對外發(fā)布信息。我們可以再防火墻的外部網卡上綁定多個合法IP地址,然后通過ip映射使發(fā)給其中某一個IP地址的包轉發(fā)至內部某一用戶的WWW
服務器上,然后再將該內部WWW服務器響應包偽裝成該合法IP發(fā)出的包。
我們假設以下情景:
該ISP分配給A單位www服務器的ip為:
偽ip:192.168.1.100
真實ip:202.110.123.100
該ISP分配給B單位www服務器的ip為:
偽ip:192.168.1.200
真實ip:202.110.123.200
linux防火墻的ip地址分別為:
內網接口eth1:192.168.1.1
外網接口eth0:202.110.123.1
然后我們將分配給A、B單位的真實ip綁定到防火墻的外網接口,以root權限執(zhí)行以下命令:
ifconfig eth0 add 202.110.123.100 netmask 255.255.255.0
ifconfig eth0 add 202.110.123.200 netmask 255.255.255.0
成功升級內核后安裝iptables,然后執(zhí)行以下腳本:
#載入相關模塊
modprobe ip_tables
modprobe ip_nat_ftp
首先,對防火墻接收到的目的ip為202.110.123.100和202.110.123.200的所有數據包進行目的NAT(DNAT):
iptables -A PREROUTING -i eth0 -d 202.110.123.100 -j DNAT --to 192.168.1.100
iptables -A PREROUTING -i eth0 -d 202.110.123.200 -j DNAT --to 192.168.1.200
其次,對防火墻接收到的源ip地址為192.168.1.100和192.168.1.200的數據包進行源NAT(SNAT):
iptables -A POSTROUTING -o eth0 -s 192.168.1.100 -j SNAT --to 202.110.123.100
iptables -A POSTROUTING -o eth0 -s 192.168.1.200 -j SNAT --to 202.110.123.200
這樣,所有目的ip為202.110.123.100和202.110.123.200的數據包都將分別被轉發(fā)給192.168.1.100和 192.168.1.200;而所有來自
192.168.1.100和192.168.1.200的數據包都將分別被偽裝成由 202.110.123.100和202.110.123.200,從而也就實現了ip映射.
2006.3.7 21:42 作者:cao1215 引用:0 | 收藏 | 評論:0
iptable 使用實例
分類:默認欄目
iptable 使用實例
iptables使用實例
首先讓我們看一下服務器/客戶機的交互原理。服務器提供某特定功能的服務總是由特定的后臺程序提供的。在TCP/IP網絡中,常常把這個特定
的服務綁定到特定的TCP或UDP端口。之后,該后臺程序就不斷地監(jiān)聽(listen)該端口,一旦接收到符合條件的客戶端請求,該服務進行TCP握
手后就同客戶端建立一個連接,響應客戶請求。與此同時,再產生一個該綁定的拷貝,繼續(xù)監(jiān)聽客戶端的請求。
舉一個具體的例子:假設網絡中有一臺服務器A(IP地址為1.1.1.1)提供WWW服務,另有客戶機B(2.2.2.2)、 C(3.3.3.3)。首先,服務器A運行提
供WWW服務的后臺程序(比如Apache)并且把該服務綁定到端口80,也就是說,在端口80進行監(jiān)聽。當 B發(fā)起一個連接請求時,B將打開一個大于
1024的連接端口(1024內為已定義端口),假設為1037。A在接收到請求后,用80端口與B建立連接以響應B的請求,同時產生一個80端口綁定的拷
貝,繼續(xù)監(jiān)聽客戶端的請求。假如A又接收到C的連接請求(設連接請求端口為1071),則A在與C建立連接的同時又產生一個80端口綁定的拷貝
繼續(xù)監(jiān)聽客戶端的請求。如下所示,因為系統(tǒng)是以源地址、源端口、目的地址、目的端口來標識一個連接的,所以在這里每個連接都是唯一的
。
服務器 客戶端
連接1:a.b.c.1:80  a.b.c.4:1037
連接2:a.b.c.1:80  a.b.c.7:1071
每一種特定的服務都有自己特定的端口,一般說來小于1024的端口多為保留端口,或者說是已定義端口,低端口分配給眾所周知的服務(如WWW
、 FTP等等),從512到1024的端口通常保留給特殊的UNIX TCP/IP應用程序,具體情況請參考/etc/services文件或RFC1700。
假設網絡環(huán)境如下:某一單位,租用DDN專線上網,網絡拓撲如下:
+--------------+
| 內部網段 | eth1+--------+eth0 DDN
| +------------|firewall|Internet
| 198.168.80.0 | +--------+
+--------------+
eth0: 198.199.37.254
eth1: 198.168.80.254
以上的IP地址都是Internet上真實的IP,故沒有用到IP欺騙。并且,我們假設在內部網中存在以下服務器:
www服務器:
www.yourdomain.com
198.168.80.11
ftp服務器:
ftp.yourdomain.com
198.168.80.12
email服務器:mail.yourdomain.com 198.168.80.13
下面我們將用iptables一步一步地來建立我們的包過濾防火墻,需要說明的是,在這個例子中,我們主要是對內部的各種服務器提供保護。
1. 在/etc/rc.d/目錄下用touch命令建立firewall文件,執(zhí)行chmod u+x firewll以更改文件屬性,編輯/etc/rc.d/rc.local文件,在末尾加上
/etc/rc.d/firewall 以確保開機時能自動執(zhí)行該腳本。
2. 刷新所有的鏈的規(guī)則
#!/bin/sh
echo "Starting iptables rules..."
#Refresh all chains
/sbin/iptables -F
3. 我們將首先禁止轉發(fā)任何包,然后再一步步設置允許通過的包。
所以首先設置防火墻FORWARD鏈的策略為DROP:
/sbin/iptables -P FORWARD DROP
4.設置關于服務器的包過慮規(guī)則:
在這里需要注意的是,服務器/客戶機交互是有來有往的,也就是說是雙向的,所以我們不僅僅要設置數據包出去的規(guī)則,還要設置數據包返回
的規(guī)則,我們先建立針對來自Internet數據包的過慮規(guī)則。
WWW服務:服務端口為80,采用tcp或udp協(xié)議。規(guī)則為:eth0=>允許目的為內部網WWW服務器的包。
###########################Define HTTP packets####################################
#Allow www request packets from Internet clients to www servers
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.11 --dport www -i eth0 -j ACCEPT
FTP服務:FTP服務有點特別,因為需要兩個端口,因為FTP有命令通道和數據通道。其中命令端口為21,數據端口為20,并且有主動和消極兩種
服務模式,其消極模式連接過程為:FTP客戶端首先向FTP服務器發(fā)起連接請求,三步握手后建立命令通道,然后由FTP服務器請求建立數據通道
,成功后開始傳輸數據,現在大多數FTP客戶端均支持消極模式,因為這種模式可以提高安全性。FTP服務采用tcp協(xié)議。規(guī)則為:eth0=>僅允許
目的為內部網ftp服務器的包。
############################Define FTP packets#####################################
#Allow ftp request packets from Internet clients to Intranet ftp server
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.12 --dport ftp -i eth0 -j ACCEPT
EMAIL服務:包含兩個協(xié)議,一是smtp,一是pop3。出于安全性考慮,通常只提供對內的pop3服務,所以在這里我們只考慮針對smtp的安全性問
題。smtp端口為21,采用tcp協(xié)議。eth0=>僅允許目的為email服務器的smtp請求。
###########################Define smtp packets####################################
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.13 --dport smtp -i eth0 -j ACCEPT
5. 設置針對Intranet客戶的過慮規(guī)則:
在本例中我們的防火墻位于網關的位置,所以我們主要是防止來自Internet的攻擊,不能防止來自Intranet的攻擊。假如我們的服務器都是基
于linux的,也可以在每一部服務器上設置相關的過慮規(guī)則來防止來自Intranet的攻擊。對于Internet對Intranet客戶的返回包,我們定義如下
規(guī)則。
#############Define packets from Internet server to Intranet#######################
/sbin/iptables -A FORWARD -p tcp -s 0/0 --sport ftp-data -d 198.168.80.0/24 -i eth0 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.0/24 ! -syn -i eth0 -j ACCEPT
/sbin/iptables -A FORWARD -p udp -d 198.168.80.0/24 -i eth0 -j ACCEPT
說明:第一條允許Intranet客戶采用消極模式訪問Internet的FTP服務器;第二條接收來自Internet的非連接請求tcp包;最后一條接收所有udp
包,主要是針對oicq等使用udp的服務。
6. 接受來自整個Intranet的數據包過慮,我們定義如下規(guī)則:
#############Define packets from Internet server to Intranet server###############
/sbin/iptables -A FORWARD -s 198.168.80.0/24 -i eth1 -j ACCEPT
7. 處理ip碎片
我們接受所有的ip碎片,但采用limit匹配擴展對其單位時間可以通過的ip碎片數量進行限制,以防止ip碎片攻擊。
#################################Define fregment rule##################################
/sbin/iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
說明:對不管來自哪里的ip碎片都進行限制,允許每秒通過100個ip碎片,該限制觸發(fā)的條件是100個ip碎片。
8. 設置icmp包過濾
icmp包通常用于網絡測試等,故允許所有的icmp包通過。但是黑客常常采用icmp進行攻擊,如ping of death等,所以我們采用limit匹配擴展
加以限制:
#################################Define icmp rule##################################
/sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
說明:對不管來自哪里的icmp包都進行限制,允許每秒通過一個包,該限制觸發(fā)的條件是10個包。
通過以上個步驟,我們建立了一個相對完整的防火墻。只對外開放了有限的幾個端口,同時提供了客戶對Internet的無縫訪問,并且對ip 碎片
攻擊和icmp的ping of death提供了有效的防護手段。以下是完整的腳本文件內容,希望通過這個實例能是對iptables的用法有所了解:
#!/bin/sh
echo "Starting iptables rules..."
#Refresh all chains
/sbin/iptables -F
###########################Define HTTP packets####################################
#Allow www request packets from Internet clients to www servers
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.11 --dport www -i eth0 -j ACCEPT
############################Define FTP packets#####################################
#Allow ftp request packets from Internet clients to Intranet ftp server
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.12 --dport ftp -i eth0 -j ACCEPT
###########################Define smtp packets####################################
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.13 --dport smtp -i eth0 -j ACCEPT
#############Define packets from Internet server to Intranet#######################
/sbin/iptables -A FORWARD -p tcp -s 0/0 --sport ftp-data -d 198.168.80.0/24 -i eth0 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.0/24 ! -syn -i eth0 -j ACCEPT
/sbin/iptables -A FORWARD -p udp -d 198.168.80.0/24 -i eth0 -j ACCEPT
#############Define packets from Intranet to Internet###############
/sbin/iptables -A FORWARD -s 198.168.80.0/24 -i eth1 -j ACCEPT
#################################Define fregment rule##################################
/sbin/iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
#################################Define icmp rule##################################
/sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
2006.3.7 21:41 作者:cao1215 引用:0 | 收藏 | 評論:0
Netfilter/Iptables的防火墻功能介紹 1
分類:默認欄目
Netfilter/Iptables的防火墻功能介紹 1
防火墻介紹
Disclaimer: 下面描述的有些內容可能不完全正確.但希望對你理解iptables有幫助,如果你發(fā)現了錯誤,請通知我。
注意,此說明是非拷貝的(例如在GPL).如果你想做任何修改、發(fā)布、拷貝、引用,請先聯系我。(哈哈,不管了)
什么是防火墻?
簡單說,防火墻就是用來保護你的網絡的一臺主機,它對來自internet和你的內網(受保護)之間的通訊進行限制,反過來亦可。
非防火墻功能
誤區(qū) - 防火墻并不能保證你的網絡絕對安全
堡壘主機(A bastion host)- In an ideal world, this would be true. However, a firewall is only as secure as the work you put
into securing it.
主機安全替換(A replacement for host security) - 每一項防火墻允許的服務都是潛在的風險。
使用類型
本地 - 對于在實際的物理連接而言,沒有安全可言。很明顯,防火墻對此無能為力。
Local privilege escalation - The trojan horse attack. The attacker alreay has a local account on your box (inside the gates)
and obtains root by some means (vulnerability or misconfiguration). A firewall cannot protect again this type of attacks.
Remote - Your host is listening on a port that the attacker is able to connect to remotely over a network and exploit a
vunerability somehow. This is the only type of attack a firewall can (hopefully) protect you against. There is another
important point here that most firewall howtos neglect. In order for someone to exploit your box remotely, it has to be
listening on some ports (i.e. providing a way for an attacker to connect). Therefore, if your host isnt listening on any
ports, you are safe from remote exploits (unless the attacker manages to attack the network stack itself).
為何需要防火墻?
提高網絡安全 - 某些服務有著固有的風險,不可能作到安全性。防火墻可以幫助你提高網段或部分網絡的安全性。
網絡訪問控制 - 防火墻可以強制性的在網絡中應用安全規(guī)則。
日志記錄 - 由于防火墻檢測所有入站/出站的網絡通訊,它可以記錄網絡中的活動。
防火墻的類型
代理防火墻 - 代理服務器.
包過濾防火墻 - 檢測IP包 (Netfilter).
什么是 Netfilter/Iptables?
Linux 2.4內核中Netfilter是新的用來實現防火墻的. Iptables 是用來指定Netfilter規(guī)則的用戶工具。
為什么Ipchains被改為Netfilter/Iptables
狀態(tài)匹配 - 連接跟蹤(can you trust the remote host to determine whether your firewall will accept a packet?).
自動碎片重裝- Connection tracking automatically reassembles fragmented packets for examination.
改良的匹配規(guī)則 - 高級包匹配,例如速率限制、字符串匹配.
增強的日志功能 - 允許自定義日志級別和實體.
允許包撕裂(?mangle) - 允許撕裂包中的任何信息
用戶隊列Userspace queuing -允許userspace可以對包進行編程.
支持內置包轉發(fā) - 舍棄了IPMASQADM.
主要功能
狀態(tài)包過濾(連接跟蹤)
各種網絡地址翻譯
靈活、易擴展的急智機制
大量的增強型補丁包
Netfilter/iptables可以做什么?
建立Internet防火墻和基于狀態(tài)的包過濾
用NAT和偽裝(masquerading)共享上網
用NAT實現透明代理
和tc+iproute2配合使用可以實現QoS路由
用(mangling)修改IP包頭的TOS字段來實現更復雜的功能
安裝Iptables
下載
Iptables v1.2.2 (
http://netfilter.samba.org/iptables-1.2.2.tar.bz2
) md5sum 7d065a5d1e7003a061bece79a88d903
Linux kernel v2.4.5 (
http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.5.tar.bz2
)
安裝提示
注意,在編譯、安裝iptables之前,不需要編譯內核。并且某些內核選項不可用,除非用"make patch-o-matic".
在/usr/src/linux目錄中, make oldconfig (在沒有.config文件時,make menuconfig)。
在iptables包的解報目錄中, make && make install
打補丁,make patch-o-matic,推薦只打你需要的補丁。
返回 /usr/src/linux目錄, make menuconfig ,選擇新的、可用的選項
完成正常的內核編譯過程(make dep; make clean; make bzImage)
編譯 - Iptales編譯一般比較簡單
make && make install 將在缺省路徑/usr/local中做一個最小安裝.
make pending-patches 將給標準內核打上一些著名的漏洞補丁.
make patch-o-matic 將給標準內核打上一些增強功能的補丁.
make experimental && make install-experimental 將創(chuàng)建 iptables-save和 iptables-restore 二進制代碼.
如果你想修改安裝路徑,可以帶參數BINDIR=/usr/sbin LIBDIR=/usr/lib MANDIR=/usr/man 進行編譯。 (e.g. make BINDIR=/usr/sbin
LIBDIR=/usr/lib MANDIR=/usr/man install)
補丁包 - 每個補丁都有新的功能,但幾乎每個都有漏洞,因此最好不要全部都安裝。
注意: 下面列出的是v1.2.1a版本的,不是最新版本. 你可以用 make patch-o-matic命令列出補丁列表來.
CONFIG_IP_NF_TARGET_BALANCE 選項, 類似DNAT:把負載均分到一段地址上。(`--to-dest 1.2.3.4-1.2.3.7)
CONFIG_IP_NF_TARGET_NETLINK, 替代ipchains中的 -o 選項,通過增加一個NETLINK目標,把丟棄的包發(fā)往用戶空間
CONFIG_IP_NF_TARGET_SAME ,類似SNAT,利用一段地址(`--to-source 1.2.3.4-1.2.3.7),對客戶端的每個連接給相同的地址.
CONFIG_IP_NF_TARGET_TTL ,允許用戶修改IP包中的TTL值。
CONFIG_IP_NF_MATCH_AH_ESP, 支持兩個擴展匹配(`ah and `esp),允許在IPSec包中的AH或者ESP包頭中匹配一段SPI范圍
CONFIG_IP_NF_DROPTABLE . 將要被丟棄的包將通過這個表,來允許做日志記錄,(此補丁有漏洞)
CONFIG_IP_NF_EGG: 連接跟蹤。Connection tracking for eggdrop bot networks.
CONFIG_IP_NF_TARGET_FTOS ,允許你任意設置TOS值。從0x0-0xff
ftp-multi.patch 允許ftp連接跟蹤和地址翻譯到最多8個端口。在ip_conntrack_ftp和ip_nat_ftp模塊中用 `ports=選項. 不然,將使用缺省
21端口。另外,它還支持FXP(direct FTP 2 FTP transport).使用模塊載入參數`fxp=1`可以來支持FXP
ftp-pasv-fix.patch :可以在使用ip_conntrack_ftp.o模塊的情況下,在FTP服務器上實現狀態(tài)類型防火墻功能
CONFIG_IP_NF_MATCH_IPLIMIT 允許限制每個客戶端(每個IP)并發(fā)TCP連接的最大個數
例如:
#每個客戶端最多允許2個telnet連接
iptables -p tcp -dport 23 -m iplimit --iplimit-above 2 -j REJECT
# you can also match the other way around:
iptables -p tcp -dport 23 -m iplimit ! --iplimit-above 2 -j ACCEPT
# 每個C類地址允許的http連接的并發(fā)最大個數為16
iptables -p tcp -dport 80 -m iplimit --iplimit-above 16 --iplimit-mask 24 -j REJECT
#允許每個IP地址可同時發(fā)起4個HTTP連接
iptables -A INPUT -p tcp --syn --dport http -m iplimit --iplimit-above 4 -j REJECT
#允許整個A類地址中每個地址的HTTP訪問為4
iptables -A INPUT -p tcp --syn --dport http -m iplimit --iplimit-mask 8 --iplimit-above 4 -j REJECT
CONFIG_IP_NF_IRC: IRC支持模塊,允許 DCC和NAT、連接跟蹤一起工作。此補丁依賴丟棄表(dropped-table)和段偏移(seqoffset).
masquerade+fwmark.patch :一種復雜的路由設置,依靠防火墻的標記來路由,和 MASQUERADE NAT target組合來用
nat+conntrack-hashsize.patch 設置連接跟蹤代碼和NAT代碼中的模塊參數(hashsize=xxx) hash表的大小,NAT的缺省值為內存的
1/16384(對于大多數機器來說,比先前的缺省值64好多了).
CONFIG_IP_NF_POOL, 提供了一種從IP地址段中的一個位的位映射,它依賴于源或目的地址是否在地址池中設置了位。它也提供了一個目標池
CONFIG_IP_NF_MATCH_PSD, 支持端口掃描檢測(PSDortScanDetection). 可以檢測TCP和UDP端口掃描. 它源自Solar Designer? scanlogd.
支持的選項:
--psd-weight-threshold
從同一主機發(fā)往不同目的端口的TCP/UDP包的總的優(yōu)先級,被用來作為端口掃描次序
--psd-delay-threshold
由同一主機發(fā)往不同目的端口的包的延遲 (in hundredths of second) ,用來作為可能的端口掃描子次序
--psd-lo-ports-weight
特權目的端口的優(yōu)先級,即目標端口(
非特權目的端口的優(yōu)先級(>1024).
舉例:iptables -A INPUT -m psd -j DROP
CONFIG_IP_NF_MATCH_RPC, 支持兩個模塊ip_conntrack_rpc_udp和ip_conntrack_rpc_tcp(用來分別跟蹤UDP和TCP的端口映射請求),在
iptabIe 中添加record_rpc(用來匹配是否包的源地址已經發(fā)過端口映射請求,或者是一個新的發(fā)往端口映射的GET請求,以允許RPC過濾)
seqoffset.patch - 新的NAT中的 API 函數. 此API函數隱藏了所有的協(xié)議翻譯(例如:ftp/irc)中的包重設大小和計算序列號的細節(jié)問題
要求:至少內核 2.4.2以上!
dropped-table-patch from netfilter patch-o-matic
CONFIG_IP_NF_NAT_SNMP_BASIC 基本的SNMP地址翻譯支持. 如同RFC 2962中描述的,是 SNMP-ALG中的“基本”條目;它通過修改SNMP有效載荷
中的IP地址來匹配IP層的地址翻譯映射.
CONFIG_IP_NF_MATCH_STRING :允許在整個包里匹配字符串.
iptables -A INPUT -m string --string cmd.exe -j QUEUE
tcp-window-tracking.patch :通過Guido van Rooij的論文"IP過濾器中的實時狀態(tài)TCP包過濾“( Real Stateful TCP Packet Filtering in
IP Filter),實現了TCP連接跟蹤.它包含新的支持已建立的連接控制的TCP連接跟蹤. 并添加了窗口縮放支持(Window scaling).
CONFIG_IP_NF_MATCH_TTL option:允許用戶根據包的TTL值來匹配包.
CONFIG_IP_NF_TARGET_ULOG:支持更多高級的包日志記錄機制,目錄libiptulog/ 下包含有收到的ULOG消息庫.
更多信息:
http://www.gnumonks.org/projects/ulogd
CONFIG_IP6_NF_TARGET_LOG :在ip6tables中添加LOG target.
CONFIG_IP6_NF_TARGET_REJECT:在ip6tables中添加拒絕目標( REJECT target). 請注意此處的 icmp-types與icmpv6 types不同(更多消息請
看:ip6tables -j REJECT -h)
ipv6-ports.patch:ipv6 有IPv6的自己的端口匹配形式.
注意: 以上高亮顯示的補丁并不表示你應該編譯進你的內核中。僅表示我發(fā)現的有趣的功能。你可以把你感興趣的補丁從目錄patch-o-matic
中拷貝到usr/src/linux,并且運行 patch -R -p1
下面是一篇轉載的關于用IPTables實現字符串模式匹配 的文章
自1995年ipfwadm開始進入1.2.1的核心,Linux的防火墻實現有很長的時間了。Ipfwadm實現了標準的tcp/ip包過濾功能,比如過濾源地址與目
的地址以及端口過濾。早在1999年第一個穩(wěn)定的2.2.0核心中防火墻的實現被ipchains替代了,ipchains 的新功能包括支持規(guī)則鏈,碎片包控
制,較好的網絡地址翻譯功能(NAT)以及其他一些有用的改進。我們需要明白Linux防火墻包括核心級代碼(通常是可加載核心模塊或者核心
源程序的補丁)和用戶級代碼(一個配置的工具,比如/usr/bin/ipchains,這是用來插入包規(guī)則到核心空間的)因此無論如何,只要新的
linux防火墻代碼被引入,核心和用戶空間的有關代碼都要改寫。
2001年2.4的核心完成了,iptables出現了。它引入了很多重要的改進,比如基于狀態(tài)的防火墻,基于任何TCP標記和MAC地址的包過濾,更靈活
的配置和記錄功能,強大而且簡單的NAT功能和透明代理功能,通過速度限制實現DoS的阻止(更詳細的資料請參看A Comparison of iptables
Automation Tools一文)。
然而,最重要變化是引入了模塊化的架構方式。比如,ipchains和ipfwadm兼容模式是通過一個核心模塊的設置實現的,該模塊能夠在運行的核
心中插入,以便提供相應的通訊功能。在附加的變化中,用戶自定義編碼功能已經成為了可能,比如過濾一定范圍的端口,根據TTL值和包的到
達時間進行判斷,對自定義的協(xié)議進行狀態(tài)監(jiān)視,對隨機的數據包進行監(jiān)視等,這些目前都還不是iptable的一部分,但是在未來將被實現。很
多很有趣的新模塊已經完成了。編寫一個可加載的核心模塊來創(chuàng)建核心級代碼,通過用戶級代碼實現控制過濾器的行為。參見Rusty Russells
Linux iptables HOWTO
本文主要關注字符串模式匹配的功能,(顯然,是通過模塊實現的),該功能可以限制和研究數據包的有效載荷。這是 iptable技術的一個非常
有意義的突破,它超越了傳統(tǒng)的包過濾防火墻的標準TCP/IP標志監(jiān)視功能。傳統(tǒng)的防火墻可以分為包過濾和應用代理兩種類型,應用代理防火
墻可以分別出應用層的協(xié)議比如telnet,HTTP或者SMTP,能夠監(jiān)視這些協(xié)議的有效載荷和檢查命令,但是應用代理防火墻帶來了巨大的性能缺
陷:當通過網絡協(xié)議棧處理上層即應用層的數據包。同時我們需要為每一個要監(jiān)控的協(xié)議編寫新的代理程序。包過濾防火墻通常只監(jiān)視源地址
和目的地址,源端口和目的端口,TCP/IP標志等,而完全忽略了高層協(xié)議的有效載荷。由于上述原因,包過濾防火墻通常比應用代理防火墻的
速度快。應用代理提供了更加有力度的安全控制而包過濾可以用于更高的帶寬線路滿足更高的吞吐量。
基于以上的情況,iptables的新增功能提供了跨越兩種防火墻類型的優(yōu)勢,避免了各自的缺陷,這個功能同時非常清晰的證明了新的模塊化的
架構較之老的ipchains的優(yōu)勢,它能夠使得iptables工作在網絡層(OSI模型的第三層)不必工作在高層協(xié)議,但是卻可以監(jiān)視高層協(xié)議的有效
載荷,而不必分析應用層的通信結構。
在2001年5月以前,還沒有提出字符串模式匹配模塊以前。有一個嘗試添加內容監(jiān)控的能力給iptables防火墻的工程:Hogwash。該工程結合了
Snort IDS規(guī)則模式匹配引擎,以便于iptable能夠響應帶有攻擊信號的數據包。
現在我們提供了一個Step-By-Step的指導,以便于在RedHat Linux上實現模式匹配的包監(jiān)視功能。標準的RH7.2提供了iptables 1.2.3的版本以
及1.2.4的可用RPM升級包。然而,模式匹配功能沒有被包含在標準的發(fā)行版中,因為開發(fā)人員將它標記為試驗。
如果你使用的是RH7.1-7.2,你就已經使用了2.4的核心。你至少需要2.4.4的核心以便能夠使用iptables 1.2.4的功能。通常推薦你從發(fā)行商那
里下載最新的可用的核心。目前,有一個例外:iptables-1.2.4的字符串模式匹配補丁不能在2.4.9 的核心下工作。你應該安裝核心的源碼RPM
包(通常被放在/usr/src/linux-2.4.x的源碼樹內)或者從別處下載的核心源程序(比如
www.kernel.org
或者它的一個鏡像)。
在本文中,將采用最新的2.4.16核心作為例子。測試也能運行在使用2.4.7核心的RedHat 7.2上,但是2.4.7的核心并不推薦使用,因為2.4.7的
核心有一些小的安全問題,比如SYN-cookie保護和iptables的保存/恢復功能。
接下來需要從
http://netfilter.samba.org/iptables-1.2.4.tar.bz2
下載iptables。當對壓縮文件進行解壓縮之后,需要對iptables進行配置
,合并相關的核心源程序樹?梢允褂冒胱詣踊某绦騺硗瓿蛇@個目的。首先,可能需要運行程序以便包含已經考慮過的穩(wěn)定的iptables補丁
,但是這個補丁沒有被包含在kernel的發(fā)行版內。從iptables的解壓目錄(在本例中iptables在 /home/anton/iptables-1.2.4,核心源程序在
/usr/src/linux-2.4.16)運行:
make pending-patches KERNEL_DIR=/usr/src/linux-2.4.16
這將開始運行交互式的補丁應用程序,雖然你可以安全應用所有的補丁,但是沒有一個補丁是iptables的字符串匹配所必需的。對任何你認為
需要的補丁都回答y(yes)。如果你希望能夠安全的使用iptables,則選擇none。
現在我們將準備應用試驗部分的補丁,比如字符串模式匹配的支持。運行:
make patch-o-matic KERNEL_DIR=/usr/src/linux-2.4.16
在這個交互式的過程中,回答y(yes)以便應用string.patch。程序將遍歷所有的可用的補丁,包括那些穩(wěn)定的。
Testing... string.patch NOT APPLIED ( 2 missing files)
The string patch:
Author: Emmanuel Roger
Status: Working, not with kernel 2.4.9
This patch adds CONFIG_IP_NF_MATCH_STRING which allows you to
match a string in a whole packet.
THIS PATCH DOES NOT WORK WITH KERNEL 2.4.9 !
Do you want to apply this patch [N/y/t/f/q/?] y
其余的補丁也許也讓你非常感興趣,不過它們與本文并不相關。如果你選擇安裝任何別的補丁,請注意開發(fā)者給出的警告信息,其中包括了補
丁的功能(比如dropped表的補。┐_定你沒有安裝MAC過濾的補丁,因為最近發(fā)現這個補丁包含一個漏洞。
現在我們開始編譯用戶空間程序和相關的Libraries:
make KERNEL_DIR=/usr/src/linux-2.4.16
然后我們安裝它們(iptables在/usr/local/user/sbin,libraries在/usr/local/lib/iptables)在root身份下執(zhí)行以下內容:
make install KERNEL_DIR=/usr/src/linux-2.4.16
緊接著我們配置和編譯核心:
Now we are ready to compile the user-space code and the libraries:
make KERNEL_DIR=/usr/src/linux-2.4.16
and then install them (iptables program goes in /usr/local/user/sbin and libraries go into /usr/local/lib/iptables). As root:
cd /usr/src/linux-2.4.16
可以使用任何的核心配置方法。有關詳細的配置核心的方法,可以查閱Internet資源,Internet上有大量的這方面的文檔,比如kernel HOWTO
等。以下簡要介紹一下:
make xconfig
在GUI界面下,選擇Netfilter配置選項,然后在Strings match support前選擇m(模塊支持),如下圖:
然后執(zhí)行通常的操作:
make dep;make bzImage;make modules;make modules_install
現在按照你喜歡的方式安裝核心,并重新啟動。重新啟動系統(tǒng)以后,測試一下iptables是否支持模式匹配功能,在root身份下執(zhí)行:
/usr/local/sbin/iptables ?m string ?help
該命令將顯示如下標準的iptables幫助信息:
STRING match v1.2.4 options:
--string [!] string Match a string in a packet
該功能允許你對匹配數據包的內容,我們可以通過netcat或者telnet來測試這一功能,從而確定我們確實可以獲得數據包的內容。
運行:
iptables -A INPUT -m string --string "test" -j LOG --log-level
info --log-prefix "TEST"
然后啟動一個netcat的服務器:
nc -l -p 3456
然后連接該netcat服務器:
telnet localhost 3456
然后輸入:
test
whatevertestdoes
這樣將引起iptables產生一個簡單的記錄,我們在記錄文件中將會看到如下的信息(當然你需要設置了記錄信息的級別為info)
Nov 27 23:16:53 pua kernel:
TEST IN=lo OUT=MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00
SRC=127.0.0.1 DST=127.0.0.1 LEN=2154 TOS=0x00 PREC=0x00 TTL=64
ID=42880 DF PROTO=TCP SPT=3128 DPT=33018 WINDOW=32767 RES=0x00 ACK PSH URGP=0
Nov 27 23:16:53 pua kernel:
TEST IN=lo OUT=MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00
SRC=127.0.0.1 DST=127.0.0.1LEN=1830 TOS=0x00 PREC=0x00 TTL=64
ID=17451 DF PROTO=TCP SPT=8000 DPT=33017 WINDOW=32767 RES=0x00 ACK PSH URGP=0
在 tcp/ip數據包中只要出現test字符串,以上的信息就會產生。這有什么好處呢?太多了。正如Filtering packets based on string
matching這篇文章所建議的那樣,該文章可以在linuxguru.net的sysctl內找到。它能夠用來阻止那些討厭的IIS蠕蟲造成得 Unix web服務器記
錄文件記錄大量的對cmd.exe的請求,這些蠕蟲將不再干擾你,但是如果你的/var分區(qū)(通常是記錄文件存放的分區(qū))不夠大,那么這一功能將
有一定的幫助。只要靜靜地丟棄蠕蟲對80端口的請求或者使用記錄限制功能,對這些信息進行記錄,丟棄這些包的操作如下:
iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe"
每小時只記錄一條這樣的信息:
iptables -I INPUT -j LOG -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe" -m limit
--limit 1/hour
Bill Steams(Mason firewall building script的作者)提供了一個極好的建議----轉換網絡IDS Snort的規(guī)則成為iptables字符串模式匹配
的規(guī)則。Snort的攻擊信號數據庫中包含了大約1200種信號and appears to be the biggest publicly available attack database suitable
for instant deployment。在iptables上使用現成的信號是合理的一種方式。
http://www.strearns.org
/snort2iptables 是Bill Stearm提供
的試驗性的軟件。在這里你可以找到shell腳本以便將標準的Snort規(guī)則轉換為iptables的規(guī)則。下面是一個將snort關于 Linux下針對mountd的
攻擊和bind的攻擊轉化為iptables的規(guī)則的例子:
Snort 規(guī)則:
1. alert udp $EXTERNAL_NET any -> $HOME_NET 518
(msg:"EXPLOIT ntalkd x86 linux overflow";
content:"|0103 0000 000 0 0001 0002 02e8|";
reference:bugtraq,210; classtype:attempted-admin; sid:313; rev:2;)
2. alert tcp $EXTERNAL_NET any -> $HOME_NET 53
(msg:"EXPLOIT named tsig infoleak";
content: "|AB CD 09 80 00 00 00 01 00 00 00 00 00 00 01 00 01 20 20 20 20 02 61|";
reference:cve,CAN-2000-0010; reference:bugtraq,2302; reference:arachnids,482;
classtype:attempted-admin; sid:303; rev:3;)
3. alert udp $EXTERNAL_NET any -> $HOME_NET 635
(msg:"EXPLOIT x86 linux mountd overflow";
content:"|5eb0 0289 06fe c889 4604 b006 8946|";
reference:cve,CVE-1999-0002; classtype:attempted-admin; sid:315; rev:1;)
轉化的iptables規(guī)則:
1. iptables -A SnortRules -p udp -s $EXTERNAL_NET -d $HOME_NET --dport 518 -m
string --string " è" -j LOG --log-prefix "SID313 " # "EXPLOIT ntalkd x86
linux overflow" bugtraq,210 classtype:
attempted-admin sid:313
2. iptables -A SnortRules -p tcp -s $EXTERNAL_NET -d $HOME_NET --dport 53 -m
string --string "?? .a" -j LOG --log-prefix "
SID303 " # "EXPLOIT named tsig infoleak" cve,CAN-2000-0010 bugtraq,2302
arachnids,482 classtype:attempted-admin sid:303
3. iptables -A SnortRules -p udp -s $EXTERNAL_NET -d $HOME_NET --dport 635 -m
string --string "^° ‰ ??‰F ° ‰F" -j LOG --log-prefix " cve-CVE-1999-0002
" # "EXPLOIT x86 linux mountd overflow" classtype:attempted-admin sid:315
顯而易見,上面的轉化使用了針對漏洞所使用的緩沖區(qū)溢出字符串作為捕獲攻擊的方式,有些規(guī)則不便于轉化主要是因為在楨的控制方面snort
比iptables要強大一點。
總之,iptables的字符串模式匹配功能能夠被用來保護那些開放了易受攻擊的而一般的包過濾又無法保護的網絡服務(如WWW服務,mail服務,
DNS 服務,FTP服務等)的組織的網絡(如果將它布置在組織的網關上)和單個的主機(使iptables成為主機的一部分),另外,iptables的字
符串模式匹配功能還能夠幫助實現強制安全策略,即通過關鍵字來阻止訪問非法的內容。
2006.3.7 21:40 作者:cao1215 引用:0 | 收藏 | 評論:0
Linux下的NAT及防火墻的混合應用
分類:默認欄目
Linux下的NAT及防火墻的混合應用
Linux下的NAT及防火墻的混合應用
【摘要】
主要講述Linux系統(tǒng)下的NAT(網絡地址轉換)和基于NAT的防火墻技術。
首先由Linux系統(tǒng)的安裝引入,著重介紹LINUX下的NAT的網絡配置(服務端和客戶端),以及防火墻配置原則。
其次,從理論上闡述,“什么是NAT”和網絡上的攻擊方法。
【引言】
LINUX憑借其穩(wěn)定性、安全性和代碼開放在這幾年中,風靡全球;作為一種類UNIX系統(tǒng),Linux正在互聯網的各個層面得到應用,從科學計算到
銀行取款機,從網絡web服務到高層的Oracle 數據庫應用。都可以看到linux的影子。而由于Linux遵循于GPL協(xié)議(公共軟件許可證),任何人
可以得到并且修改它的源代碼,所以他的安全性相較于其他的非開源系統(tǒng)來說要高的多;并且它可以從網絡中免費下載。從這2點來說他非常適
合用于網絡信息閘(軟路由或網關)和自制防火墻(事實上國內的硬件防火墻廠商都是用工業(yè)X86硬件和linux來做他們的產品,雖然那不是真
正意義上的硬件防火墻),F在學校過于注重對windows及其windows平臺上的軟件、開發(fā)工具的學習。但是學生們沒有意識到,真正撐起這個
互聯網的正是UNIX系統(tǒng);就從我對Linux的見解為大家展示UNIX系統(tǒng)的一角吧。
什么是NAT?
NAT 英文全稱是Network Address Translation,稱是網絡地址轉換,它是一個IETF標準,允許一個機構(包括多個網絡節(jié)點)以一個地址出現
在Internet上。NAT將每個局域網節(jié)點的地址轉換成一個IP地址,反之亦然。它也可以應用到防火墻技術里,把個別IP地址隱藏起來不被外界發(fā)
現,使外界無法直接訪問內部網絡設備,同時,它還幫助網絡可以超越地址的限制,合理地安排網絡中的公有Internet 地址和私有IP地址 的
使用。
為什么要進行NAT
假設校園網提供園區(qū)Internet接入服務,為了方便管理,校園網絡中心分配給園區(qū)用戶的IP地址都是偽IP(內部ip),但是部分用戶要求建
立自己的WWW 服務器對外發(fā)布信息,這時候我們就可以通過NAT來提供這種服務了。我們可以在防火墻的外部網卡上綁定多個合法IP地址或端口
,然后通過NAT技術使發(fā)給其中某一個IP地址的包轉發(fā)至內部某一用戶的WWW服務器上,然后再將該內部WWW服務器響應包偽裝成該合法IP發(fā)出的
包。
實驗環(huán)境介紹
本文所有到的實驗環(huán)境如下:
LINUX系統(tǒng)主機一臺(服務端):雙網卡 REDHAT 9.0 主機名:host
WINDOWS 98 系統(tǒng)主機一臺(客戶端):單網卡     主機名:test    
聯想D-link 8口 10M/100M交換機一個
【正文】
網絡拓撲結構:
點擊打開新窗口
一、 RED。龋粒浴。梗鞍惭b和注意點
Linux是一個獨立的操作系統(tǒng),所以不能在其他操作系統(tǒng)下進行安裝,他有自己的啟動方式,可以采用以下兩種方法進行安裝。
● 從CD-ROM進行安裝
● 從FTP服務器進行安裝
由于Linux系統(tǒng)安裝(第一種方法),有隨機參考手冊,難度不大,所以我們著重介紹從ftp安裝。
在安裝之前制作啟動盤:
1. 在windows操作系統(tǒng)下將安裝盤放入光驅;
2. 運行。:dosutilsrawrite.exe(e盤為光驅)
3. 在運行后的界面中輸入e:\images\bootnet.img
4. 指定目標盤,輸入用戶軟盤盤符:a
這樣一張安裝程序的啟動盤就建好了。
 
用軟盤引導計算機,進入藍色界面后,輸入FTP服務器地址和ftp上的用戶名及口令就可以下在安裝了。
RED。龋粒浴。.0安裝界面為中文,安裝中文說明基本可以完成系統(tǒng)定制,在此要強調的是,分區(qū)的時候,/swap(交換分區(qū))大小
要是內存大小的2倍;既然是作NAT網關,要把/var(日志分區(qū))單分出來,并且不要少于500M,有充裕的空間存儲日志,也為將
來將來系統(tǒng)故障或受到攻擊做到有據可查。
二.LINUX的網絡設置和NAT原理
2.1網絡設置
我們把Linux系統(tǒng)安裝完后,整個設置平臺算是搭建完畢,但是還要設置網絡;設置網絡之前,或者說讓linux上網前,應該把和這
臺服務器應該起到作用的無關服務關掉。
可以在命令行下敲入setup回車,會出現一個文本菜單,里面有“系統(tǒng)服務”一項,直接用空格鍵取消服務前面的勾然后重新啟動系統(tǒng)就
行了。
假如是UNIX的熟練用戶,可以在取消服務后,不用重新啟動,在命令行俠打入
 。穑蟆。幔酰   
會顯示現在在后臺運行的所有服務,看到要殺死的進程后,打入
kill -9
(-9代表強制殺掉進程)殺死進程。
然后進入/etc/sysconfig/network-scripts/目錄
vi。椋妫悖妫纾澹簦瑁皶霈F以下內容
device=eth0
onboot=yes
bootproto=none
IPADDR=192.168.0.1 #(內網網卡iP)
netmask=255.255.255.0
TYPE=ETHERNET
USERCTL=NO
PEERDNS=NO
NETWORK=192.168.0.0(網絡號)
Broadcast=192.168.0.255(廣播號)
上面的設置的意思是:eth0對內的內網網卡,ip地址為192.168.0.1,子網掩碼為:255.255.255.0;
vi。椋妫悖妫纾澹簦1會出現以下內容
device=eth1
onboot=yes
bootproto=none
IPADDR=202.204.208.5 #(外網網卡iP)
netmask=255.255.255.128
TYPE=ETHERNET
USERCTL=NO
PEERDNS=NO
NETWORK=202.204.208.0(網絡號)
Broadcast=202.204.208.127(廣播號)
上面的設置的意思是:eth1是對外的外網網卡,ip地址為202.204.208.5。
網卡的設置就完成了
加入nat客戶端ip和名稱
vi /etc/hosts
格式為:
ip地址 主機名
127.0.0.1 host
指定內網網關
vi /etc/sysconfig/network
gateway=202.204.208.7 #(網關地址,假如服務端的外網為撥號,就不要指定)
設置DNS服務器
vi /etc/resolv.conf
格式為
nameserver ip地址
nameserver 202.106.196.115
都設置好后,從新啟動系統(tǒng),在命令行下打入
route -a #察看路由表,看一下默認網關是否為202.204.208.7
假如是的話,服務端的網絡配置就已經全部完成。
下面是客戶端的網絡配置
因為是win 98系統(tǒng),所以只給出配置參數,配置方法略
ip地址為192.168.0.2
子網掩碼:255.255.255.0
域名服務器:202.106.196.115
網關:192.168.0.1
全部網絡設置完成
2.2 NAT原理
2.2.1在進入NAT設置之前,我們要先討論一下NAT的工作原理
在引言部分,我們已經提到了一個NAT應用實例,從這個實例中可以看出NAT和防火墻是一體的,換句話說,NAT就是防火墻。NAT對防火墻來說
是子集的關系。
在本節(jié),我們會深入討論NAT的原理部分,為了更清晰的認識NAT,我們借用INTERNET標準化組織發(fā)布的RFC3022文檔的部分內容。
NAT有三種類型:靜態(tài)NAT(Static NAT)、網絡地址端口轉換DNAT(destination- NAT)、動態(tài)地址NAT(Pooled NAT)。我們主要討論前面2種N
AT.
靜態(tài)nat解決問題的辦法是:在內部網絡中使用內部地址,通過NAT把內部地址翻譯成合法的IP地址在Internet上使用,其具體的做法是把IP
包內的地址域用合法的IP地址來替換。NAT設備維護一個狀態(tài)表(路由表,所以也稱NAT為軟路由),用來把非法的IP地址映射到合法的IP地址
上去。每個包在 NAT設備中都被翻譯成正確的IP地址,發(fā)往下一級,這意味著給處理器帶來了一定的負擔。但對于一般的網絡來說,這種負擔
是微不足道的。
網絡地址端口轉換NAT,也叫做反向NAT,他解決問題的方法是:在內部網絡中,使用內部地址的計算機開設了網絡服務(80,21等),當外部ip
想訪問這些服務時,NAT網關把外部訪問ip翻譯成內部ip,也就是說,把內部開設的服務,映射到一個合法的ip和端口上,已供外部訪問。
假如想進一步了解他的工作原理,NAT其實就是一種IP包欺詐,也可以說是對IP報頭的修改,請看下表
4位版本
4位首部長度
8位服務類型
16位總長度(字節(jié)數)
16位標識
3位標志
13位片偏移
8位生存時間(ttl)
8位協(xié)議
16位首部校驗和
32位源ip地址
32位目的ip地址
其他選項
攜帶數據
IP數據包格式和報頭中的各字段
NAT 網關(外202.204.208.5;內192.168.0.1)收到本地局域網內的客戶機(192.168.0.2),發(fā)來的ip數據,先判斷是否是本地子網中發(fā)來的
,假如通過,則按照她的目的ip地址查找本地路由表進行轉發(fā),NAT在包被繼續(xù)向前送出之前轉換32位源地址192.168.0.1成 202.204.208.5。
相應的,IP包往回傳時依據相同的地址進行轉換。
2.2.2 NAT設置
我們知道了NAT的原理,就可以進行NAT的配置了,我們前面說過了NAT就是防火墻,在RED。龋粒浴。梗跋伦詭Х阑饓Α。桑校裕粒拢蹋牛
我們在做好網絡設置后,假如要實現客戶端(win98)通過服務端上網(靜態(tài)NAT),可以在命令行下直接打入
iptables -t nat -A POSTROUTING -o eth1 -j SNAT - to 202.204.208.5
說明:
   -t nat : 調用NAT表,調用這個表說明遇到了產生新的連接的包。
   -A :該命令將一條規(guī)則附加到鏈的末尾。
  POSTROUTING:指定正當信息包打算離開防火墻時改變它們的規(guī)則。
  -o eth1:輸出接口為eth1
  -j SNAT:跳轉,也叫觸發(fā)條件,當滿足SNAT規(guī)則是便發(fā)生跳轉
  整條語句的意思為: 當防火墻遇到產生新的連接的包,則在他要離開防火墻時改變他的源ip為202.204.208.5并且從e
th1出口送出。
    nat的規(guī)則指定完成后,還要打開ip轉發(fā)功能:
         echo 1 > /proc/sys/net/ipv4/ip_forward
這樣,客戶端就可以通過208.5上網了。
假如208.5的客戶端192.168.0.2開設了80端口的web服務,如何讓外部訪問到這個局域網內部的服務呢?
這就用到了Dnat(也叫反向NAT,端口跳轉),在命令行下打入:
iptables -t nat -A PREROUTING -i eth1 -d 202.204.208.5 -p tcp -dport 80 -j DNAT -to-destination 192.168.0.2:80
語句說明:當有通過eth1接口的tcp協(xié)議訪問202.204.208.5的80端口的時候,則觸發(fā)跳轉,跳轉至局域網的192.
168.0.2的80端口。
但是這同時也出現一個問題,在同一局域網內的機器,無法訪問202.204.208.5的80端口。以下是原因:
假設192.168.0.3不通過
http://192.168.0.2:80
這種方式進行瀏...蟯??游侍餑兀?/a>
在命令行下打入:
iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.0/24 -d 192.168.0.2/32 -j SNAT -to 192.168.0.1
語句解釋:當192.168.0.1-255這個范圍的ip訪問192.168.0.2這個ip的時候,當數據包離開的時候修改源ip地址為 192.168.0.1,這相當于在
局域網內部,又作了一次NAT轉換。局域網內部通過192.168.0.1作為轉發(fā),而不是直接進行通信,這就避免了無法訪問局域網內部ip的情況。
目前,nat的功能就已經實現,但是并沒有對包進行過濾。
三.網絡攻擊和防火墻
3.1什么事網絡攻擊
當混亂的Internet和你良好的、有序的Linux服務器網絡之間進行連接時,你最好能知道哪些東西可以進入你的大門。這就需要制定包過濾策略
,既然是包過濾,肯定是要過濾掉那些對網絡有害的或者是無用的包,但哪些包是有害的呢?我們既然是在防守,不妨聽聽敵人的想法。
作為一個老練的入侵者,他并不會盲目的展開攻擊和入侵,他首先會確定自己的目標,當然,確定目標的方法有2種,一是根據個人的好惡或審
美觀點確定目標,二是根據廣義掃描器(反饋結果簡單,但是速度很快的掃描器)的反饋結果,選擇整體安全性不高的網絡作為攻擊目標。
接下來要做的就是了解這個網絡服務器,就象和人交往一樣,你對那個人越了解,就越清楚那個人的弱點,從而你對它的傷害就越致命。對人
的了解通過交談,對服務器的了解要通過掃描;首先要確定的是這臺服務器都開有什么服務,這很簡單,通過tcp協(xié)議的3次握手:
1. 當請求端對要掃描的服務器端口送一個包含SYN標志的TCP報文,這個報文指明客戶端使用的端口以及TCP連接的初始端口。
2.服務器在接受到客戶端的SYN包問候,假如客戶端請求連接的端口存在,則返回一個SYN+ACK的報文,表示客戶端的請求被接受。同時TCP序
號被加一。那么掃描器接受到SYN+ACK報文后,會向入侵者報告,掃描的這個端口是打開的,從而使入侵者判斷這是什么服務。
3. 客戶端也返回一個確認報文ACK給服務器端,同樣TCP序列號被加一,到此一個TCP連接完成。
4. 假如服務器的這個端口不存在,或者沒有返回SYN+ACK報文,則掃描端發(fā)出一個FIN標志報文,撤銷這個TCP連接。
當確定了服務器開設了什么端口以后,有經驗的入侵者可以從端口判斷出這臺服務器開設的具體服務,然后就是按照不同的服務進行漏洞攻擊
或入侵了。
從以上攻擊步驟看出,不要讓服務器完全暴露在網絡中,是非常重要的,也就是首先對端口進行過濾,只允許指定的服務通過制定的端口穿越
防火墻。這也就引出了RFC2979規(guī)定的互聯網防火墻規(guī)則配置的基本準則之一:
一切未被允許的就是禁止的。
基于該準則,防火墻應該封鎖所有的信息流,然后對希望提供的服務逐項開放。這是一種非常實用的方法,可以造成一種十分安全的環(huán)境,因
為只有經過仔細挑選的服務才被允許實用。
3.2如何防御網絡攻擊
從我們上例來看,我們只開設了web服務使用標準的80端口。
那我們要在防火墻中進行如下設置:
iptables -P INPUT -j DROP #我們用-P來攔截主機上所有通訊
iptables -A INPUT -p tcp -dport 80 -j ACCEPT #打開80端口的tcp協(xié)議
假如我們在將來還要還要添加適當端口,可以用上句的格式逐一添加
這樣我們就實現了對網絡服務器主機的端口過濾功能,這種方法也只是降低受到攻擊的怕剩?蛭?械墓セ韃⒉灰覽滌詼絲諢蛘嚦梢遠砸丫??碩栽
市砜?諾畝絲誚?泄セ鰨?攵雜謖?種攻擊,還要分別制定防火墻策略。
1. 死亡之ping (ping of death)
ping, 這個軟件是測試網絡間是否暢通用的,他應用于icmp協(xié)議,但并不依賴于哪個端口,由于在早期的階段,路由器對包的最大尺寸都有限
制,許多操作系統(tǒng)對 TCP/IP棧的實現在ICMP包上都是規(guī)定64KB,并且在對包的標題頭進行讀取之后,要根據該標題頭里包含的信息來為有效載
荷生成緩沖區(qū),當產生畸形的,聲稱自己的尺寸超過ICMP上限的包也就是加載的尺寸超過64K上限時,就會出現內存分配錯誤,導致TCP/IP堆棧
崩潰,致使接受方當機。
為了解決這個問題,我們可以在防火墻中加入以下內容
iptables -A INPUT -p icmp -icmp-type echo-request -i eth1 -j DROP
這句話的意思是,從接口eth1進入的icmp協(xié)議的請求全部丟棄。
2. SYN Flood (拒絕服務攻擊)
SYN Flood 是目前最流行的拒絕服務攻擊與分布式拒絕服務攻擊的方式之一,這是一種利用TCP協(xié)議缺陷,發(fā)送大量偽造的TCP連接請求,從而
使得被攻擊方資源耗盡的攻擊方式。
前面已經提過TCP的三次握手,問題就出在TCP連接的三次握手中,假設一個用戶向服務器發(fā)送了SYN報文后突然死機或掉線,那么服務器在發(fā)出
SYN+ACK應答報文后是無法收到客戶端的ACK報文的(第三次握手無法完成),這種情況下服務器一般會重試(再次發(fā)送SKY+ACK給客戶端)并等
待一段是句丟棄這個未完成的連接,這段時間的長度我們稱為(SYN Timeout),一般來說這個時間是分鐘為單位(半分鐘-2分鐘);一個用戶
出現異常導致服務器的一個線程等待1分鐘并不是什么很大的問題,但如果有一個惡意的攻擊者大量模擬這種情況,服務器端將為了維護一個非
常大的半連接列表而消耗非常多的資源----數以萬計的半連接,即使是簡單的保存并遍歷也會消耗很多的CPU資源與時間,何況還要不斷對這個
列表中的IP進行SYN+ACK的重試。實際上如果服務器的TCP/IP棧不夠強大,最后的結果往往是堆棧溢出崩潰---即使服務器端的系統(tǒng)足夠強大,
服務器端也將忙于處理攻擊者偽造的TCP連接請求而無暇理睬合法請求(客戶端的正常請求相較于非法請求來說非常。,此時從正常連接的角
度來說,服務器失去了響應,這種情況我們稱為服務器收到了洪水攻擊。
從防御角度來說,可以縮短SYN-Timeout 時間,由于SYN FLOOD攻擊效果取決于服務器上保持的SYN半連接數,這個值等于SYN攻擊的頻度* SYN
Timeout,所以通過縮短從接受到SYN報文到區(qū)定這個報文物校并丟棄連接的時間,,可以降低服務器的負荷。
我們可以在用IPTABLES執(zhí)行如下語句:
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
在所有的IPTABLES規(guī)則制定完后,可以用$ iptables-save > iptables-script把寫入的全部的規(guī)則寫入到文件,然后 在
/etc/rc.d/rc.local
加入:iptables-restore iptables-script
這樣每次重新啟動系統(tǒng)將自動載入iptables設定好的規(guī)則。
【結論】
本設計實現了Linux服務器在局域網內的代理上網應用和網絡防火墻應用,大量使用了Linux下的防火墻iptables。并且對tcp/ip協(xié)議作了透徹
的講解,對網絡的典型攻擊方式進行了明確的闡述。證明Linux在作為網絡網關服務器有充分的方式,不僅系統(tǒng)強壯,并且配置性很強。希望給
廣大喜歡網絡及網絡管理的同學提供了新的思路。 難題 - 熬夜 = 沒問題  



本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/76362/showart_1812717.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯網協(xié)會會員  聯系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP