歡迎您光臨本站 註冊首頁

一招一式攻克linux(八)

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

linux 網關服務
作者:田逸([email protected]) 《網管員世界》2006年第5期

在網路互聯的應用環境,網關起了非常重要的作用.在internet上,由路由器這樣的專用設備來擔當網關的職責.對於一些應用要求不是太高或者資金緊張而不願購買昂貴的路由器的機構,由linux來充當網關無疑是個聰明的選擇,實踐證明,基於linux部署的網關同樣有著很好的性能.
用 linux可以輕鬆地實現網路地址轉換(nat)、動態主機配置協議服務(dhcp)、虛擬專用網路服務(vpn)和防火牆(firewall)等基本網路網關服務.而完成這些任務僅需一台pc外加一套linux發行套件,是不是很省錢呢?
從功能上看,網關是幾個網路互聯的中間設備,因此作為網關的計算機,起碼應該具備兩個以上的網路介面;一個介面連接外部網路(isp接入),另外一個介面連接自己的內部網路.一個需要注意的問題是,在這個計算機上使用的網卡應該能被linux所支持,所以建議使用比較流行的、質量比較好的網卡.物理部件都準備好后,開始安裝操作系統.網關操作系統的安裝與一般的linux應用伺服器有些差別,在安裝過程中,選擇server (伺服器) 方式,安裝非常少的一些軟體,也不需要xwindow,安裝界面也使用文本形式進行,按照自己硬碟的大小和實際情況劃分一下分區,要不了幾分鐘就可以安裝完成.以root帳號登錄系統,檢查網路參數是否設置正確.為了方便起見,在這裡指定外網網卡的名稱為eth0,內網網卡為eth1.如果網路參數沒有被正確的設置,請修改文件 /etc/sysc 202.107.100.22 netmask 255.255.255.0 gateway 202.107.100.29 ,eth1的 ip地址為 192.168.1.1 ,netmask 255.255.255.0.然後運行命令 # ntsysv ,關閉一些不必要的服務,比如sendmail等.

網路地址轉換(nat)服務


眾所周知,ipv4地址的資源短缺,internet接入服務商(isp)分給用戶的全球唯一單播地址非常有限,為了讓大量沒有全球唯一單播地址的內部網路的主機訪問互聯網,通常的做法就是在自己的內部網路使用網路保留地址(私有網段如192.168.1.0/24這樣的網路地址段),然後通過連接網關,在網關上啟用網路地址轉換功能就實現了整個網路訪問internet的功能.nat分兩種類型-源地址轉換(snat)和目的地址轉換(dnat).源地址轉換用於內部網路主機訪問internet,目的地址轉換(dnat)用於internet上的主機訪問網關內的內部主機(使用的是保留地址).可以在網關上同時實現snat和dnat.
1、源地址轉換snat.分兩步進行:
(1)啟用內核的ip轉發功能.通過修改文件 /etc/sysctl.c 「net.ipv4.ip_forward = 0改成 net.ipv4.ip_forward = 1」,運行命令 # sysctl -p 使修改立即生效.
(2)編寫一個源地址轉換腳本/root/sant.sh,使其包含 「/iptables -t nat -A postrouting -o eth0 -j snat -to 202.107.100.22 「行,保存腳本然後給與執行許可權,然後執行這個腳本 # /root/snat.sh.
到這裡一個具備基本功能的地址轉換網關就做成了,我們在內網主機把默認網關設置成網關的內網網卡ip地址192.168.1.1,如果一切正常的話,內網的用戶就能訪問internet上的資源了.當然,不能每次都手動執行一遍腳本 /root/snat.sh,最好把 /root/snat.sh寫在腳本/etc/rc.d/rc.local里,這樣只要一開機就可以啟動腳本/root/snat.sh的源地址轉換功能.
2、目的地址轉換dnat.分兩步進行:
(1)啟用內核ip轉發功能.方法與snat相同,不再敘述.
(2)編寫一個目的地址轉換腳本/root/dnat.sh.其內容如下:
# !/bin/bash
iptables -t nat -A PREROUTING -p tcp -d 202.107.100.22 --dport 80 -j dnat --to 192.168.1.101:80


iptables -t nat -A PREROUTING -p tcp -d 202.107.100.22 -dport 25 -j dnat --to 192.168.1.102:25
iptables -t nat -A PREROUTING -p tcp -d 202.107.100.22 --dport 110 -j dnat --to 192.168.1.101:110
保存該腳本並給與執行許可權,就可以從internet訪問在內往只有保留地址的各種網路服務.以把這個腳本寫入 /etc/rc.d/rc.local,使它隨系統一起自動運行.

動態主機配置協議-dhcp
系統管理員使用dhcp服務,可以大大簡化客戶計算機設定ip地址的工作,啟用動態主機配置協議(dhcp),伺服器會自動地為聯網的客戶端計算機分配ip地址、子網掩碼、默認網關、域名解析服務(dns)等入網所必需的參數值.這同時也減輕了網路管理員管理和維護的負擔.當然,並不是所有場合都使用dhcp服務,比如伺服器就應該手動設定靜態網路參數.一個比較恰當的方案是在一個網路中同時使用dhcp和靜態網路參數設定.
dhcp的設定主要發生在伺服器端,客戶端基本上不用做設置.下面分3步來部署dhcp服務:
1、安裝dhcp.默認的情況下,linux自動安裝dhcp服務.用 # rpm ╟qa | grep dhcp 檢查 dhcp是否被正確安裝到系統中,如果沒有安裝,則下載rpm包或二進位源碼包安裝.這裡假定下載的是rpm包 dhcp-3.0.1-12_el.rpm,運行命令 # rpm ╟ivh dhcp-3.0.1-12_el.rpm安裝dhcp.dhcp服務需要讀取配置文件dhcpd.conf才能正常提供服務的,但是安裝完成dhcp后並沒有現成的dhcpd.c /etc/dhcpd.conf.
2、配置dhcp.在安裝dhcp 的同時會安裝一個範本文件/usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample,把這個範本文件複製到目錄/etc下,並改名成dhcpd.c # cp /usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample /etc/dhcpd.conf.照著這個範本的模式修改就不易出錯.dhcpd.c
選項/參數
聲明{
選項/參數
}
接下來是我的一個dhcp配置文件的實例:


ddns-update-style interim; //動態dns更新類型,這項必選
ignore client-updates; //忽略客戶端更新dns紀錄

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.80 192.168.1.200; //可分配給客戶端的 ip地址範圍
option routers 192.168.1.1; //指定默認路由,可以有多個,中間用逗號隔開
option subnet-mask 255.255.255.0;
option domain-name-servers 202.106.0.20;
default-lease-time 86400; //預設租期為24小時
max-lease-time 172800; //最大租期為48小時,可以更改這個值
}

上面的配置只是一個網段實施dhcp的情形,在稍大一點的網路應用環境,可能有多個網段需要dhcp服務,可以在每個網段內架設一個dhcp伺服器,但這決不是一個好的決策;實際的操作就是用一台dhcp伺服器來為多個子網分配ip地址.下面是一個為3個子網提供dhcp地址分配的樣例:
ddns-update-style interim;
ignore client-updates;

shared-network public {
option subnet-mask 255.255.255.0;
option domain-name-servers 202.108.0.20;
default-lease-time 86400;
max-release-time 172800;

subnet 192.168.1.0 netmask 255.255.255.0{
 range 192.168.1.80 192.168.1.200;
option routers 192.168.1.1;
}

subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.20 192.168.2.220;
option routers 192.168.2.1;
}

subnet 192.168.3.0 netmask 255.255.255.0 {
range 192.168.3.10 192.168.3.250;
option routers 192.168.3.1;
}
}
3、啟用dhcp服務.執行命令 # service dhcpd start 就啟動了dhcp伺服器.如果是以2進位源碼包形式安裝的話,請執行相應安裝目錄下的守護進程.
對於給多個網段提供dhcp服務的情形,需要在內部的路由上設置ip地址求助功能,具體的設置請參照各路由器廠商的資料,在此不做說明.使用dhcp方式獲取ip地址的客戶端設置很簡單,windows的用戶選tcp/ip協議屬性「自動獲取ip地址」即可.



虛擬專用網路(vpn)
虛擬專用網是藉助公共網路internet來連接在不同地理位置的本地網路,網路間的訪問就像本地訪問一般.由於vpn在傳輸數據的過程中對數據進行了加密,儘管這些數據在公共網路上傳輸,其安全性還是很高的.這幾年帶vpn功能的硬體設備還是賣得很歡的,有些防火牆廠商還拿它的vpn功能作賣點呢.在這裡我們不關注硬體vpn,只講linux下的vpn.
1、安裝vpn 包.需要dkms-2.0.10-2.fc5.noarch.rpm, kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm , ppp-2.4.3-9.2.i586.rpm 和 pptpd-1.3.1-0.i386.rpm這幾個rpm包.然後分別執行命令 # rpm -ivh dkms-2.0.10-2.fc5.noarch.rpm ; rpm -ivh kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm ; rpm -ivh ppp-2.4.3-9.2.i586.rpm ; rpm -ivh pptpd-1.3.1-0.i386.rpm 完成安裝.
2、配置vpn服務.有兩個文件需要修改:主配置文件/etc/pptpd.c 和vpn用戶帳號文件/etc/ppp/chap-sescrets.主配置文件需要設置vpn伺服器的本地地址和分配給客戶端的地址段,因此只需在主配置文件中手動追加localip和remoteip兩行就算完成配置任務.帳號文件保存vpn客戶端撥入需要的驗證信息,其格式是:
用戶名 服務 密碼 分配給用戶的口令
其中用戶名,密碼,分配給用戶的ip地址要用雙引號括起來,「服務」一般是pptpd.作為參照,下面給出一個pptpd.c
# more /etc/pptpd.c
localip 192.168.1.20
remoteip 192.168.1.201-220

# more /etc/ppp/chap-screts
「sery」 pptpd 「gshdh7%」 「*」
「public」 pptpd 「[email protected]」 「192.168.1.202」
3、客戶端的配置.使用windows的網路連接嚮導,只要選擇「通過ineternet連接到專用網路(v)」,一步步下去即可配置完成.注意:vpn伺服器的ip要填寫全球唯一單播地址,即網關伺服器的eth0的地址.
4、啟用vpn服務.再啟用vpn之前確認內核的ip轉發功能已經打開,然後執行命令 # service pptpd start 啟用vpn等待遠程用戶接入.



防火牆(firewall)
linux自帶包過濾防火牆netfilter/iptables,它可以檢查數據包的源和目的ip、源和目的埠、通訊協議、數據包的順序、 tcp先後順序、頭標記(syn、ack等)狀態等,功能十分強大.在安裝linux過程中,嚮導一般會提示用戶開啟防火牆,但這可能不能滿足實際的應用需求,建議關閉默認的防火牆功能,然後自己訂製符合需求的規則,寫成一個腳本,然後運行這個腳本,以取得更好的安全性能.
iptables的語法確實讓人生畏的,讓我們先來簡化一下,可以把它歸納成如下的格式:
iptables [-t 表] -命令 匹配 操作
iptables內置3個表:filter、 nat 、mangle.實際上常用的是表filter和nat,其中nat已在前面部分實現過了.命令選項常用的有 f-刷新規則、a-添加規則、p-默認策略等幾項.匹配選項包括源/目的地址、源/目的埠、協議類型以及埠號等.動作選項主要包括accept-接受收據包、drop-丟棄數據包、reject-拒絕數據包、snat-源地址轉換、dnat-目的地址轉換、masquerade-ip偽裝等.當表的類型是filter時,通常可以省略掉這一項.
一個好的防火牆規則應該是注重策略的,在自己訂製的防火牆規則腳本中,應該遵循刷新/清除規則-添加默認策略-訂製用戶訪問策略這樣的順序,業內的術語稱作「先關門后開窗」,先禁止所有的訪問許可,然後根據實際需求逐個開放訪問許可權.所以,一般防火牆腳本的前部分可以套用下面的格式:
# !/bin/bash
# refresh rules
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD //啟用前先清除所有規則

# default rules
iptables -P INPUT DROP //先禁止
iptables -P OUTPUT ACCEPT
iptables -P FORWORD DROP

# proof dos etc
iptables -a forward -p tcp --syn -m limit -j accept


iptables -a forward -p tcp --tcp-flag syn,ack,fin,rst -m limit
iptables -a forward -p tcp -m --limit 50/s --limit-burst 50 -j accept

# enable loopback
iptables -a input -i lo -p all -j ACCEPT

# enable lan user access firewall
iptables -a input -i eth1 -j accept
iptables -a output -o eth1 -j accept
iptables -a forward -i eth1 -j accept
iptables -a forward -i eth1 -j accept

# add user access rules
………….
接著就是逐個開放用戶的訪問許可權:
# enable lan user access website in internet
iptables -a output -o eth0 -p tcp -d any/0 --dport 80 -j accept
iptables -a intput -i eth0 -p tcp -s any/0 --sport 80 -j accept
.......
腳本寫完保存后,給與執行許可權然後執行.用區域網內的機器訪問internet,檢查設置的防火牆是否生效,是否符合我們本來的意圖.要讓這個防火牆腳本隨系統開機啟動,可以把這個腳本以行的方式寫入/etc/rc.d/rc.local文件.


2006-4-12 白石橋


[火星人 ] 一招一式攻克linux(八)已經有462次圍觀

http://coctec.com/docs/linux/show-post-53841.html