2.2.5 常用应用层协议(HTTP/HTTPS、DNS、DHCP、SSH、FTP、SMTP)

常用应用层协议(HTTP/HTTPS、DNS、DHCP、SSH、FTP、SMTP)#

HTTP/HTTPS#

  • 原理与流程
sequenceDiagram
    participant C as Client
    participant N as Nginx/HTTP Server
    C->>N: TCP三次握手
    C->>N: HTTP Request
    N-->>C: HTTP Response
    C->>N: Keep-Alive复用连接
  • 安装(以 Nginx 为例)
# Debian/Ubuntu
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx

# 预期:监听 80 端口
ss -lntp | grep nginx
  • HTTPS证书与启用
# 生成自签证书(示例)
sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 \
  -newkey rsa:2048 \
  -keyout /etc/nginx/ssl/site.key \
  -out /etc/nginx/ssl/site.crt \
  -subj "/C=CN/ST=BJ/L=BJ/O=Ops/OU=IT/CN=example.com"

# Nginx 配置片段 /etc/nginx/sites-available/default
server {
  listen 443 ssl;
  server_name example.com;
  ssl_certificate     /etc/nginx/ssl/site.crt;
  ssl_certificate_key /etc/nginx/ssl/site.key;

  location / {
    return 200 "hello https\n";
  }
}

sudo nginx -t && sudo systemctl reload nginx
  • 常用命令与解释
# 发起请求并显示响应头
curl -I https://example.com

# 查看 TLS 握手与证书信息
openssl s_client -connect example.com:443 -servername example.com
  • 排错
  • 5xx:检查后端服务状态、Nginx错误日志 /var/log/nginx/error.log
  • 证书问题:确认证书链完整、域名匹配、有效期
  • 连接超时:检查防火墙/安全组、端口监听
  • 练习
    1. 配置 HTTP 强制跳转 HTTPS。
    2. 使用 curl -v 观察请求头变化。

DNS#

  • 原理草图
文章图片
  • 安装(以 dnsmasq 为例)
sudo apt update
sudo apt install -y dnsmasq
sudo systemctl enable --now dnsmasq
  • 配置示例(/etc/dnsmasq.d/local.conf)
# 本地域名解析
address=/lab.local/10.0.0.10
# 上游DNS
server=8.8.8.8
sudo systemctl restart dnsmasq
  • 查询与解释
# 递归查询
dig @127.0.0.1 lab.local A

# 指定权威DNS
dig @8.8.8.8 example.com A +trace
  • 排错
  • 解析慢:检查上游DNS是否可达、缓存TTL设置
  • 解析失败:确认记录类型、权威区文件是否加载
  • 练习
    1. 为 app.lab.local 增加 A 记录并解析验证。
    2. 使用 dig +trace 观察解析链路。

DHCP#

  • 原理草图
sequenceDiagram
    participant C as Client
    participant S as DHCP Server
    C->>S: DISCOVER
    S-->>C: OFFER
    C->>S: REQUEST
    S-->>C: ACK
  • 安装(以 isc-dhcp-server 为例)
sudo apt update
sudo apt install -y isc-dhcp-server
  • 配置示例(/etc/dhcp/dhcpd.conf)
subnet 10.0.0.0 netmask 255.255.255.0 {
  range 10.0.0.100 10.0.0.200;
  option routers 10.0.0.1;
  option domain-name-servers 10.0.0.10, 8.8.8.8;
  default-lease-time 600;
  max-lease-time 7200;
}
sudo systemctl enable --now isc-dhcp-server
  • 客户端测试
# 释放/获取地址
sudo dhclient -r
sudo dhclient -v
  • 排错
  • 无法获取地址:确认服务监听网卡 /etc/default/isc-dhcp-server
  • 冲突:检查地址池范围与静态地址
  • 练习
    1. 添加一个保留地址(MAC绑定IP)。
    2. 调整租约时间并验证生效。

SSH#

  • 原理草图
文章图片
  • 安装
sudo apt update
sudo apt install -y openssh-server
sudo systemctl enable --now ssh
  • 密钥登录配置
# 客户端生成密钥
ssh-keygen -t ed25519 -C "ops@lab"

# 上传公钥
ssh-copy-id user@10.0.0.10
  • 服务端加固(/etc/ssh/sshd_config)
PermitRootLogin no
PasswordAuthentication no
AllowUsers user
sudo systemctl reload ssh
  • 排错
  • 连接拒绝:检查端口监听 ss -lntp | grep sshd
  • 密钥无效:权限应为 ~/.ssh 700,authorized_keys 600
  • 练习
    1. 配置本地端口转发 ssh -L 8080:127.0.0.1:80 user@host
    2. 开启并测试 AllowUsers 白名单。

FTP#

  • 原理草图
文章图片
  • 安装(vsftpd)
sudo apt update
sudo apt install -y vsftpd
sudo systemctl enable --now vsftpd
  • 配置示例(/etc/vsftpd.conf)
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30010
sudo systemctl restart vsftpd
  • 测试命令
# 连接
ftp 10.0.0.10

# 或使用 lftp
lftp -u user,pass 10.0.0.10 -e "ls; bye"
  • 排错
  • 被动模式失败:开放被动端口范围与防火墙
  • 上传失败:检查目录权限与 write_enable
  • 练习
    1. 将被动端口范围改为 31000-31005 并验证。
    2. 使用 lftp 批量上传文件。

SMTP#

  • 原理草图
sequenceDiagram
    participant C as Mail Client
    participant M as MTA(Postfix)
    C->>M: EHLO/HELO
    C->>M: MAIL FROM
    C->>M: RCPT TO
    C->>M: DATA
    M-->>C: 250 OK
  • 安装(Postfix)
sudo apt update
sudo apt install -y postfix
sudo systemctl enable --now postfix
  • 发送测试邮件
# 本地发送
echo "test mail" | mail -s "hello" user@example.com

# 连接测试
telnet 127.0.0.1 25
  • 排错
  • 队列积压:mailq 查看队列
  • 退信:检查 DNS 的 MX、SPF/DKIM 配置
  • 练习
    1. 使用 mailq 查看并清理队列(postsuper -d ALL)。
    2. 配置 postconf -n 输出并记录关键参数。