网络服务之DHCP、ftp

366 阅读10分钟

网络服务之DHCP

DHCP是什么

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),由Internet工作任务小组设计开发,专门用于为TCP/IP网络中计算机自动分配TCP/IP参数的协议。

DHCP是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。 默认情况下,DHCP作为Windows Server的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。

DHCP采用C/S架构,C-client(客户机),S-server(服务器),客户机/服务器架构

DHCP服务采用传输层UDP协议,客户机使用UDP协议的68端口,服务器使用UDP的67端口。

DHCP的租约过程

image.png

  • 当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约;
  • 客户机直接向提供租约的服务器发送DHCP Request包,要求更新现有的地址租约。
  • 当租约到期前,DHCP服务器还没有收到客户机的请求,就会释放该IP地址。

DHCP配置文件

DHCP服务的配置文件为/etc/dhcp/dhcpd.conf。

配置文件参数含义:

 # 设置全局配置参数
 option domain-name "example.org";     //指定默认域名
 option domain-name-servers 202.106.0.20202.106.148.1;      //指定DNS服务器地址
 default-lease-time 600;              //默认租约600秒(10分钟)
 max-lease-time 7200;                 //最大租约为7200秒(2小时)
 ddns-update-style none;              //禁用DNS动态更新
 ​
 ​
 # subnet网段声明(作用于整个子网段,部分配置参数优先级高于全局配置参数)
 subnet 192.168.100.0 netmask 255.255.255.0 {         //声明要分配的网段地址
 range 192.168.100.128 192.168.100.200;               //设置地址池
 option routers 192.168.100.10;                       //指定默认网关地址
 ​
 ​
 # host主机声明(给单机分配固定的IP地址)    
 host hgstname{                                //指定需要分配固定IP地址的客户机名称
 hardware ethernet 00:c0:c3:22:46:81;          //指定该主机的MAC地址
 fixed-address 192.168.4.100;                  //指定保留给该主机的IP地址

实验:设置DHCP服务器并分配地址

步骤1、Linux虚拟机关闭防火墙和selinux。

 [root@localhost ~]# systemctl stop firewalld.service 
 [root@localhost ~]# setenforce 0

步骤2、安装 dhcp 软件包,并查看配置文件。

 [root@localhost ~]# yum install dhcp -y      //安装dhcp
 [root@localhost ~]# rpm -qc dhcp
 /etc/dhcp/dhcpd.conf                      //dhcp的配置文件
 /etc/dhcp/dhcpd6.conf
 /etc/openldap/schema/dhcp.schema
 /etc/sysconfig/dhcpd
 /var/lib/dhcpd/dhcpd.leases
 /var/lib/dhcpd/dhcpd6.leases

步骤3将Linux虚拟机的网络模式改成仅主机模式

步骤4、编辑dhcp服务的配置文件/etc/dhcp/dhcpd.conf,设置网段(要和虚拟网络编辑器中的保持一致)、地址池、网关地址。之后重启dhcp服务。

 # 将模板文件复制为配置文件
 [root@localhost ~]# cd /usr/share/doc/dhcp-4.2.5/
 [root@localhost dhcp-4.2.5]# ls
 dhcpd6.conf.example  dhcpd.conf.example  ldap
 [root@localhost dhcp-4.2.5]# cp dhcpd.conf.example /etc/dhcp/dhcpd.conf
 cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes
 ​
 # 编辑dhcp配置文件
 [root@localhost ~]# vim /etc/dhcp/dhcpd.conf
  ------------------------------------
  27 subnet 192.168.137.0 netmask 255.255.255.0 {     //设置子网IP、子网掩码
  28   range 192.168.137.20  192.168.137.80;          //设置地址池
  29   option routers 192.168.137.10;                 //设置网关地址
  30 }
  
  host  test  {                                                                                     定义静态分配IP
                   hardware ethernet  00:80:23:df:23:3d;  对应的mac
                   fixed-address      192.168.71.88;    对应的ip(在动态分配地址范围外)
}

 # 重启dhcp服务
 [root@localhost ~]# systemctl restart dhcpd     //重启dhcp服务
 [root@localhost ~]# systemctl status dhcpd      //查看dhcp状态,已启动
 ● dhcpd.service - DHCPv4 Server Daemon
    Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
    Active: active (running) since 三 2022-03-16 22:17:19 CST; 5s ago
      Docs: man:dhcpd(8)
            man:dhcpd.conf(5)
  Main PID: 87982 (dhcpd)
    Status: "Dispatching packets..."
    CGroup: /system.slice/dhcpd.service
            └─87982 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group ...

步骤5、修改客户端网卡配置文件/etc/sysconfig/network-scripts/ifcfg-ens33,之后重启网络服务。

 [root@localhost ~]# vim /sysconfig/net-scripts/ifcfg-ens33    //修改网卡配置文件
 ​
 
 [root@localhost ~]# systemctl stop firewalld.service  
 [root@localhost ~]# setenforce 0
 [root@localhost ~]# systemctl restart network                 //重启网络服务
 
 [root@localhost ~]# ifconfig ens33      
 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet 192.168.137.100  netmask 255.255.255.0  broadcast 192.168.137.255
         inet6 fe80::a5da:ff58:2c32:2b5f  prefixlen 64  scopeid 0x20<link>
         ether 00:0c:29:18:b5:ff  txqueuelen 1000  (Ethernet)
         RX packets 471514  bytes 311413414 (296.9 MiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 228702  bytes 61948898 (59.0 MiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

DHCP中继原理

当企业的内部网络规模较大时,通常被划分为多个不同的子网,网络内配置了VLAN,网络内配置了VLAN,VLAN能隔离广播,而DHCP协议使用广播。

DHCP服务器在VLAN 100中,就只有VLAN 100内的客户机能从此内获得IP地址。

两种解决办法:

  • 为每个网段安装一台DHCP服务器,但这种方式存在资源上的浪费,而且不利于集中管理。

  • 在连接不同网段的设备上开启DHCP中继功能,将DHCP这种特殊的广播信息在VLAN之间转发,让其他VLAN的客户机也能从DHCP服务器获得IP地址。

网络服务之ftp

ftp的简介

FTP是FileTransferProtocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。

FTP服务器默认使用TCP协议的20、21端口与客户端进行通信 20端口用于建立数据连接,并传输文件数据 21端口用于建立控制连接,并传输FTP控制命令

ftp的数据连接模式 主动模式:服务器主动发起数据连接 被动模式:服务器被动等待数据连接

主动模式(PORT)和被动模式(PASV)。主动模式是从服务器端向客户端发起连接;被动模式是客户端向服务器端发起连接。两者的共同点是都使用21端口进行用户验证及管理,差别在于传送数据的方式不同,PORT模式的FTP服务器数据端口固定在20,而PASV模式则在1025-65535之间 随机

vsftpd的安装和配置

vsftpd安装
rpm -qc vsftpd    //检查vsftpd安装包是否存在,存在即不需要安装
yum install -y vsftpd   //yum 安装vsftpd

cd /etc/vsftpd
ls                //切换到安装好vsftpd目录下查看文件

cp vsftpd.conf vsftpd.conf.bak   //将vsftpd的配置文件进行备份

配置文件详解

anonymous_enable=YES:开启匿名用户访问。
local_enable=YES:启用本地系统用户访问。
write_enable=YES:本地系统用户写入权限。
local_umask=022:本地用户创建文件及目录默认权限掩码。
dirmessage_enable=YES:打印目录显示信息,通常用于用户第一次访问目录时,信息提示。xferlog_enable=YES:启用上传/下载日志记录。
connect_from_port_20=YES FTP:使用20端口进行数据传输。
xferlog_std_format=YES:日志文件将根据xferlog的标准格式写入。
listen=NO:Vsftpd不以独立的服务启动,通过Xinetd服务管理,建议改成YES。
listen_ipv6=YES:启用IPv6监听。
pam_service_name=vsftpd:登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证。userlist_enable=YES:vsftpd.user_list和ftpusers配置文件里用户禁止访问FTP。

Vsftpd匿名用户配置

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES            #开启匿名用户访问。默认已开启
local_enable=YES                #允许系统用户进行访问
write_enable=YES                #开放服务器的写权限(若要上传,必须开启)。默认已开启
anon_umask=022                  #设置匿名用户所上传数据的权限掩码(反掩码)。

让匿名用户拥有访问本机和各种权限 
anon_umask=022                  #设置匿名用户所上传数据的权限掩码(反掩码)。
anon_upload_enable=YES          #允许匿名用户上传文件。默认已注释,需取消注释
anon_mkdir_write_enable=YES     #允许匿名用户创建(上传)目录。默认已注释,需取消注释
anon_other_write_enable=YES    #允许删除、重命名、覆盖等操作。需添加



cd /var/ftp  这是匿名用户的默认根目录
echo 'hello world!' > test.txt
需要Vsftpd用户对/var/ftp/pub目录有写入权限,使用chown和chmod任意一种命令均可设置权限,具体设置命令如下:
chown - R ftp pub/
chmod o+ w pub/

重启vsftpd服务,关闭安全防护
[root@localhost vsftpd]#systemctl restart vsftpd
[root@localhost vsftpd]#systemctl stop firewalld
[root@localhost vsftpd]#setenforce 0

在电脑上CMD:
ftp 192.168.233.21
用户名:ftp,其他的会报错
密码直接回车
get test.txt
发送文件:
put test1.txt

存在的缺点:匿名用户权限过高,存在安全隐患

Vsftpd系统用户配置

设置本地用户验证访问ftp
设置本地用户可以访问ftp,禁止匿名用户登录
[root@localhost ftp]# useradd zhangsan
[root@localhost ftp]# echo '123' | passwd --stdin zhangsan
[root@localhost ftp]# useradd lisi
[root@localhost ftp]# echo '123' | passwd --stdin lisi

vim /etc/vsftpd/vsftpd.conf
local_enable=Yes        		 #启用本地用户
anonymous_enable=NO     		 #关闭匿名用户访问
write_enable=YES        		 #开放服务器的写权限(若要上传,必须开启)
local_umask=077          		 #可设置仅宿主用户拥有被上传的文件的权限(反掩码)

ftp 192.168.233.21
zhangsan
123
OK

对本地用户访问切换目录进行限制
添加切换目录的限制配置 :

vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES   		 #将访问禁锢在用户的宿主目录中
allow_writeable_chroot=YES		 #允许被限制的用户主目录具有写权限

systemctl restart vsftpd

C:\Users\DING>ftp 192.168.233.21
连接到 192.168.233.21。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.233.21:(none)): zhangsan
331 Please specify the password.
密码:
230 Login successful.
ftp> cd /etc
550 Failed to change directory.
ftp>
除此之外还能修改ftp服务访问时,宿主家目录,让它的家目录成为我们指定的地方

修改 vsftpd.conf (在响应的版块添加即可,保存退出重启服务)
修改匿名用户、本地用户登录的默认根目录
anon_root=/var/www/html			#anon_root 针对匿名用户
local_root=/var/www/html		#local_root 针对系统用户
黑名单和白名单的使用 
在安装vsftpd服务后,官方贴心的为我们在服务目录中提供了user_list   (其中就是为了我们更好利用黑名单和白名单的手册)。
黑名单:在黑名单上标记的用户,是我们禁止访问的对象。
白名单:在白名单上标记的用户是我们允许访问的对象,从某种意义上来讲,白名单比黑名单的制定更为严格和安全。

黑名单的使用
userlist_enable=YES			#启用user_list用户列表文件
userlist_deny=YES			#黑名单,禁止user_list名单上的用户进行访问
systemctl restart vsftpd



C:\Users\DING>ftp 192.168.233.21
连接到 192.168.233.21。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.233.21:(none)): zhangsan
530 Permission denied.
登录失败。
ftp> quit
221 Goodbye.

C:\Users\DING>ftp 192.168.233.21
连接到 192.168.233.21。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.233.21:(none)): lisi
331 Please specify the password.
密码:
230 Login successful.
ftp>
张三不能输入密码

也可以在windows输入文件同步:
ftp://lisi@192.168.233.21
lisi
123
rz 文件名 #下载指定文件到服务器
sz 文件名 #把服务器的文件下载到客户端

ftp总结

  1. 一定要关闭防火墙和selinux。

  2. 使用get从服务端下载文件时,用户ftp对该文件必须拥有r权限(即读取权限),否则无法下载。例如/etc/passswd 文件,普通用户没有读取权限,无法下载该文件。

  3. get和put 不支持对目录文件进行下载和上传,必须先使用tar命令将目录进行归档压缩,之后才能下载或上传。

  4. 用户ftp对/var/ftp目录,不能拥有w权限,否则ftp用户不能登录访问。

  5. ftp用户在/var/ftp/pub目录下上传文件时,必须对pub目录拥有wx权限(即写入和执行权限),否则上传文件会提示失败,不支持创建文件,因为没有写入权限。

  6. put 上传文件时,不支持绝对路径,想要上传的文件必须在客户端的当前目录内。 例如当前是在/root目录下使用ftp连接服务端,想要上传/tmp/file01文件,必须先将file01复制到/root目录下,之后使用“put file01”或“put ./file01”命令删上传,不支持“put /tmp/file01"这种格式 。