我的第200篇博客:Linux下手把手搭建DHCP、DNS、HTTP、FTP服务器及遇到问题的解决过程
这是我的第200篇博客,所以我打算写一个质量还算高的文章。
今天耗时11个小时,在CentOS 上搭建一个功能相对完整的服务器,用来检验我这几天的学习成果。(不一定非要CentOS,Ubuntu也很香)
搭好一个服务一定要记得保存快照!
建议学习者手动搭建一个服务器,不建议一开始就使用PHPstudy等集成环境。
在搭建服务器之前,要有基本的Linux操作知识,基本计算机网络知识,还有,英语知识~
好了,下面开始记录我的搭建过程
安装Linux虚拟机
- 使用VMware 安装centos虚拟机(Ubuntu也可,Redhat也可……甚至kali也可),建议使用阿里云镜像,比清华的要快很多
- https://developer.aliyun.com/mirror/
- 下载好后一步到位操作,这里要注意网卡的选择,由于我们是在内网搭建的,所以我们要新建一个内网的网卡,并取消DHCP服务(因为Linux待会要作为DHCP服务器出现)。打开编辑——虚拟网络编辑器
- 打开CentOS,不用手动规划盘符,除非你的目的是运维要练习盘符划分,而我的目的是为了搭建一个渗透测试环境。图我就不截了,相信自己,就一直下一步即可。
- 接下来就是静静等待安装完成。
- 如果你安装了PHPstudy或者其他集成环境,建议还是重新装一个虚拟机吧,端口号的冲突是比较麻烦的事情,我不是做运维的,所以搭建服务器我是用的是最简单的方式——从0开始
- VMwareTools建议安装上(可以自动安装,安装不了就插入VMware目录下一个Linux.iso的光盘进行安装,还不成功就是镜像没有下载正确,不兼容),这个工具非常方便,可以拖拽物理机文件或者剪贴板到虚拟机。
安装阿里云镜像源
备份镜像源文件 /etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
如果出现找不到文件的错误,我们到目录下查看一下:
噢,原来名字不一样,改一下名字就可以了
mv /etc/yum.repos.d/CentOS-Linux-BaseOS.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget抓取内容并写入镜像源
wget -O /etc/yum.repos.d/CentOS-Linux-BaseOS.repo https://mirrors.aliyun.com/repo/Centos-8.repo
打开看一下CentOS-Linux-BaseOS.repo 的内容,发现它的前身就是CentOS-Base.repo
检验一下谁否真的有用,更新一下缓存
yum makecache
success!
搭建DHCP服务器
配置静态IP地址
DHCP服务器是用来分配IP地址的,但是呢我们目前还没有IP地址,所以要手动配置。
这里有图形界面,所以不建议使用命令行(容易打错字),待会回到配置文件中检验,这里我使用了两块网卡,因为要从互联网安装各种服务插件呀,一个对内,一个对外
由于待会我们也要做DNS服务器,所以这个DNS服务器就是自己,也一并设置了吧
检验一下:ifconfig
或者去文件里检验一下,
vim /etc/sysconfig/network-scripts/ifcfg-设置的网络名称
下载DHCP服务插件
yum install dhcp* -y
# -y 的意思是会自动选择yes
会下载两个软件:
打开 dhcp配置文件
vim /etc/dhcp/dhcpd.conf
空空如也?,他要我们打开一个文件,看起来像个范例,走起
看到了一个样例,英文我就不解读了,说的很详细。
我们把这个文件复制过去,直接改这个样例文件即可。
cp -r /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/
修改内容
打开样例文件修改
- 修改域名: 改为自己的域名
- 修改域名服务,即dns服务器,因为待会自己要作为dns服务器,写自己的就行。
将DHCP地址配置这块如图修改,当然你也可以选择其他的example。
其他的example就要注释掉了。
暂时不适用IP地址绑定吧,依据喜好,各种解释如下图
option domain-name #域名搜索列表,类似于/etc/resolv.conf中的search
option domain-name-servers #域名服务器地址,多个的话用逗号隔开
option routers #网关
option broadcasst-address #广播地址
option subnet-mask #子网掩码
default-lease-time #默认租约期限,一般这项生效(以秒为单位)
max-lease-time #最大租约期限(以秒为单位)
log-facility #日志存储文件
subnet NETWORK netmask MASK {…} #局部配置,为指定的网段提供服务host hostname {…} #为指定客户机绑定IP地址(这项通常写在subnet 中) host 中的参数:
hardware ethernet #mac地址 fixed-address #为其绑定的ip地址
检查一遍没有错误就退出来吧。
把原来的文件删除,把这个样例文件重命名。
测试DHCP服务。
使用命令:
/bin/systemctl start dhcpd
启动DHCP服务。
转到我们同样连接了虚拟网卡的物理机上:
ipconfig/all
和我们设置的一样,完美!!
遇到的问题
- service dhcpd……的方法出错了很多次,建议使用systemctl的方法启动。
- 配置DHCP服务的时候一定要注意IP地址的正确性
- 多百度。
- 租约不要过长也不要过短
搭建DNS服务器
安装DNS服务器插件
- bind:DNS服务的主程序
- bind-utils :工具,包含dig,nslookup等网络诊断工具。
- bind-chroot :为BIND 服务提供一个伪装的根目录(将/var/named/chroot/文件夹作力的根目录),以提高安全性。
- bind-libs: 提供了bind.bind-utils 需要使用的库函数。
我打算快速搭建,所以后面两个程序我并没有安装(安装了也没用,因为本文不讲攻击)
yum install bind -y
yum install bind-utils -y
配置DNS服务文件知识
查看bind 、bind-utils生成哪些文件(仅列出部分文件)
rpm -ql bind
/etc/named.conf #主配置文件
/etc/named.rfc1912.zones #事先定义好的区域文件
/etc/named.root.key# 实现事物签名的秘钥文件
/var/named # 默认DNS解析记录的数据文件
/var/named/slaves #从DNS的配置文件目录
rpm -ql bind-utils
/usr/bin/dig # 域信息搜索器
/usr/bin/host #host文件
/usr/bin/nslookup
说明:dig(DNS lookup utility)域信息搜索器命令。
dig的常用命令格式:
dig –t 资源记录类型名称@server-ip
dig –x IP @DNS_IP 反向解析
dig –t axfr zone 验证完全区域传送
dig –t ixfr zone 验证增量区域传输(通常需要指定序列号)
named-checkconf工具
格式:named-checkconf [主配置文件]
例如:named-checkconf /var/named/named.conf
named-checkzone工具
格式:named-checkzone <域名> <区域数据文件>
例如:named-checkzone /var/named/stude
摘自:https://cloud.tencent.com/developer/article/1508115
配置文件
打开主配置文件,看英文
vim /etc/name.conf
打开文件后,把静态配置注释掉
修改自己的IP地址,以及适用的网络地址:
在根的下面设置正向查询,反向查询(这个一定要懂)
新建配置的文件,改变文件所属和权限为644
我们在zeker62.com这个区域里面添加一些可以解析的域名
$TTL 1D ;定义TTL为1天
; 必须首先定义一个SOA记录,@代表相应的区域,每个区域数据文件只能有一个SOA。SOA后面跟的是这个区域的授权主机名称,和管理者的邮箱。
@ IN SOA demo.com. Admin.demo.com. ( # 注意区域地址、管理员邮箱地址 的 点号不能忘掉
20150914027 ; 序列号,该序号不更新的话,任何所做的更改都不会同步到其他DNS服务器上【不超过10位】 1M ; 定义辅助DNS每隔多久检查一次主DNS服务器的版本号 5M ; 同步失败后,再次重试需要的间隔时间 1H ; 过期时间(超过该时间主DNS还没有响应,辅助DNS也停止工作) 1D) ; 否定答案的缓存时长
说明: M分钟、H小时、D天、W周。默认是秒
配置反向查询
反向区域文件基本结构和正向区域数据文件基本完全相同,只不过这里多出了一个PTR选项。
PTR用来定义一个反向记录,也就是通过IP可以查到对应的域名信息。最后几行的第一列表示是主机的IP地址,只不过省略了网络地址部分,系统会自动补全,如100对应的是192.168.1.100
检查
启动服务
systemctl start named
正向解析:
反向解析:
物理机测试:
遇到问题
这次是遇到一个大问题了,导致我重装了虚拟机
- 不要使用 yum -y remove bind* 否则前功尽弃,包括DHCP服务
- 如果物理机不通,试试 systemctl stop firewalld 关闭防火墙
- 尽量在DHCP的时候不要设置域名
- 最好设置成大家都能解析的dns服务器
- 如果出现非权威应答,那必然是另一个网卡进行了dns转发
搭建HTTP服务器
安装Apache服务:httpd
yum install -y httpd
开启服务
systemctl start httpd
把http服务加入到开机启动项
systemctl enable httpd
开启火狐浏览器:输入127.0.0.1看是否有界面
部署静态网站
echo "Welcome To my Web page" > /var/www/html/index.html
写一段话到这个初始页面里面去
个人用户主页功能
开通个人主页功能
vim /etc/httpd/conf.d/userdir.conf
把disable注释掉
把userdir解除注释
登录个人账户、写入网站、更改用户访问权限,重启服务
su zeker62
echo "this is zeker's website " >public_html/index.html
chmod -Rf 755 /home/zeker62
systemctl restart httpd
这种情况说明selinux在防护
使用此命令关闭限制
setsebool -P httpd_enable_homedirs=on
成功
给网站访问加入密码
设置密码
htpasswd -c /etc/httpd/passwd zeker62
New password: ***
Re-type new password: ***
Adding password for user zeker62
配置个人文件
vim /etc/httpd/conf.d/userdir.conf
转到第32行
重启服务
systemctl restart httpd
搭建FTP服务
这个非常简单,我们就快速一点(困了),关掉防火墙
yum install vsftpd
systemctl stop firewalld
vsftpd 服务程序的主配置文件(/etc/vsftpd/vsftpd.conf)内容总长度达到 123 行,但其中大多数参数在开头都添加了井号(#),从而成为注释信息,大家没有必要在注释信息上花费太多的时间。我们可以在 grep 命令后面添加-v 参数,过滤并反选出没有包含井号(#)的参数行(即过滤掉所有的注释信息),然后将过滤后的参数行通过输出重定向符写回原始的主配置文件中:
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
cat /etc/vsftpd/vsftpd.conf
安装\配置ftp客户端
yum install ftp
我们使用匿名开放模式,还有其他模式是企业级要求,暂不讨论:配置如下
vim /etc/vsftpd/vsftpd.conf
测试连接
开启,并设置成开机启动
密码随便输,连接成功,但是不允许访问和创建目录,还有重定位
发现pub文件夹是管理员才能访问的
改权限
chown -Rf ftp /var/ftp/pub
继续连接
还是不行,那就是SElinux搞鬼
setsebool -P ftpd_full_access=on
再来
成功
测试
连接成功
传输文件
成功!
从早上八点半到晚上八点,终于把这个文章写完了。中间遇到了很多问题,一言难尽,难以表述,好事多磨。
路漫漫其修远兮,祝愿各位学业有成!
感谢:
https://cloud.tencent.com/developer/article/1508115
https://www.huaweicloud.com/articles/9252dd8a564679c9b209244d5c169d2a.html
https://blog.51cto.com/u_15015155/2555883
https://www.cnblogs.com/lhdz_bj/p/9936379.html
https://blog.csdn.net/weixin_34291004/article/details/91738532
https://blog.csdn.net/weixin_35720393/article/details/116744495
https://www.cnblogs.com/gered/p/11118834.html
《鸟哥的Linux私房菜,伺服器篇》
《Linux就该这么学,刘遄》
https://developer.aliyun.com/mirror/
有些忘记记录了
本文来自博客园,作者:{Zeker62},转载请注明原文链接:https://www.cnblogs.com/Zeker62/p/15167804.html