1. 程式人生 > >Linux下配置完整安全的DHCP伺服器詳解

Linux下配置完整安全的DHCP伺服器詳解

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

一、建立DHCP伺服器配置檔案

  可以使用Redhat Linux 9.0自身攜帶rpm包安裝。安裝結束後, DHCP 埠監督程式 dhcpd配置檔案是/etc目錄中的名為dhcpd.conf的檔案。下面手工建立/etc/dhcpd.conf檔案。/etc/dhcpd.conf通常包括三部分:parameters、declarations 、option。

  1.DHCP配置檔案中的parameters(引數):表明如何執行任務,是否要執行任務,或將哪些網路配置選項傳送給客戶。主要內容見表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 提供動態分配IP 的範圍。
host 主機名稱 參考特別的主機。
group 為一組引數提供宣告。
allow unknown-clients;deny unknown-client 是否動態分配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          ""; #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 的檔案,保持所有已經分發出去的 IP 地址。在Redhat Linux 發行版本中,該檔案位於 /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 "%content%01%content%00%content%00/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 伺服器發出的廣播訊息是否會受到阻礙。另外如果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地址被用來做為監聽區域子網域(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有許多發現版本,不同版本使用DHCP客戶端程式和DHCP伺服器也不相同。Linux提供了四種DHCP客戶端程式:pump, dhclient, dhcpxd, 和dhcpcd。瞭解不同Linux發行版本的伺服器端和客戶端程式對於常見錯誤排除是必要的。筆者曾經遇到過使用SuSE Linux 9.1 DHCP伺服器和使用Mandrake Linux 9.0客戶機不相容的情況。此時就必須更換客戶端程式。方法是先停止客戶機的網路服務,解除安裝原程式,安裝和伺服器端相容程式。附表:主要Linux發行版使用的DHCP客戶端。

 發行版本  預設 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伺服器在監牢中執行

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

  將軟體chroot化的一個問題是該軟體執行時需要的所有程式、配置檔案和庫檔案都必須事先安裝到chroot目錄中,通常稱這個目錄為chroot jail(chroot"監牢")。如果要在"監牢"中執行dhcpd,而事實上根本看不到檔案系統中那個真正的目錄。因此需要事先建立目錄,並將dhcpd複製到其中。同時dhcpd需要幾個庫檔案,可以使用ldd(library Dependency Display縮寫)命令,ldd作用是顯示一個可執行程式必須使用的共享庫。

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:宋體'>

  這意味著還需要在"監牢"中建立lib目錄,並將庫檔案複製到其中。手工完成這一工作是非常麻煩的,此時可以用jail軟體包來幫助簡化chroot"監牢"建立的過程。

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

 
  (2)用jail建立監牢

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

  mkjailenv:建立chroot"監牢"目錄,並且從真實檔案系統中拷貝基本的軟體環境。addjailsw:從真實檔案系統中拷貝二進位制可執行檔案及其相關的其它檔案(包括庫檔案、輔助性檔案和裝置檔案)到該"監牢"中。addjailuser:建立新的chroot"監牢"使用者。

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

#/sbin/service dhcpd start
#mkjailenv  /chroot/
mkjailenv

A component of Jail (version 1.9 for linux)

Juan M. Casillas

Making chrooted environment into /chroot

        Doing preinstall()

        Doing special_devices()

        Doing gen_template_password()

        Doing postinstall()

Done.

 
  下面的例子展示為"監牢"新增dhcpd程式的過程:

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

A component of Jail (version 1.9 for linux)

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用到的庫檔案。而幾乎所有基於共享庫的二進位制可執行檔案都需要上述的幾個庫檔案。接下來將dhcpd的相關檔案拷貝到"監牢"中:
#  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:

[[email protected] 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
 
  埠號沒有改變。現在dhcpd已經成功執行在"監牢"中。到此為止一個這樣,一個完整和安全的 DHCP伺服器就完成了。

相關推薦

Linux配置完整安全DHCP伺服器

DHCP是動態主機配置協議。這個協議用於向計算機自動提供IP地址,子網掩碼和路由資訊。網路管理員通常會分配某個範圍的IP地址來分發給區域網上的客戶機。當裝置接入這個區域網時,它們會向 DHCP 伺服器請求一個 IP 地址。然後DHCP伺服器為每個請求的裝置分配一個地址,直到分

Linux完整的Samba伺服器配置攻略

關於Samba,大家有沒有這種感覺,弄了N久丫的死活不喘氣兒。找來各種“哥”和“姐”,發現全是“詳解…配置專題”,看了半天不知道別個在說什麼,好不容易找了個簡單的教程,從頭到尾跟著做,尼瑪,浪費時間精力不說,就是跑不起來。是不是有種吐血的生理反應了。唉,不會寫文件的娃,傷

到目前為止,Linux完整的Samba伺服器配置攻略

關於Samba,大家有沒有這種感覺,弄了N久丫的死活不喘氣兒。找來各種“哥”和“姐”,發現全是“詳解…配置專題”,看了半天不知道別個在說什麼,好不容易找了個簡單的教程,從頭到尾跟著做,尼瑪,浪費時間精力不說,就是跑不起來。是不是有種吐血的生理反應了。唉,不會寫文件的娃,傷不起啊。而本文實現的是Linux和

如何在linux配置完整的latex中文支援

首先,安裝TexLive。如果系統版本太舊不能用軟體包管理器安裝或升級,請之TexLive網站下載最新的texlive光碟映象安裝。(比如從科大映象ftp://mirrors.ustc.edu.cn/CTAN/systems/texlive/Images/下載)。手動安裝的TexLive(預設裝在/

Linux同步工具inotify+rsync使用

server linux 通道 主機 Linux下同步工具inotify+rsync使用詳解 Posted on 2014-12-12 | In Linux | 9 | Visitors 4381. rsync1.1 什麽是rsyncrsync是一個遠程數據同步工具,可通過LAN/WAN

Linux PS1 PS2 PS3 PS4 提示符

linux提示符很多人在用Linux時,對提示符都不太註重,能夠利用好提示符可更直觀地查看,利於自己的判斷Linux下有PS1 PS2 PS3 PS4 四類提示符,這四個變量都是環境變量,至於系統裏有哪些環境變量,可使用命令 “env”來查看PS1命令提示符PS1有那些配置,或者說PS1裏頭都能配置些命令提示

linuxiptables命令的應用與

iptables 一、iptables的規則表和鏈。 表(tables)提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。 鏈(chains)是數據包傳播的路徑,每一條鏈其實就是眾多規則中的

Linuxrar 命令壓縮和解壓

保持 介紹 詳細 註意 壓縮 rar 縮進 command 解壓縮 例1:添加文件或目錄到壓縮檔案中,使用a命令。例如把文件files1添加到abc.rar中,使用a或m命令,a命令把file1文件添加到abc.rar檔案中保持原有的file1文件不變,m命令移動file1

Linux/etc/sysconfig目錄下文件

sysconfig今天給服務器添加防火墻規則時,不小心刪除了一條規則,然後我的遠程連接就斷了,我老大忽然問我iptables配置文件路徑在什麽地方,當時就懵逼了,我還真不知道因為平時全部都是命令添加防火墻,結果被老大給說了基礎不紮實。想想也真是,Linux學習一年多了,當初那麽拼命的學習就是為了打好基礎,本想

Linuxoracle12c數據庫安裝

shadow follow glibc 格式化磁盤 www ech etc 12c 接收 簡介: oracle12c概述 oracle12c數據庫屬於關系型數據庫,采用C/S模式、支持SQL語言,穩定性、高性能、安全性優於其他官方網站: https://www.oracle

Linux多資料夾編寫Makefile

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linuxpasswd和shadow檔案內容

一、/etc/passwd /etc/passwd 檔案是一個純文字檔案,每行採用了相同的格式:  name:password:uid:gid:comment:home:shell  name 使用者登入名  password 使用者口令。此域中的口令是加密的,常用x表示。當用戶登入系統時,系統對輸入的口令採

linuxrz和sz用發

在ubuntu系統下輸入如下: 1:第一步 [email protected]:~/node$ sr 程式“sr”尚未安裝。 您可以使用以下命令安裝: sudo apt install surfraw 2:第二步 [email protected]:~/node$

Linux的壓縮zip,tar命令及例項

Linux下的壓縮解壓縮命令詳解及例項 例項:壓縮伺服器上當前目錄的內容為xxx.zip檔案 zip -r xxx.zip ./* 解壓zip檔案到當前目錄 unzip filename.zip ============================ 另:有些伺服器

linux的藍芽驅動程式

1、首先要做Bluez協議棧的移植,這樣在開發板上才可以用hciconfig, hcitool等命令。關於bluez協議棧的移植步驟網上很多。 2、該驅動是USB藍芽裝置驅動,分析根據藍芽驅動的寫的順序進行。因為只是要做資料的傳輸,所以講用於語音的等時傳輸部分去掉了。 首先

Linux中文檔名亂碼問題的

最近做的專案中,涉及Linux下生成中文檔名並壓縮打包下載亂碼問題,需要將生成的壓縮包檔案自定義重新命名(包括中文),問題來了,Linux下不支援中文的,所以會導致中文亂碼問題,網上找了幾天,都沒解決,現在終於給碼出來了,希望大家指出缺點。 首先,讓linux

Linux 使用clock_gettime給程式計時

1 #include <iostream>2 #include <time.h>3 usingnamespace std;4 5 timespec diff(timespec start, timespec end);6 7 int main()8 {9 timespec time

Linux使用者組、檔案許可權

使用者組 在linux中的每個使用者必須屬於一個組,不能獨立於組外。在linux中每個檔案有所有者、所在組、其它組的概念 - 所有者 - 所在組 - 其它組 - 改變使用者所在的組 所有者 一般為檔案的建立者,誰建立了該檔案,就天然的成為該檔案的所有者

LINUXOracle資料庫使用者建立方法

本文例項分析了LINUX下Oracle資料庫使用者建立方法。分享給大家供大家參考,具體如下: 1)登入linux,以oracle使用者登入(如果是root使用者登入的,登入後用 su - oracle命令切換成oracle使用者) 2)首先要開啟監聽器命令如下:lsn

Linux五種I/O模型(阻塞IO、非阻塞IO、IO複用、訊號驅動、非同步IO)

文章轉載自微信公眾號:漫話程式設計 1 什麼是I/O 程式是由資料+指令構成的,執行程式的過程可以分成下面這幾步: 1.將程式碼載入到記憶體中,逐條執行記憶體中的程式碼 2.在執行程式碼的過程中,可能需要對檔案的讀寫,即將檔案輸入(Input)