linux基础服务

Linux基础网络服务

什么是网络服务

​ “网络服务” 是指通过计算机网络(如局域网、互联网)为用户、设备或其他程序提供特定功能、资源或数据交互的服务形式。简单来说,它是网络中 “提供功能的一方”,通过约定的规则(协议)与 “使用功能的一方”(客户端)进行通信,实现资源共享、信息传递或协同工作。

  • 是什么?
  • 有什么功能?
  • 怎么搭建?
    • 安装yum/apt/源码/二进制/容器化部署
    • 配置:多查文档,多试
    • 重启:成功
      • 失败 -> 排错 -> 查日志 -> 改配置文件
  • 如何使用?

Linux软件安装

  • yum :管理rpm包一键安装工具;自动下载安装 rpm 以及相关的依赖环境。需要配置yum源(rpm包的下载路径);
  • rpm :红帽软件包管理工具;rpm 需要依赖环境;
  • 源码包安装 :下载软件的源代码(C/C++/go/Java),编译生成二进制程序,将程序复制到 /usr/bin 或 /usr/local/bin ,将依赖复制到 /lib 或 /lib64 ,将配置文件复制到 /etc/ 中。
  • 二进制包 :已编译好的程序;只需要将其复制到系统目录中,配置环境变量。
  • 容器化技术 :将软件和各种依赖环境、运行环境进行打包,原理类似于一个”微型的虚拟机“。

rpm:安装卸载rpm包

  • 下载:软件官网、开源镜像站、系统安装光盘【在Packages目录里找】;
  • 安装:rpm -ivh 软件包名称
# 先进入光盘的软件包目录
cd /hehe/Packages
#执行安装
rpm -ivh tree-1.6..0-10.e17.x86_64.rpm
  • 卸载:rpm -evh 软件名
#卸载
rpm -evh tree
  • 查找:rpm -qa 查找所有以安装的软件
    • -qi 查看软件包的详细信息
    • -ql 查看软件包的安装目录
rpm -qa | grep fish #定向查找

yum:一键管理rpm依赖关系

  • 安装: yum install -y 软件名
  • 卸载:yum remove -y 软件名
  • 重新加载源:yum makecache
  • 更新系统:yum update
  • 清理依赖:yum autoremove
  • 清理缓存:yum clean all
在网络服务的三种用户
  • 虚拟用户

    • 仅存在于特定网络服务中的用户
    • vsftpd 配置虚拟用户:通过 pam_userdb 模块读取 /etc/vsftpd/virtual_users.db 中的账号密码,系统中无对应的用户,但可登录 FTP 并访问指定目录。
  • 匿名用户

    • 无需提供真实账号密码即可访问服务的用户
    • FTP 服务中,用户输入用户名 anonymous,密码留空或填 user@example.com 即可登录,只能下载 /var/ftp 下的公开文件。
  • 本地用户

    • 操作系统本身创建的用户
    • 通过 useradd test 创建的用户 test

FTP/SFTP:文件传输服务

FTP( File Transfer Protocol,文件传输服务 )

基于 C/S 模式,默认服务端口号是 20、21

20 端口 用于数据传输

21 端口 用于接收客户端的 FTP 命令与参数。

SFTP (安全的FTP服务)

使用 22 端口 依赖SSH服务;

作用:实现文件的上传和下载

  • 客户端:ftp/Xftp/WinSCP/FileZilla 【Cline】
  • 服务端: vsftp/openssh-server(sftp) 【Server】
#服务端

#准备工作
#1.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#2.关SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
重启系统生效
#3.配置yum源(跳过)
#4.安装vsftpd(服务端安装)
yum -y install vsftpd
#5.配置vsftpd
cat /etc/vsftpd/vsftpd.conf

cd /etc/vcsftpd/
#备份一份
cp vsftpd.conf vsftpd.conf.bak
#删除注释和空白行
grep -Ev "^$|^#" vsftpd.conf.bak > vsftpd.conf
#进行内容编辑
vim /etc/vsftpd/vsftpd.conf
---------------------------------
anonymous_enable=YES #允许匿名用户登录
local_enable=YES #允许本地系统用户登录
guest_enable=YES  # 启用虚拟用户(核心开关)
guest_username=ftp  # 指定虚拟用户映射的系统用户(通常用低权限用户,如默认的 ftp 用户)
user_config_dir=/etc/vsftpd/vconf  # 指定虚拟用户的独立配置文件目录
write_enable=YES #允许 “写操作”
local_umask=022 #本地用户创建文件 / 目录时的 权限掩码
dirmessage_enable=YES #当用户进入某目录时,若目录下有 .message 文件,会显示该文件内容(通常用于目录说明)。
xferlog_enable=YES #启用文件传输日志
connect_from_port_20=YES #数据传输时使用 20 端口 发起连接
xferlog_std_format=YES #日志使用 标准格式
listen=YES #独立进程模式运行(直接监听 21 端口)
#listen_ipv6=YES # IPv6 端口(仅监听 IPv4),若需支持 IPv6,取消注释即可。
pam_service_name=vsftpd #指定 PAM 认证模块(对应 /etc/pam.d/vsftpd 配置文件),控制用户登录验证规则。
userlist_enable=YES #启用 用户列表控制(默认列表文件为 /etc/vsftpd/user_list):
默认规则:列表中的用户 禁止登录(需配合 userlist_deny=YES,默认开启)。
tcp_wrappers=YES #启用 TCP 包装器(通过 /etc/hosts.allow 和 /etc/hosts.deny 限制 IP 访问),增强安全性。
-----------------------------------
#6.重启服务,检测服务状态
systemctl restart vsftpd #重启服务
systemctl status vsftpd #检查状态
systemctl enable vsftpd #开机自启
---------------------------------------------------------
#客户端
#1.安装ftp
yum install ftp -y
#2.直接ftp IP地址
ftp 192.168.25.21(服务端ip)
#Name (192.168.25.21:root): root(选择一个服务端存在的用户)
#530 Permission denied.
#Login failed.(禁止root登录,换一个用户)exit退出
------------------------------------
#成功登录
root@cline20 ~# ftp 192.168.25.21
Connected to 192.168.25.21 (192.168.25.21).
220 (vsFTPd 3.0.2)
Name (192.168.25.21:root): lwy
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
---------------------------------------
ls 查看状态
pwd 当前路径

#上传 【客户端的当前目录下的文件上传给服务端】
put ./1.txt

#下载  【将服务端的文件下在到客户端的当前目录】
get 1.txt 

Crontab:计划任务

Crontab(定时任务)命令

用于设置周期性被执行的指令。

  • 设置周期时间,到达时间执行命令或脚本
  • 格式: 分 时 日 月 周 命令或脚本
  • *是通配符,代表所有
crentb -e
#-e 编辑,调用vim编辑
#-l 查看
#-u 指定用户
#-r 删除所有计划任务
分 时 日 月 周
* * * * *     命令或脚本
时间字段含义(从左到右):
第 1 位:分钟(0-59) 
第 2 位:小时(0-23)
第 3 位:日期(1-31)
第 4 位:月份(1-12)
第 5 位:星期(0-7,0 和 7 都代表周日)
特殊符号:
*:任意值(如 * * * * * 表示每分钟)。
,:多个值(如 1,3,5 * * * * 表示第 1、3、5 分钟)。
-:范围(如 1-5 * * * * 表示第 1 到 5 分钟)。
/:间隔(如 */10 * * * * 表示每 10 分钟)。
-------------------------
#每天0点0分执行
0 0 * * * systemctl restart network 
#每月1号0点0分执行
0 0 1 * *  xxxx                    
#每月1号10号20号执行
0 0 1,10,20 XXXX                   
#每个月每周日4点0分执行
0 4 * * 0 xxxx                      
#每隔5分钟执行一次
*/5 * * * * xxxx
------------------------

NFS/SMB:网络文件系统,共享目录

NFS(Network File System)和 SMB(Server Message Block)是两种主流的网络文件共享协议

  • NFS:(Network File System)网络文件系统。可以像挂载本地磁盘一样挂载网络文件目录。

格式:

<共享目录> <客户端地址>(选项1,选项2,...)

常用选项说明

选项 描述
rw 允许客户端读写(默认ro只读)。
ro 只读权限。
sync 数据同步写入磁盘(默认,安全但性能稍低)。
async 数据先缓存到内存,再写入磁盘(性能高,但可能丢失数据)。
no_root_squash 客户端以 root 身份访问时,映射为服务端的 root 用户(危险,慎用)。
root_squash 客户端 root 用户映射为服务端的 nfsnobody 用户(默认,安全)。
all_squash 所有客户端用户映射为服务端的 nfsnobody 用户(适合公共共享)。
anonuid=UID 将客户端用户映射为服务端指定 UID 的用户(需配合 all_squash)。
anongid=GID 将客户端用户映射为服务端指定 GID 的用户组(需配合 all_squash)。
subtree_check 检查共享目录的子目录权限(默认开启,可关闭用 no_subtree_check)。
insecure 允许客户端通过非安全端口(大于 1024)连接(部分旧客户端需此选项)。
#NFS服务
#服务端

#1.关闭防火墙,关闭SELinux

#2.安装
yum install -y nfs-utils rpcbind

#3.创建共享目录
mkdir /data/gongxian

#4.改配置文件
vim /etc/exports
#将目录共享给192.168.25.21主机
/data/gongxian 192.168.25.21 (rw,sync,no_root_squash)
#将目录共享给所有主机
/opt *(rw,sync,no_root_squash)
#将目录共享给192.168.25.0网段的主机
/opt 192.168.25.0/24(rw,sync,no_root_squash)

#5.重启配置文件
systemctl start rpcbind nfs-server   #重启服务
systemctl enable rpcbind nfs-server  # 开机自启

#6.检测导出共享目录
exportfs -avr
--------------------------------------------------------
#客户端
#1.关闭防火墙,关闭SELinux

#2.安装nfs客户端
yum install nfs-utils

#3.挂载本地目录上
mount -t nfs <服务端IP>:/共享目录 /本地挂载点 [选项]
mount -t nfs 192.168.25.21:/data /hehe

#4.检查挂载情况
df -h

#5.永久挂载(写入 /etc/fstab)
<服务端IP>:/共享目录 /本地挂载点 nfs defaults,_netdev 0 0

#NFS服务
#服务端

#1.关闭防火墙,关闭SELinux

#2.安装
yum install -y nfs-utils rpcbind

#3.创建共享目录
mkdir /data/gongxian

#4.改配置文件
vim /etc/exports
#将目录共享给192.168.25.21主机
/data/gongxian 192.168.25.21(rw,sync,no_root_squash)
#将目录共享给所有主机
/opt *(rw,sync,no_root_squash)
#将目录共享给192.168.25.0网段的主机
/opt 192.168.25.0/24(rw,sync,no_root_squash)

#5.重启配置文件
systemctl restart rpcbind nfs-server   #重启服务
systemctl enable rpcbind nfs-server  # 开机自启

#6.检测导出共享目录
exportfs -avr
--------------------------------------------------------
#客户端
#1.关闭防火墙,关闭SELinux

#2.安装nfs客户端
yum install nfs-utils

#3.挂载本地目录上
mount -t nfs <服务端IP>:/共享目录 /本地挂载点 [选项]
mount -t nfs 192.168.25.21:/data /hehe

#4.检查挂载情况
df -h

#5.永久挂载(写入 /etc/fstab)
<服务端IP>:/共享目录 /本地挂载点 nfs defaults,_netdev 0 0

# autofs 按需自动挂载与卸载磁盘、nfs、光盘。
#在客户端安装autofs工具

#1.客户端安装
yum install autofs -y

#2.创建本地挂载点
mkdir /mnt/nfs

#3.修改autofs主配置文件
vim /etc/auto.master

#将所有的nfs目录都挂载到/mnt子目录中,详细设置在/etc/auto.nfs 超过60秒没有访问该目录,就自动卸载了
#挂载点的主目录  子配置文件    超时时间自动卸载60秒
/mnt /etc/auto.nfs --timeout=60

#4.创建auto.nfs子配置文件,专门管理所有nfs的挂载情况
cd /mnt
mkdir nfs
vim /etc/auto.nfs
#挂载点名称 挂载类型 服务端ip:共享目录
nfs -fstype=nfs 192.168.25.21:/data

#5.重启autofs服务
systemctl restart autofs

#默认没有挂载共享目录,需要进入挂载点或编辑共享目录内的文件后,才会自动挂载
cd /mnt/nfs

#当超过超时时间未使用时,则会自动卸载。
  • Samba:实现了SMB协议的开源软件;
  • SMB(Server Messages Block,信息服务块):Windows上的共享目录与共享打印机的一种协议;

#SMB 服务

#服务端操作

#1.关闭防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld

#2.关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#3.安装samba
yum install -y samba samba-client

#4.添加Samba用户
useradd -s /sbin/nologin test

#5.创建smb共享密码
smbpasswd -a  test

#6设置访问权限
chmod -R 755 /home/test/

#7.修改配置文件,设置共享目录的路径与权限
vim /etc/samba/smb.conf

#添加
[test]  # 共享名
comment = "samba test"   # 描述信息
path = /home/test     # 共享目录
browseable = yes      # 所有人可见
public = yes          # 是否公开
writable = yes        # 是否允许修改

#8.重启服务
systemctl restart smb nmb

---------------------------------------------------------

#客户端操作
#在windows上运行

windows: 运行【win+R】 -> \\192.168.25.21\test 用户名:test 密码:**** 登陆使用

NTP/Chrony:时间同步服务

NTP(Network Time Protocol,网络时间协议):实现时间同步,让设备时间与国际标准时间保持一致。

  • 设备日志,服务日志需要记录时间;
  • 分布式系统(分布式数据库、分布式缓存、分布式存储、消息对列)时间戳;
  • 金融系统、订单系统、地图导航等服务都需要高精度的时间。
补充命令-date:显示或修改系统时间
#显示时间
date

date+“时间格式”
%Y  年 例如:2025
&m  月 例如:7
%d  天 例如:24
%H  24小时制的小时 例如:14
%M  分钟 例如:35
%S  秒 例如:10 
%F  年-月-日
%T  时:分:秒

#在复制文件的后缀加上备份时间
cp 1.txt 1.txt$(date+"%F%T")

#修改系统时间
date -s "2021-2-2 0:0:0"

#同步时间
#客户端操作
#先安装ntpdate的客户端
yum install ntpdate

#通过公网的ntp服务进行时间同步
ntpdate ntp.aliyun.com


NTP服务

#服务端操作
#在局域网中搭建ntp服务

#1.关闭防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld

#2.关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#3.安装
yum install ntp ntpdate -y

#4.修改配置文件
vim /etc/ntp.conf

# 允许本地网络的机器同步,但禁止修改、查询等操作
restrict 192.168.25.20 mask 255.255.255.0 nomodify notrap
# 使用 ntp.aliyun.com 作为 服务端 NTP 服务器 ,把默认的注释掉
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server ntp.aliyun.com

#5.重启服务
systemctl start ntpd
systemctl enable ntpd

#6.检测NTP服务器是否正常工作
ntpq -p

#客户端操作
#1.关闭防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld

#2.关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#3.安装
yum install ntpdate -y

#4.同步服务端时间
ntpdate 192.168.25.21

#定时时间同步
#每30分钟自动同步一次系统时间
*/30 * * * * /usr/sbin/ntpdate ntp.aliyun.com &>/dev/null
 
# &>/dev/null 是一个输入输出重定向操作,作用是将命令的所有输出(包括正常输出和错误输出)全部丢弃,不产生任何日志或显示。



Chrony 服务
#服务端操作
#在局域网中搭建ntp服务

#1.关闭防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld

#2.关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#3.安装
yum install chrony ntpdate -y

#4.修改配置文件
vim /etc/chrony.conf

# 允许特定网段的客户端同步
allow 192.168.8.0/24
# 使用 ntp.aliyun.com 作为 服务端 NTP 服务器 ,把默认的注释掉
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server ntp.aliyun.com
#其他配置参数
makestep 1.0 3

#5.重启服务
#重启服务
systemctl start chronyd
#设置为开机自启
systemctl enable chronyd
#检查服务状态,若服务正常运行,输出中会显示active (running)。
systemctl status chronyd

#6.验证时间同步
chronyc sources -v

#客户端操作

#1.关闭防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld

#2.关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#3.安装
yum install ntpdate chrony -y

#4.修改配置文件
vim /etc/chrony.conf

server 192.168.8.100 iburst

#5.启动并设置 Chrony 服务
systemctl start chronyd
systemctl enable chronyd

#6.验证时间同步
chronyc sources -v

#7.同步服务端时间
ntpdate 192.168.25.21






DNS:域名解析服务

  • 从打开浏览器 -> URL(网址)-> 返回页面,整个流程。
  • DNS的记录类型有哪些?
  • DNS配置流程?

DNS(Domain Name System域名解析服务):是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

DNS协议运行在UDP协议之上,使用端口号53

域名: 域名是一个网站的逻辑地址,比如www.zuolaoshi.cn,相比IP地址更加方便人类记忆,所以被广泛使用。

  • 流程步骤

    • 第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
    • 第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果(域名对应的IP地址)返回。
    • 第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域) 的主域名服务器的地址。
    • 第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
    • 第五步:重复第四步,直到找到正确的纪录。
    • 第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
  • DNS的记录类型

    • A 地址记录(Address),返回域名指向的IP地址。
    • NS 域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。
    • MX 邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。
    • CNAME 规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转。
    • PTR 逆向查询记录(Pointer Record),只用于从IP地址查询域名。
    • CAA CAA(Certification Authority Authorization,证书颁发机构授权)是一项防止HTTPS证书错误颁发的安全措施,遵从IETF RFC6844。从2017年9月8日起,要求CA(Certification Authority,证书颁发)机构执行CAA强制性检查。


DNS服务

#服务端操作

#1.关闭防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld

#2.关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#3.下载安装
yum -y install bind bind-utils

#4.修改主配置文件
vim /etc/named.conf

 # 绑定的地址需要修改
listen-on port 53 { any; }; 
 # 允许查询的服务地址
allow-query     { any; }; 
#定义正向解析域
zone "example.com" IN {
        type master;
        file "/var/named/example.com.zone" ;# 正向解析是设定好域名,通过域名从正向解析文件中找响应的IP地址。
        allow-update { none; };  # 默认不允许slave从服务器同步
};
#定义反向解析域
zone "25.168.192.in-addr.arpa" IN {
        type master;
        file "/var/named/192.168.25.rev"; #设定好ip的网络段,通过ip找域名
        allow-update { none; };  # 默认不允许slave从服务器同步
};

#5.在/var/named/创建正向解析域文件和反向解析域文件

touch example.com.zone 192.168.25.rev

#编辑正向解析域
vim example.com.zone

$TTL 1D
@       IN SOA   dns.example.com. admin.example.com. (
                                2025072501      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum

example.com.    IN  NS  dns.example.com.
dns.example.com.  IN  A 192.168.25.21
www.example.com.  IN  A      192.168.25.22
mail.example.com. IN  A      192.168.25.23
@     IN  MX  10 mail.example.com.
blog.example.com. IN  CNAME  www.example.com.

#编辑反向解析域

vim 192.168.25.rev

$TTL 1D
@       IN SOA  dns.example.com. admin.example.com. (
                                        2025072508      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN NS      dns.example.com.
21      IN PTR     dns.example.com. ;
22     IN PTR     www.example.com. ;
                                     
#6.重启服务,检查dns是否生效
systemctl restart named

#7.修改网卡的dns设置为dns服务器:192.168.25.21
vim /etc/sysconfig/network-scripts/ifcfg-ens33

DNS1=192.168.25.21

#8.重启网卡
systemctl restart network

#检查文件完整性

# 检查主配置文件
named-checkconf /etc/named.conf

# 检查正向解析域文件
named-checkzone example.com /var/named/example.com.zone

# 检查反向解析域文件
named-checkzone 25.168.192.in-addr.arpa /var/named/192.168.25.rev

#9.测试DNS
nslookup www.example.com 
#应输出
Server:		192.168.25.21
Address:	192.168.25.21#53

Name:	www.example.com
Address: 192.168.25.22

nslookup 192.168.25.21
#应输出
21.25.168.192.in-addr.arpa	name = dns.example.com.


#客户端操作

#1.关闭防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld

#2.关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#3.下载安装
yum -y install bind bind-utils

#4.修改/etc/resolv.conf
vim /etc/resolv.conf
#添加       【DNS服务器IP】
nameserver 192.168.25.21

#5.测试

nslookup 192.168.25.21
#应输出
21.25.168.192.in-addr.arpa	name = dns.example.com.

nslookup dns.example.com 
#应输出
Server:		192.168.25.21
Address:	192.168.25.21#53










DHCP:自动分配IP地址

动态主机配置协议DHCP )服务器为网络上的每个设备动态分配IP地址和其他网络配置参数。

  • 一般路由器上自带DHCP服务。
  • 使用服务器搭建DHCP
#服务端操作
#1.安装 
# Centos7
yum install dhcp -y

#Ubuntu
apt install -y isc-dhcp-server

#2.去虚拟机的虚拟网络编辑器中,选择我们用的NAT模式,去里面把DHCP服务关掉

#3.修改网络设置配置文件【服务端得是静态ip】
vim /etc/sysconfig/network-scripts/ifcfg-ens33 

TYPE="Ethernet"      #网络类型
BOOTPROTO="none"     #启动模式:none【默认静态模式】,static【静态模式】,dhcp【动态模式】
DEFROUTE="yes"       #
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"          #网卡名称
UUID="5c2de1c8-145a-434a-aaf2-5b03c31034f0" #UUID号
DEVICE="ens33"        #设备名称
ONBOOT="yes"          #是否开机启动网卡,设置为yes
DNS1="8.8.8.8"        #DNS设置
IPADDR=192.168.25.21  #ip地址
PREFIX=24             #子网掩码:8/16/24/32
GATEWAY=192.168.25.2  #网关
IPV6_PEERDNS=no
IPV6_PEERROUTES=yes
IPV6_PRIVACY=no

#4.重启网卡
systemctl restart network


#5设置dhcp配置文件(设置的dhcp网段需要和自己网卡在一个网段)
#复制一个配置文件
cp  /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example  /etc/dhcp/dhcpd.conf

cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y
#编辑配置文件
vim /etc/dhcp/dhcpd.conf

#第47行
    #设置dhcp网段和子网掩码,注意必须和本机IP的网段保持一致
    subnet 192.168.25.0 netmask 255.255.255.0 {
    #设置dhcp地址池范围
    range 192.168.25.100 192.168.25.200;
    #dns服务器IP地址
    option domain-name-servers 114.114.114.114;
    #设置网关
    option routers 192.168.25.3;
    #广播地址
    option broadcast-address 192.168.25.255;
    #设置默认租约时间:4小时
    default-lease-time 14400;
    #设置最大租约时间:8小时
    max-lease-time 28800;
    }
    
#6.启动dhcp服务
systemctl start dhcpd

#7.查看启动进程
netstat -anptu|grep dhcpd

#8.如果要增加某个用户保留地址固定的ip地址
vim /etc/dhcp/dhcpd.conf

#新增内容
host prtsvr {
hardware Ethernet 客户机的mac地址;
fixed-address  保留IP地址;
}

# mac地址怎么查看?
ip a
link/ether  00:0c:29:f7:1f:13 【MAC地址】 
#放在subnet 大括号里面的对局部有效,放在外面的对全局有效


#客户端操作
#1.修改网络设置配置文件【服务端得是动态ip】
vim /etc/sysconfig/network-scripts/ifcfg-ens33 

TYPE="Ethernet"      #网络类型
BOOTPROTO="dhcp"     #启动模式:none【默认静态模式】,static【静态模式】,dhcp【动态模式】
DEFROUTE="yes"       
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"          #网卡名称
UUID="5c2de1c8-145a-434a-aaf2-5b03c31034f0" #UUID号
DEVICE="ens33"        #设备名称
ONBOOT="yes"          #是否开机启动网卡,设置为yes
#DNS1="8.8.8.8"        #DNS设置
#IPADDR=192.168.25.21  #ip地址
#PREFIX=24             #子网掩码:8/16/24/32
#GATEWAY=192.168.25.2  #网关
IPV6_PEERDNS=no
IPV6_PEERROUTES=yes
IPV6_PRIVACY=no

#2.重启网卡
systemctl restart network

#3.查看ip(查看自动获取的ip地址)

ip a

HTTP/https:web服务

Http基础

一、HTTP基本概念

1.定义

  • HTTP(超文本传输协议,HyperText Transfer Protocol)是用于在客户端和服务器之间传输超文本数据的协议。(如HTML、图像、视频等)。

2.特点

  • 无状态:每个请求都是独立的,服务器不保留之前的请求状态。
  • 灵活性:可以通过不同的请求方法(如GET、POST、PUT、DELETE等)进行数据传输。
  • 文本协议:请求和响应以文本格式书写,易于调试。

3.请求方法

  • GET:请求指定的资源,数据通过URL传递,通常用于获取数据。
  • POST:向指定资源提交数据,最常用的表单提交方法。
  • PUT:更新指定资源,通常加在已有资源的路径中。
  • DELETE:请求删除指定资源。
  • HEAD:与GET类似,但只返回响应头,不返回响应体。
  • OPTIONS:查询服务器支持的HTTP方法。

4.请求结构

  • 请求行:包括请求方法、URI和HTTP版本。
  • 请求头:包含额外的属性,如 Content-Type, User-Agent
  • 请求体:用于提交数据(通常在POST或PUT请求中)。

5.协议版本

  • HTTP/1.0:最初版本,1996年发布。
  • HTTP/1.1:1999年发布,支持持久连接、更好的缓存控制等。
  • HTTP/2:2015年发布,采用二进制分帧,支持多路复用,改善性能。
  • HTTP/3:基于QUIC协议,增强性能和安全性,2020年推出。

二、HTTP请求和响应结构

1. HTTP请求结构

  • 请求行:包括请求方法(GET、POST等)、请求URI和HTTP版本。
GET /index.html HTTP/1.1
  • 请求头:包含一些附加信息(如用户代理、内容类型、接受的编码等)。
User-Agent: Mozilla/5.0
Accept: text/html
  • 请求体:通常在POST请求中包含,携带需要提交的数据。

2. HTTP响应结构

  • 状态行:包含HTTP版本、状态码和状态描述。
HTTP/1.1 200 OK
  • 响应头:包含服务器信息、内容类型、内容长度等。
Content-Type: text/html
Content-Length: 1234
  • 响应体:包含实际返回给客户端的数据(如HTML内容)。

三、HTTP的工作原理

  1. 客户端发送请求
    • 用户在浏览器中输入URL后,浏览器解析该URL,确定目标服务器和资源地址。
  2. 建立TCP连接
    • 浏览器通过DNS解析域名获取服务器IP地址,建立TCP连接(通常使用3次握手)。
  3. 发送HTTP请求
    • 一旦连接建立,浏览器发送HTTP请求到服务器。
  4. 服务器处理请求
    • 服务器接收请求,处理相应逻辑,访问数据库或其他资源。
  5. 发送HTTP响应
    • 服务器将处理结果(状态码、响应头、响应体)通过TCP连接返回给客户端。
  6. 浏览器渲染页面
    • 浏览器接收响应数据,解析HTML、CSS和JavaScript,渲染出用户看到的网页。

四、常用状态码及其含义

  • 1xx(信息性状态码)
    • 100:继续(Continue)
    • 101:切换协议(Switching Protocols)
  • 2xx(成功状态码)
    • 200:成功(OK)
    • 201:已创建(Created)
    • 204:无内容(No Content)
  • 3xx(重定向状态码)
    • 301:永久重定向(Moved Permanently)
    • 302:临时重定向(Found)
    • 304:未修改(Not Modified)
  • 4xx(客户端错误状态码)
    • 400:错误请求(Bad Request)
    • 401:未授权(Unauthorized)
    • 403:禁止访问(Forbidden)
    • 404:未找到(Not Found)
  • 5xx(服务器错误状态码)
    • 500:内部服务器错误(Internal Server Error)
    • 502:错误网关(Bad Gateway)
    • 503:服务不可用(Service Unavailable)

五、常见HTTP问题

- **延迟及性能问题**:
    - 解决办法包括使用CDN、使用HTTP/2改进性能、资源压缩与合并。

- **安全隐患**:
    - 使用HTTPS保护用户数据、实施CORS(跨域资源共享)策略、利用HSTS避免SSL剥离攻击。

六、最常用的HTTP工具

  • Postman:用于API测试,方便发送各种HTTP请求,查看响应。
  • curl:命令行工具,用于与服务器进行数据交互。
  • Wireshark:网络分析工具,用于捕获和分析HTTP流量。

Https基础

一、HTTPS基本概念

  1. 定义
    • HTTPS(安全超文本传输协议)是在HTTP协议的基础上加入SSL/TLS加密协议,保障数据传输安全。
  2. 特点
    • 加密:使用加密算法确保数据在传输中不被窃听。
    • 数据完整性:通过消息摘要防止数据在传输过程中的篡改。
    • 身份验证:通过数字证书验证服务器的真实性。
  3. 端口号
    • HTTP默认使用80端口,HTTPS默认使用443端口。

二、HTTP与HTTPS的区别

特性 HTTP HTTPS
安全性 明文传输,安全性差 加密传输,安全性高
性能 性能较高 性能略低,由于加密和解密的处理
数据完整性 数据易被篡改 数据完整性得到保障
身份认证 无身份认证 有数字证书进行身份验证
适用场景 适合传输公开数据 适合传输敏感数据,如交易信息等

三、HTTPS的工作原理

  1. 客户端请求
    • 客户端发起HTTPS请求,请求建立加密通道。
  2. 服务器响应
    • 服务器返回数字证书,包含公钥和服务器身份信息。
  3. 验证证书
    • 客户端验证数字证书的有效性,确保证书是由受信任的证书颁发机构(CA)颁发的。
  4. 密钥交换
    • 验证无误后,客户端生成一个对称密钥并用服务器的公钥加密发送给服务器。
  5. 加密通信
    • 服务器使用私钥解密密钥,并与客户端通过该对称密钥进行加密通信。

四、SSL/TLS概念

  1. SSL/TLS
    • SSL(安全套接字层)是用于建立安全连接的协议,现已被其后续版本TLS(传输层安全性)取代。
  2. 密钥管理
    • 公钥和私钥、对称密钥的结合使用,确保数据传输的加密和安全。
  3. 数字证书
    • 用于确认主机的身份,是由证书颁发机构(CA)签发的。

三、HTTP/2 和 HTTP/3 特性

1. HTTP/2

HTTP/2 是 HTTP 协议的第二个主要版本,专注于提高性能和效率。以下是其主要特性:

  • 二进制分帧
    • HTTP/2 采用二进制格式传输数据(而非文本格式),这使得解析更加高效,并减少了传输的复杂性。
  • 多路复用
    • HTTP/2 允许在单个TCP连接上同时传输多个请求和响应,解决了HTTP/1.x中的"队头阻塞"问题。
  • 头部压缩
    • 使用 HPACK 算法压缩请求和响应头,减少了传输数据的大小,提高了传输效率。
  • 服务器推送
    • 服务器可以在客户端请求之前主动推送资源,减少请求延迟。比如,当客户端请求一个HTML页面时,服务器可以主动推送相关的CSS、JS文件。
  • 请求优先级
    • 客户端可以为每个请求设置优先级,服务器可以根据优先级决定资源的传输顺序。

2. HTTP/3

HTTP/3 是 HTTP 协议的第三个主要版本,基于 QUIC(Quick UDP Internet Connections)协议,旨在进一步提升性能和安全性。

  • 基于UDP
    • 不同于HTTP/1和HTTP/2基于TCP,HTTP/3基于UDP,减少了TCP的连接建立和恢复时间。
  • 零往返时间(0-RTT)连接建立
    • HTTP/3 可以实现快速连接建立,甚至可以达到0-RTT(往返时间),显著减少了连接延迟。
  • 改进的多路复用
    • QUIC 协议改进了多路复用机制,解决了TCP中的队头阻塞问题,并且单个流中的错误不会影响其他流。
  • 内置的TLS 1.3
    • HTTP/3 强制使用 TLS 1.3,进一步增强了安全性,确保所有连接都经过加密。
  • 连接迁移
    • HTTP/3 支持在不同网络之间无缝迁移连接,例如从WiFi切换到移动网络时不会中断连接。

四、HTTPS的优化

1. SSL/TLS握手优化

  • 会话恢复:为了减少SSL握手时间,可以通过会话缓存或会话票证机制恢复之前的会话,从而避免重新进行完整的握手过程。
  • False Start:客户端在发送ChangeCipherSpec之前,就发送应用数据,减少一次往返的延迟。

2. HTTP/2优化建议

  • 合并资源:减少页面中不同资源的请求数量,例如使用CSS Sprite将多个图片合并成一个。
  • 减少头部信息:尽量减少HTTP请求头的大小,避免不必要的头部字段,利用HPACK压缩。
  • 合理设置优先级:确保关键资源(如HTML文档和CSS文件)优先加载。

3. 减少TLS开销

  • 使用长寿命证书:证书的生成和验证会有一定的计算开销,适当选择长寿命证书可以减少频繁的证书更新。
  • OCSP Stapling:通过服务器预先查询证书的吊销状态,并在TLS握手时发送给客户端,减少客户端验证证书的时间。

五、常见的安全问题与防范

1. 中间人攻击(Man-in-the-Middle Attack, MITM)

  • 描述:攻击者在客户端和服务器之间拦截并篡改通信数据。
  • 防范:使用HTTPS,确保传输数据的加密和完整性,并且使用有效的证书验证机制。

2. SSL剥离攻击(SSL Stripping)

  • 描述:攻击者将HTTPS连接降级为HTTP连接,从而能够拦截明文传输的数据。
  • 防范:强制使用HSTS(HTTP Strict Transport Security)策略,确保浏览器只能通过HTTPS访问站点。

好的,接下来继续深入介绍一些常见的安全问题及其防范措施,另外列出HTTP/HTTPS的一些实际应用案例和最佳实践。

3. 跨站脚本攻击(XSS)

  • 描述:攻击者将恶意脚本注入到信任的网站中,使得访问该网站的用户的浏览器执行这些恶意脚本,从而窃取用户信息或进行其他恶意操作。

  • 防范

    • 在服务器端对用户输入进行严格的验证和清理,尤其是在渲染到网页之前。
    • 在 HTTP 响应头中添加 Content-Security-Policy(CSP),限制可以执行的脚本源。

4. 跨站请求伪造(CSRF)

  • 描述:攻击者诱使用户在已经认证的状态下执行不想要的操作,通常是通过伪造请求。

  • 防范

    • 在敏感操作中使用 CSRF 令牌,确保请求都是从合法来源发起的。
    • 对于状态改变的请求(如POST,请求),验证 Referer 头。

5. DNS劫持

  • 描述:攻击者通过劫持DNS请求,将用户导向恶意网站。

  • 防范

    • 使用DNSSEC为DNS数据提供认证,确保DNS解析的正确性。
    • 确保使用HTTPS和服务器的SSL/TLS证书,防止与钓鱼网站的连接。

六、HTTP/HTTPS的最佳实践

1. 强制使用HTTPS

  • 确保所有业务流量都通过HTTPS加密传输,即使是某些不敏感的资源,也可以避免流量窃听及篡改。
  • 使用HTTP Strict Transport Security(HSTS)头,告知浏览器强制使用HTTPS访问,避免任何HTTP请求。

2. 使用有效的SSL/TLS证书

  • 选择信誉良好的证书颁发机构(CA)进行SSL/TLS证书的申请。
  • 及时更新和替换即将过期的证书,避免服务中断。

3. 定期安全审计

  • 进行定期的安全审计和渗透测试,确保系统和应用持续安全。
  • 监控访问日志,识别异常请求和潜在的安全威胁。

4. 采用最佳的加密算法

  • 确保使用强加密算法(如AES-256)和现代的TLS协议版本(如TLS 1.2或者TLS 1.3)。
  • 定期更新加密配置,禁用过时和不安全的加密协议(如SSLv2/SSLv3)。

5. 优化性能

  • 使用CDN(内容分发网络)来加速静态资源加载,减少延迟。
  • 启用HTTP/2或者HTTP/3来提升性能,充分利用其多路复用和并发请求的特点。

七、实际应用案例

1. 电商网站

在电商网站中,HTTPS是必需的,因为用户会在该平台上输入敏感信息,如信用卡信息和个人数据。使用HTTPS可以保护用户隐私,并增强用户对网站的信任。

2. 社交媒体平台

社交媒体平台需要保护用户的个人资料和消息隐私,HTTPS通过加密传输防止用户数据被窃取,确保信息的安全性和完整性。

3. 金融服务

银行和金融应用必须使用HTTPS来确保所有金融交易的安全。敏感的财务信息(如帐户、密码和交易记录)需要加密,以防信息丢失或被截获。

八、总结

掌握HTTP和HTTPS的相关知识及其安全特性,对于开发和维护现代Web应用至关重要。随着网络安全问题的日益严重,采用HTTPS已经成为保护用户数据和提高网站信任度的基本要求。

通过使用最佳实践和相关安全措施,我们可以显著提高网站的安全性,同时提升用户体验。定期关注最新的网络安全动态、协议发展以及技术趋势将帮助你在这个快速变化的领域中保持竞争力。

posted @ 2025-07-22 19:39  落无一  阅读(25)  评论(0)    收藏  举报