网络服务

网络服务:在网络服务器上持续运行的守护进程,能够为客户提供特定的资源

服务通常为 C/S 架构

网络服务就是常驻在内存中的程序,常驻在内存中的程序通常都是负责一些系统所提供的功能来提供给系统使用者,因此这些常驻程序就会被我们称之为:服务(daemon)。

记录各个服务所对应的端口号的文件/etc/services

配置服务端的准备工作:

  1. 关闭firewalld

    1
    2
    
    [root@server ~]# systemctl stop firewalld              # 立即关闭
    [root@server ~]# systemctl disable firewalld           # 开机不启动
    
  2. 关闭 selinux

    1
    2
    
    [root@server ~]# getenforce               # 查询selinux状态
    [root@server ~]# setenforce 0             # 立即关闭selinux,但重启后失效
    

    永久关闭selinux需要修改 /etc/selinux/config 文件, 设置 SELINUX=disabled

  3. 配置好 yum 源

  4. 配置好静态 ip 地址

  5. 配置好主机名

CentOS 服务管理命令

操作 命令
启动服务 systemctl start XXX
停止服务 systemctl stop XXX
重启服务 systemctl restart XXX
查看服务状态 systemctl status XXX
开机启动 systemctl enable XXX
开机不启动 systemctl disable XXX
查看开机启动状态 systemctl list-unit-files --type service

NTP:Network Time Protocol

协议端口: udp/123

客户端配置:

安装 ntpdate:

1
yum install ntpdate -y

向服务器同步时间:

1
2
3
4
ntpdate ntp1.aliyun.com

# 自己搭的服务
ntpdate  192.168.10.11

服务端配置

1
yum install chrony -y

修改配置文件:

1
2
3
vim /etc/chrony.conf
allow 192.168.10.0/24    # 允许那些客户端同步访问
local stratum 10 		 # 即使没有成功从网络同步时间也对外提供服务

重启服务:

1
2
systemctl restart chronyd          # 重启服务
systemctl enable chronyd           # 设置为开机启动

查看服务状态:

1
2
3
4
5
6
[root@server ~]# netstat -ulnp
Active Internet connections (only servers)
Proto Recv-Q      Send-Q               Local Address           Foreign Address         State       PID/Program name    
udp        0         0                 0.0.0.0:123             0.0.0.0:*                           6168/chronyd        
udp        0         0                 127.0.0.1:323           0.0.0.0:*                           6168/chronyd        
udp6       0         0                 ::1:323                 :::*                                6168/chronyd

查看网络时间服务器资源情况:

1
chronyc sources                    # 查看服务器资源状态

时区信息:

1
ll /etc/localtime

SSH

ssh: 安全shell连接

功能:实现加密方式的远程连接

默认端口及协议:tcp/22

服务端包名:openssh-server

服务名称:sshd

服务器配置文件

vim /etc/ssh/sshd_config

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[root@server ~]# vim /etc/ssh/sshd_config
...
 17 #Port 22                          # 默认端口22
 19 #ListenAddress 0.0.0.0            # 监听在所有 ipv4 地址上
 48 #LoginGraceTime 2m                # 登录宽限时间
 49 #PermitRootLogin yes              # 允许 root 登陆,禁掉可提升系统安全性
 78 #PermitEmptyPasswords no          # 密码为空不能登陆
 79 PasswordAuthentication yes        # 是否采用密码认证
127 #ClientAliveCountMax 3            # 客户端连接服务器输入密码尝试的次数
129 #UseDNS yes                       # 采用dns解析,开启可能会导致连接慢
130 #PidFile /var/run/sshd.pid        # pid文件位置

netstat: 查看网络连接状况

1
2
3
[root@server ~]# netstat -tlnp |grep sshd
tcp         0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6568/sshd
tcp6        0      0 :::22                        :::*               LISTEN      6568/sshd
1
2
3
4
5
6
7
选项
    -a    (all)打印所有状态的连接
    -t    tcp协议
    -u    udp协议
    -l    listening
    -n    以数字方式显示,不解析
    -p    进程名及PID

image-20240614194229211

vsftpd

Very Secure FTP Daemon

ftp:文件传输协议

服务端软件:vsftpd

客户端软件:lftp、浏览器、FileZilla 等

默认端口及协议

传输层协议:tcp /21

应用层协议:FTP(File Transfer Protocol),中文名称:文件传输协议

端口:

  • 管理端口:21
  • 数据端口:
    • 主动模式:20
    • 被动模式:随机(1025-65535)

工作模式

主动模式

  1. 客户端与服务器的 21 端口建立连接,发送 PORT 命令(告诉服务器自己接收到数据的套接字)。
  2. 服务器用 20 号端口与客户端连接,将数据发送给客户端

图示如下:

1
2
C -------管理连接----->> S (21)
C <<-----数据连接------- S (20)

被动模式(默认模式)

  1. 客户端与服务器的 21 端口建立连接,发送 PASV 命令,服务器随即开启一个随机数据端口并告知客户端。
  2. 客户端与服务器开启的数据端口建立数据连接,获取数据。

图示如下:

1
2
C -------管理连接----->> S (21)
C -------数据连接----->> S (随机端口)

数据的连接方向决定是主动连接还是被动连接

FTP 三类用户

  • 本地用户:服务器上存在的用户
  • 匿名用户:不用输入用户名密码即可上传下载,匿名用户上传文件将映射为 ftp 用户
  • 虚拟用户

vsftpd 实验

实验环境

server:10.10.10.10

client:10.20.20.22

服务端操作

  1. 安装软件

    1
    
    yum install -y vsftpd
    

    服务端的几个重要文件

    • /etc/vsftpd/vsftpd.conf 主配置文件
    • /var/ftp 匿名用户的家目录
  2. 启动服务

    1
    
    systemctl enable --now vsftpd  # 启动服务并设置为开机自启动
    
  3. 查看服务状态

    1
    2
    3
    4
    
    [root@server ~]# netstat -tlnp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp6       0      0 :::21                   :::*                    LISTEN      2419/vsftpd
    
  4. 准备给客户端下载的文件

    1
    2
    3
    4
    5
    6
    
    # 使用 dd 命令创建一个 800M 的大文件到 /var/ftp/test 文件中
    [root@server ~]# dd if=/dev/zero of=/var/ftp/test bs=10M count=80
    [root@server ~]# ll -h /var/ftp/
    总用量 800M
    drwxr-xr-x. 2 root root    6 6月  10 2021 pub
    -rw-r--r--. 1 root root 800M 6月  15 10:12 test
    
  5. 监控网络连接情况

    1
    
    [root@server ~]# watch -n1 'netstat -tanp'
    

    开启后进行观察,主要观察 Local Address

客户端验证

  1. 安装客户端软件

    1
    2
    
    [root@client ~]# yum install -y lftp
    lftp 10.10.10.10 # 被动连接
    
  2. 使用被动模式下载

    下载:

    1
    2
    3
    4
    
    # 下载文件
    $ get 文件 -o 下载到指定的地方
    # 下载文件夹
    $ mirror 文件夹
    

    image-20240615102227862

    image-20240615102200883

  3. 使用主动模式下载

    image-20240615102630037

    image-20240615102557350

配置文件

关于下载文件的配置

匿名用户下载文件,需要其他人对文件有读权限

关于上传文件的配置

匿名用户登录到FTP服务器,是以FTP用户的身份进行写操作的

  1. 打开vsftpd配置文件中的上传开关
  2. 在服务器上使得ftp用户对上传目录有写权限

在 FTP 中,匿名用户的写权限分为三种:

  • upload:普通文件的上传 anon_upload_enable
  • mkdir:目录的上传 anon_mkdir_write_enable
  • other:删除文件 anon_other_write_enable

主配置项

主配置文件:/etc/vsftpd/vsftpd.conf

匿名用户:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
anonymous_enable=YES             允许匿名用户访问ftp
anon_upload_enable=YES           匿名用户上传文件开关
anon_mkdir_write_enable=YES    匿名用户创建目录开关
anon_other_write_enable=YES     匿名用户删除文件开关

## 改变匿名用户上传文件的所有者   ##
chown_uploads=YES
chown_username=用户名

anon_umask=077                          匿名用户上传文件的umask

本地用户:

1
2
3
4
5
6
7
local_enable=YES             允许本地用户访问ftp
write_enable=YES            允许本地用户上传文件
local_umask=022            本地用户上传文件的umask

## 禁锢本地用户,开启后,所有本地用户将被禁锢在家目录中 ##
chroot_local_user=YES
allow_writeable_chroot=YES

访问限制

1
2
3
4
anon_max_rate=0        匿名用户最大传输速率,单位是b字节,0为不限制   
local_max_rate=0         本地用户最大传输速率
max_clients=2000        限制并发客户端连接数    
max_per_ip=50             限制同一个ip地址的并发连接数

其他配置

1
2
pasv_min_port=8001                    被动模式数据最小端口
pasv_max_port=8010                   被动模式数据最大端口

访问控制

根据访问者 ip 进行控制

使用以下两个文件进行控制,方法同 sshd 的访问控制

  • /etc/hosts.allow
  • /etc/hosts.deny

根据访问者用户名进行控制(只对有用户名的用户有效)

  1. 黑名单文件:

    /etc/vsftpd/ftpusers 此文件中的记录的用户不能访问

  2. 黑白名单:

    /etc/vsftpd/user_list 此文件可能是白名单,也可能是黑名单,具体看配置

    • 白名单:配置方法

      1
      2
      
      userlist_enable=YES
      userlist_deny=NO 
      
    • 黑名单:配置方法(默认)

      1
      2
      
      userlist_enable=YES
      userlist_deny=YES
      

客户端的使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
help [<cmd>]                # 帮助信息
!<shell-command>       # 执行本地命令(相当于在shell命令行中执行)
-o      下载到指定地方  
  
ls [<args>]       
cd <rdir>             
mkdir [-p] <dirs>            # 在远程服务器上创建目录
get  <rfile> [-o <lfile>]   #下载单个文件
put  <lfile> [-o <rfile>]   #上传
mirror  [remote [local]]  #上传下载目录, 默认为下载目录,使用 -R 选项表示上传目录
exit [<code>|bg]  

本地用户操作

  1. 在服务器上创建用户,并配置密码

  2. 修改配置文件

    1
    
    user_config_dir=/etc/vsftpd/user_conf     # 设置用户个性化设置目录
    

    修改完后重启服务,使其生效,并创建出相应目录

    1
    2
    
    $ systemctl restart vsftpd
    $ mkdir  /etc/vsftpd/user_conf
    
  3. 对指定用户进行配置

配置方法:在个性化设置目录内创建与用户同名的文件,并将配置写入该文件中

例:配置 tom 用户限速为512K

1
$ echo 'local_max_rate=524288' >> /etc/vsftpd/user_conf/tom

配置完成后重启服务使其生效

  1. 用户登录测试

    1
    2
    
    $lftp -u tom 192.168.10.11
    lftp [email protected]:~> get test              # 观察下载速度
    

扩展:关于本地用户禁锢黑白名单的配置

黑名单 所有在列表文件内的用户不能切换

1
2
3
4
chroot_local_user=NO    
chroot_list_enable=YES    启用禁锢列表
chroot_list_file=/etc/vsftpd/chroot_list  列表文件 在此文件中的用户禁锢
allow_writeable_chroot=YES

白名单 只有在列表文件内的用户可以切换

1
2
3
4
chroot_local_user=YES   
chroot_list_enable=YES  
chroot_list_file=/etc/vsftpd/chroot_list  列表文件 在文件中的用户可以目录
allow_writeable_chroot=YES

httpd