Linux下配置完整安全的DHCP服务器详解.docx
- 文档编号:7503142
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:10
- 大小:20.80KB
Linux下配置完整安全的DHCP服务器详解.docx
《Linux下配置完整安全的DHCP服务器详解.docx》由会员分享,可在线阅读,更多相关《Linux下配置完整安全的DHCP服务器详解.docx(10页珍藏版)》请在冰豆网上搜索。
Linux下配置完整安全的DHCP服务器详解
Linux下配置完整安全的DHCP服务器详解
DHCP是动态主机配置协议.这个协议用于向计算机自动提供IP地址,子网掩码和路由信息。
网络管理员通常会分配某个范围的IP地址来分发给局域网上的客户机。
当设备接入这个局域网时,它们会向DHCP服务器请求一个IP地址。
然后DHCP服务器为每个请求的设备分配一个地址,直到分配完该范围内的所有IP地址为止。
已经分配的IP地址必须定时地延长借用期。
这个延期的过程称作leasing,确保了当客户机设备在正常地释放IP地址之前突然从网络断开时被分配的地址可以归还给服务器。
本文以RedhatLinux9.0为例,介绍如何建立一个完整和安全的DHCP服务器。
一、建立DHCP服务器配置文件
可以使用RedhatLinux9.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-hostnamesflag检查客户端使用的IP地址。
fixed-addressip分配给客户端一个固定的地址。
authritative拒绝不正确的IP地址的要求。
2.DHCP配置文件中的declarations(声明):
用来描述网络布局、提供客户的IP地址等。
主要内容见表2:
声明解释
shared-network用来告知是否一些子网络分享相同网络。
subnet描述一个IP地址是否属于该子网。
range起始IP终止IP提供动态分配IP的范围。
host主机名称参考特别的主机。
group为一组参数提供声明。
allowunknown-clients﹔denyunknown-client是否动态分配IP给未知的使用者。
allowbootp;denybootp是否响应激活查询。
allowbooting﹔denybooting是否响应使用者查询。
2005520124131.htm开始启动文件的名称,应用于无盘工作站。
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-styleinterim;
ignoreclient-updates;
subnet192.168.1.0netmask255.255.255.0{
optionrouters192.168.1.254;
optionsubnet-mask255.255.255.0;
optionbroadcast-address192.168.1.255;
optiondomain-name-servers192.168.1.3;
optiondomain-name""; #DNS名称#
optiondomain-name-servers192.168.1.3;
optiontime-offset-18000;
rangedynamic-bootp192.168.1.128192.168.1.255;
default-lease-time21600;
max-lease-time43200;
hostns{
hardwareethernet52:
54:
AB:
34:
5B:
09;#运行DHCP的网络接口的MAC地址#
fixed-address192.168.1.9;
}
}
二、建立客户租约文件
运行DHCP服务器还需要一个名为dhcpd.leases的文件,保持所有已经分发出去的IP地址。
在RedhatLinux发行版本中,该文件位于/var/lib/dhcp/目录中。
如果您通过RPM安装ISCDHCP,那么该目录应该已经存在。
dhcpd.leases的文件格式为:
Leasesaddress{statement}
一个典型的文件内容如下:
lease192.168.1.255{#DHCP服务器分配的IP地址#
starts12005/05/0203:
02:
26;#lease开始租约时间#
ends12005/05/0209:
02:
26;#lease结束租约时间#
bindingstateactive;
nextbindingstatefree;
hardwareethernet00:
00:
e8:
a0:
25:
86;#客户机网卡MAC地址#
uid"\001\000\000\350\240%\206";#用来验证客户机的UID标示#
client-hostname"cjh1";#客户机名称#
}
注意lease开始租约时间和lease结束租约时间是格林威治标准时间(GMT),不是本地时间。
第一次运行DHCP服务器时dhcpd.leases是一个空文件,也不用手工建立。
如果不是通过RPM安装ISCDHCP,或者dhcpd已经安装,那么您应该试着确定dhcpd将其lease文件写到何处,并确保该文件存在。
也可以手工建立一个空文件:
#touch/var/lib/dhcp/dhcpd.leases
三、启动和检查DHCP服务器
使用命令启动DHCP服务器:
#servicedhcpdstart
使用ps命令检查dhcpd进程:
#ps-ef|grepdhcpd
root24021014:
25?
00:
00:
00/usr/sbin/dhcpd
root27642725014:
29pts/200:
00:
00grepdhcpd
使用检查dhcpd运行的端口:
#netstat-nutap|grepdhcpd
udp000.0.0.0:
670.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地址。
通常是LinuxDHCP服务器沒有办法接收來自255.255.255.255的DHCP客户机的Request封包造成的。
一般是LinuxDHCP服务器的网卡没有设置具有MULTICAST功能。
为了让dhcpd(dhcp程序的守护进程)能够正常的和DHCP客户机沟通,dhcpd必须传送封包到255.255.255.255这个IP地址,但是有些Linux系统里255.255.255.255这个IP地址被用来做为监听区域子网域(localsubnet)广播的IP地址,所以需要在路由表(routingtable)里加入255.255.255.255以激活MULTICAST功能;
使用命令:
routeadd-host255.255.255.255deveth0
如果报告错误消息:
255.255.255.255:
Unkownhost
那么请先修改/etc/hosts加入一行:
255.255.255.255dhcp
2.DHCP客户端程序和DHCP服务器不兼容
由于Linux有许多发现版本,不同版本使用DHCP客户端程序和DHCP服务器也不相同。
Linux提供了四种DHCP客户端程序:
pump,dhclient,dhcpxd,和dhcpcd。
了解不同Linux发行版本的服务器端和客户端程序对于常见错误排除是必要的。
笔者曾经遇到过使用SuSELinux9.1DHCP服务器和使用MandrakeLinux9.0客户机不兼容的情况。
此时就必须更换客户端程序。
方法是先停止客户机的网络服务,卸载原程序,安装和服务器端兼容程序。
附表:
主要Linux发行版使用的DHCP客户端。
发行版本
缺省DHCP客户端
可选DHCP客户端
DHCP客户端启动
脚本
附加配置文件
RedHatLinux9.0
dhclient
无
/sbin/ifup
/etc/sysconfig/network,
/etc/sysconfig/network-scripts/ifcfg-eth0
DebianLinux3.0
dhclient
无
/sbin/ifup
/etc/network/interfaces,
/etc/dhclient.conf
MandrakeLinux9.1
dhclient
dhcpcd,dhcpxd,pump
/sbin/ifup
/etc/sysconfig/network,
/etc/sysconfig/network-scripts/ifcfg-eth0,
/etc/dhclient-eth0.conf
SuSELinux9.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目录中,通常称这个目录为chrootjail(chroot"监牢")。
如果要在"监牢"中运行dhcpd,而事实上根本看不到文件系统中那个真正的目录。
因此需要事先创建目录,并将dhcpd复制到其中。
同时dhcpd需要几个库文件,可以使用ldd(libraryDependencyDisplay缩写)命令,ldd作用是显示一个可执行程序必须使用的共享库。
ldddhcpd
yes">libc.so.6=>
/lib/tls/libc.so.6(0x42000000)
yes">/lib/ld-linux.so.2
=>/lib/ld-linux.so.2(0x40000000)
style='font-family:
宋体'>
这意味着还需要在"监牢"中创建lib目录,并将库文件复制到其中。
手工完成这一工作是非常麻烦的,此时可以用jail软件包来帮助简化chroot"监牢"建立的过程。
(1)Jail软件的编译和安装
Jail官方网站是:
,最新版本:
1.9a。
#Wget
#tarxzvfjail.tar.gz;cdjail/src
#make;makeinstall
(2)用jail创建监牢
jail软件包提供了几个Perl脚本作为其核心命令,包括mkjailenv、addjailuser和addjailsw。
mkjailenv:
创建chroot"监牢"目录,并且从真实文件系统中拷贝基本的软件环境。
addjailsw:
从真实文件系统中拷贝二进制可执行文件及其相关的其它文件(包括库文件、辅助性文件和设备文件)到该"监牢"中。
addjailuser:
创建新的chroot"监牢"用户。
首先停止目前dhcpd服务,然后建立chroot目录:
#/sbin/servicedhcpdstart
#mkjailenv/chroot/
mkjailenv
AcomponentofJail(version1.9forlinux)
http:
//www.gsyc.inf.uc3m.es/~assman/jail/
JuanM.Casillas
Makingchrootedenvironmentinto/chroot
Doingpreinstall()
Doingspecial_devices()
Doinggen_template_password()
Doingpostinstall()
Done.
下面的例子展示为"监牢"添加dhcpd程序的过程:
#addjailsw/chroot/-P/usr/sbin/dhcpd
addjailsw
AcomponentofJail(version1.9forlinux)
http:
//www.gsyc.inf.uc3m.es/~assman/jail/
JuanM.Casillas
Guessingdhcpdargs(0)
Warning:
file/chroot//lib/tls/libc.so.6exists.Overwrittingit
Warning:
file/chroot//lib/ld-linux.so.2exists.Overwrittingit
………
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:
[root@wwwroot]#/chroot/usr/sbin/dhcpd
使用ps命令检查dhcpd进程:
#ps-ef|grepdhcpd
root24021014:
25?
00:
00:
00/chroot/usr/sbin/dhcpd
root27642725014:
29pts/200:
00:
00grepdhcpd
注意此时进程名称已经改变,使用检查dhcpd运行的端口:
#netstat-nutap|grepdhcpd
udp000.0.0.0:
670.0.0.0:
*2402/dhcpd
端口号没有改变。
现在dhcpd已经成功运行在"监牢"中。
到此为止一个这样,一个完整和安全的DHCP服务器就完成了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 配置 完整 安全 DHCP 服务器 详解