小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

linux下配置完整安全的dhcp服務器詳解

 accesine 2005-08-14







DHCP是動態(tài)主機配置協議.這個協議用于向計算機自動提供IP地址,子網掩碼和路由信息。網絡管理員通常會分配某個范圍的IP地址來分發(fā)給局域網上的客戶機。當設備接入這個局域網時,它們會向 DHCP 服務器請求一個 IP 地址。然后DHCP服務器為每個請求的設備分配一個地址,直到分配完該范圍內的所有 IP 地址為止。已經分配的IP地址必須定時地延長借用期。這個延期的過程稱作leasing,確保了當客戶機設備在正常地釋放IP地址之前突然從網絡斷開時被分配的地址可以歸還給服務器。本文以Redhat Linux 9.0為例,介紹如何建立一個完整和安全的DHCP服務器。

一、建立DHCP服務器配置文件

可以使用Redhat Linux 9.0自身攜帶rpm包安裝。安裝結束后, DHCP 端口監(jiān)督程序 dhcpd配置文件是/etc目錄中的名為dhcpd.conf的文件。下面手工建立/etc/dhcpd.conf文件。 /etc/dhcpd.conf通常包括三部分:parameters、declarations 、option。

1.DHCP配置文件中的parameters(參數):表明如何執(zhí)行任務,是否要執(zhí)行任務,或將哪些網絡配置選項發(fā)送給客戶。主要內容見表1

參數


解釋

ddns-update-style


配置DHCP-DNS 互動更新模式。

default-lease-time


指定確省租賃時間的長度,單位是秒。

max-lease-time


指定最大租賃時間長度,單位是秒。

hardware


指定網卡接口類型和MAC地址。

server-name


通知DHCP客戶服務器名稱。

get-lease-hostnames flag


檢查客戶端使用的IP地址。

fixed-address ip


分配給客戶端一個固定的地址。

authritative


拒絕不正確的IP地址的要求。
2. DHCP配置文件中的declarations (聲明):用來描述網絡布局、提供客戶的IP地址等。主要內容見表2:

聲明


解釋

shared-network


用來告知是否一些子網絡分享相同網絡。

subnet


描述一個IP地址是否屬于該子網。

range 起始IP 終止IP


提供動態(tài)分配IP 的范圍。

host 主機名稱


參考特別的主機。

group


為一組參數提供聲明。

allow unknown-clients ﹔deny unknown-client


是否動態(tài)分配IP給未知的使用者。

allow bootp;deny bootp


是否響應激活查詢。

allow booting﹔deny booting


是否響應使用者查詢。



filename


開始啟動文件的名稱,應用于無盤工作站。

next-server


設置服務器從引導文件中裝如主機名,應用于無盤工作站。


3. DHCP配置文件中的option(選項):用來配置DHCP可選參數,全部用option關鍵字作為開始,主要內容包括見表3:

選項


解釋

subnet-mask


為客戶端設定子網掩碼。

domain-name


為客戶端指明DNS名字。

domain-name-servers


為客戶端指明DNS服務器IP地址。

host-name


為客戶端指定主機名稱。

routers


為客戶端設定默認網關。

broadcast-address


為客戶端設定廣播地址。

ntp-server


為客戶端設定網絡時間服務器IP地址。

time-offset


為客戶端設定和格林威治時間的偏移時間,單位是秒。


注意:如果客戶端使用的是視窗操作系統,不要選擇"host-name"選項,即不要為其指定主機名稱。

下面是一個筆者使用的DHCP配置文件,這是一個C類網絡,共126個IP地址可以分配的例子。讀者可以復制后使用,注意紅色部分是必須要修改的。

ddns-update-style interim;

ignore client-updates;



subnet 192.168.1.0 netmask 255.255.255.0 {



   option routers          192.168.1.254;

   option subnet-mask      255.255.255.0;

   option broadcast-address        192.168.1.255;

   option domain-name-servers      192.168.1.3;

   option domain-name          "www.cao.com"; #DNS名稱#

   option domain-name-servers  192.168.1.3;



   option time-offset      -18000;



   range dynamic-bootp 192.168.1.128 192.168.1.255;

   default-lease-time 21600;

   max-lease-time 43200;



       host ns {

       hardware ethernet 52:54:AB:34:5B:09;#運行DHCP的網絡接口的MAC地址#

       fixed-address 192.168.1.9;

   }

}
二、建立客戶租約文件

運行DHCP服務器還需要一個名為 dhcpd.leases 的文件,保持所有已經分發(fā)出去的 IP 地址。在Redhat Linux 發(fā)行版本中,該文件位于 /var/lib/dhcp/ 目錄中。如果您通過 RPM 安裝 ISC DHCP,那么該目錄應該已經存在。dhcpd.leases的文件格式為:

Leases address {statement}



一個典型的文件內容如下:

lease 192.168.1.255 {             #DHCP服務器分配的IP地址#

 starts 1 2005/05/02 03:02:26;    # lease 開始租約時間#

 ends 1 2005/05/02 09:02:26;       # lease 結束租約時間#

 binding state active;

 next binding state free;

 hardware ethernet 00:00:e8:a0:25:86;  #客戶機網卡MAC地址#

 uid "\001\000\000\350\240%\206";   #用來驗證客戶機的UID標示#

 client-hostname "cjh1";    #客戶機名稱#

}



注意lease 開始租約時間和lease 結束租約時間是格林威治標準時間(GMT),不是本地時間。

第一次運行DHCP服務器時dhcpd.leases是一個空文件,也不用手工建立。如果不是通過 RPM 安裝 ISC DHCP,或者 dhcpd 已經安裝,那么您應該試著確定 dhcpd 將其 lease 文件寫到何處,并確保該文件存在。也可以手工建立一個空文件:

#touch /var/lib/dhcp/dhcpd.leases



三、啟動和檢查DHCP服務器

使用命令啟動DHCP服務器:

#service dhcpd start



使用ps命令檢查dhcpd進程:

#ps -ef | grep dhcpd

root      2402     1  0 14:25 ?        00:00:00 /usr/sbin/dhcpd

root      2764  2725  0 14:29 pts/2    00:00:00 grep dhcpd



使用檢查dhcpd運行的端口:

# netstat -nutap | grep dhcpd

udp   0  0 0.0.0.0:67         0.0.0.0:*                           2402/dhcpd



四、配置DHCP客戶端

通常網管員使用選擇手工配置 DHCP 客戶,需要修改 /etc/sysconfig/network 文件來啟用聯網;并修改 /etc/sysconfig/network-scripts 目錄中每個網絡設備的配置文件。在該目錄中,每個設備都有一個叫做 ifcfg-eth? 的配置文件,eth?是網絡設備的名稱。 如eth0等。如果你想在引導時啟動聯網,NETWORKING 變量必須 被設為 yes。 除了此處之外/etc/sysconfig/network 文件應該包含以下行:

NETWORKING=yes

DEVICE=eth0

BOOTPROTO=dhcp

ONBOOT=yes
五、DHCP配置常見錯誤排除

通常配置DHCP 服務器很容易,不過,在這里有一些技巧可以幫助您避免出現問題。對服務器而言,要確保網卡正常工作,并具備廣播功能。對客戶機而言,還要確保客戶機的網卡正常工作。最后,要考慮網絡的拓撲,并考慮客戶機向 DHCP 服務器發(fā)出的廣播消息是否會受到阻礙。另外如果dhcpd進程沒有啟動,那么可以瀏覽 syslog 消息文件來確定是哪里出了問題。這個消息文件通常是 /var/log/messages。

典型故障:

1.DHCP服務器配置完成,沒有語法錯誤。但是網絡中的客戶機卻沒辦法取得IP地址。

通常是Linux DHCP服務器沒有辦法接收來自255.255.255.255 的 DHCP 客戶機的Request 封包造成的。一般是Linux DHCP服務器的網卡沒有設置具有MULTICAST功能。為了讓dhcpd(dhcp程序的守護進程)能夠正常的和DHCP客戶機溝通,dhcpd必須傳送封包到255.255.255.255這個IP地址,但是有些Linux系統里255.255.255.255這個IP地址被用來做為監(jiān)聽區(qū)域子網域(local subnet)廣播的 IP地址,所以需要在路由表(routing table)里加入255.255.255.255以激活MULTICAST功能;

使用命令:

route add -host 255.255.255.255 dev eth0



如果報告錯誤消息:255.255.255.255:Unkown host

那么請先修改/etc/hosts加入一行:

255.255.255.255 dhcp

2. DHCP客戶端程序和DHCP服務器不兼容

由于Linux有許多發(fā)現版本,不同版本使用DHCP客戶端程序和DHCP服務器也不相同。Linux提供了四種DHCP客戶端程序:pump, dhclient, dhcpxd, 和dhcpcd。了解不同Linux發(fā)行版本的服務器端和客戶端程序對于常見錯誤排除是必要的。筆者曾經遇到過使用SuSE Linux 9.1 DHCP服務器和使用Mandrake Linux 9.0客戶機不兼容的情況。此時就必須更換客戶端程序。方法是先停止客戶機的網絡服務,卸載原程序,安裝和服務器端兼容程序。附表:主要Linux發(fā)行版使用的DHCP客戶端。

發(fā)行版本




缺省 DHCP客戶端


可選 DHCP 客戶端


DHCP客戶端啟動

腳本


附加配置文件

Red Hat Linux 9.0


dhclient





/sbin/ifup


/etc/sysconfig/network,

/etc/sysconfig/network-scripts/ifcfg-eth0

Debian Linux 3.0


dhclient





/sbin/ifup


/etc/network/interfaces,

/etc/dhclient.conf

Mandrake Linux 9.1


dhclient


dhcpcd, dhcpxd, pump


/sbin/ifup


/etc/sysconfig/network,

/etc/sysconfig/network-scripts/ifcfg-eth0,

/etc/dhclient-eth0.conf

SuSE Linux 9.1


dhcpcd


dhclient


/sbin/ifup-dhcp


/etc/sysconfig/network/dhcp,

/etc/sysconfig/network/ifcfg-eth0

六、DHCP服務器的安全

1. 在指定網絡接口啟動DHCP服務器

如果你的Linux系統連接了不止一個網絡界面,但是你只想讓 DHCP 服務器啟動其中之一,你可以配置 DHCP 服務器只在那個設備上啟動。在 /etc/sysconfig/dhcpd 中,把界面的名稱添加到 DHCPDARGS 的列表中:

DHCPDARGS=eth0

或者直接使用命令:

Echo “DHCPDARGS=eth0”>> /etc/ sysconfig/dhcpd



這樣對于帶有兩個網卡的防火墻機器,更加安全:一個網卡可以被配置成 DHCP 客戶來從互聯網上檢索 IP 地址;另一個網卡可以被用作防火墻之后的內部網絡的 DHCP 服務器。僅指定連接到內部網絡的網卡使系統更加安全,因為用戶無法通過互聯網來連接它的守護進程。

2. 讓DHCP服務器在監(jiān)牢中運行

所謂"監(jiān)牢"就是指通過chroot機制來更改某個軟件運行時所能看到的根目錄,即將某軟件運行限制在指定目錄中,保證該軟件只能對該目錄及其子目錄的文件有所動作,從而保證整個服務器的安全。這樣即使出現被破壞或被侵入,所受的損失也較小。

將軟件chroot化的一個問題是該軟件運行時需要的所有程序、配置文件和庫文件都必須事先安裝到chroot目錄中,通常稱這個目錄為chroot jail(chroot"監(jiān)牢")。如果要在"監(jiān)牢"中運行dhcpd,而事實上根本看不到文件系統中那個真正的目錄。因此需要事先創(chuàng)建目錄,并將 dhcpd復制到其中。同時dhcpd需要幾個庫文件,可以使用ldd(library Dependency Display縮寫)命令,ldd作用是顯示一個可執(zhí)行程序必須使用的共享庫。











ldd dhcpd


       libc.so.6 =>

/lib/tls/libc.so.6 (0x42000000)


       /lib/ld-linux.so.2

=> /lib/ld-linux.so.2 (0x40000000)

style=‘font-family:宋體‘>




這意味著還需要在"監(jiān)牢"中創(chuàng)建lib目錄,并將庫文件復制到其中。手工完成這一工作是非常麻煩的,此時可以用jail軟件包來幫助簡化chroot"監(jiān)牢"建立的過程。

(1)Jail軟件的編譯和安裝

Jail官方網站是:http://www./ ,最新版本:1.9a。

#Wget
http://www./static/dwn/projects/jail/jail_1.9a.tar.gz

#tar xzvf jail.tar.gz ;cd jail/src

#make; make install



(2)用jail創(chuàng)建監(jiān)牢

jail軟件包提供了幾個Perl腳本作為其核心命令,包括mkjailenv、addjailuser和addjailsw。

mkjailenv:創(chuàng)建chroot"監(jiān)牢"目錄,并且從真實文件系統中拷貝基本的軟件環(huán)境。addjailsw:從真實文件系統中拷貝二進制可執(zhí)行文件及其相關的其它文件(包括庫文件、輔助性文件和設備文件)到該"監(jiān)牢"中。addjailuser:創(chuàng)建新的chroot"監(jiān)牢"用戶。

首先停止目前dhcpd服務,然后建立chroot目錄:

#/sbin/service dhcpd start

#mkjailenv  /chroot/

mkjailenv

A component of Jail (version 1.9 for linux)

http://www.gsyc.inf./~assman/jail/

Juan M. Casillas



Making chrooted environment into /chroot

       Doing preinstall()

       Doing special_devices()

       Doing gen_template_password()

       Doing postinstall()

Done.



下面的例子展示為"監(jiān)牢"添加dhcpd程序的過程:

# addjailsw  /chroot/ -P /usr/sbin/dhcpd

addjailsw

A component of Jail (version 1.9 for linux)

http://www.gsyc.inf./~assman/jail/

Juan M. Casillas



Guessing dhcpd args(0)

Warning: file /chroot//lib/tls/libc.so.6 exists. Overwritting it

Warning: file /chroot//lib/ld-linux.so.2 exists. Overwritting it

………

Done.



不用在意那些警告信息,因為jail會調用ldd檢查dhcpd用到的庫文件。而幾乎所有基于共享庫的二進制可執(zhí)行文件都需要上述的幾個庫文件。接下來將dhcpd的相關文件拷貝到"監(jiān)牢"中:

#  mkdir -p /chroot/dhcp/etc

# cp /etc/dhcpd.conf /chroot/dhcp/etc/

# mkdir -p /chroot/dhcp/var/state/dhcp

# touch /chroot/dhcp/var/state/dhcp/dhcp.leases



重新啟動dhcpd:

[root@www root]# /chroot/usr/sbin/dhcpd


使用ps命令檢查dhcpd進程:

#ps -ef | grep dhcpd

root      2402     1  0 14:25 ?        00:00:00 /chroot/usr/sbin/dhcpd

root      2764  2725  0 14:29 pts/2    00:00:00 grep dhcpd



注意此時進程名稱已經改變,使用檢查dhcpd運行的端口:

# netstat -nutap | grep dhcpd

udp   0  0 0.0.0.0:67         0.0.0.0:*                           2402/dhcpd



端口號沒有改變?,F在dhcpd已經成功運行在"監(jiān)牢"中。到此為止一個這樣,一個完整和安全的 DHCP服務器就完成了。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多