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复用连接
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
ss -lntp | grep nginx
# 生成自签证书(示例)
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
openssl s_client -connect example.com:443 -servername example.com
- 排错
- 5xx:检查后端服务状态、Nginx错误日志
/var/log/nginx/error.log
- 证书问题:确认证书链完整、域名匹配、有效期
- 连接超时:检查防火墙/安全组、端口监听
- 练习
1. 配置 HTTP 强制跳转 HTTPS。
2. 使用 curl -v 观察请求头变化。
DNS#
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
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
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#
sudo apt update
sudo apt install -y vsftpd
sudo systemctl enable --now vsftpd
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 -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
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 输出并记录关键参数。