实训背景
某公司需部署一台Linux网关服务器,要求实现以下功能:
- 基础防火墙:仅允许SSH(22)、HTTP(80)、HTTPS(443)入站,拒绝其他所有流量。
- 共享上网(NAT):允许内网(192.168.10.0/24)通过该网关访问互联网。
- 端口转发(DNAT):将公网IP的TCP 8080端口映射到内网Web服务器(192.168.10.100:80)。
- 支持FTP服务:内网FTP服务器(192.168.10.200:21)需允许被动模式数据传输。
环境准备
硬件/软件要求
- 三台虚拟机(VirtualBox/VMware):
- 网关服务器:双网卡(eth0: NAT模式模拟公网,eth1: 内部网络 192.168.10.1)
- 内部服务器:单网卡(内部网络 192.168.10.100,部署Apache)
- 外部客户端:单网卡(NAT模式模拟公网)
- 操作系统:Ubuntu 22.04/CentOS 8
- 工具:
iptables
,iproute2
,curl
,ftp-client
网络拓扑
外部互联网 (eth0:NAT) ↓
网关服务器 (eth1:192.168.10.1) ↓
内部网络 (192.168.10.0/24) ├── Web服务器 (192.168.10.100:80) └── FTP服务器 (192.168.10.200:21)
实训步骤
任务1:基础防火墙配置
目标:保护网关服务器,仅开放必要端口。
-
清空规则并设置默认策略
iptables -F iptables -X iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
-
允许本地回环接口
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
-
允许已建立的连接和关联流量
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-
开放SSH、HTTP、HTTPS
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
验证:
- 从外部客户端执行
nmap -p 22,80,443 网关公网IP
,应显示开放端口。 - 尝试连接其他端口(如
telnet 网关公网IP 3306
),应被拒绝。
任务2:配置NAT(共享上网)
目标:允许内网通过网关访问互联网。
-
启用IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward # 永久生效(编辑/etc/sysctl.conf) sysctl -w net.ipv4.ip_forward=1
-
配置SNAT(源地址转换)
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
-
允许内网流量转发
iptables -A FORWARD -s 192.168.10.0/24 -j ACCEPT iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
验证:
- 在内网服务器执行
ping 8.8.8.8
,应能连通。 - 在内网服务器执行
curl ifconfig.me
,返回的IP应为网关的公网IP。
任务3:配置端口转发(DNAT)
目标:将公网IP的8080端口映射到内网Web服务器的80端口。
-
添加DNAT规则
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.10.100:80
-
允许转发到内网Web服务器
iptables -A FORWARD -d 192.168.10.100 -p tcp --dport 80 -j ACCEPT
验证:
- 在外部客户端执行
curl http://网关公网IP:8080
,应返回内网Web服务器的页面。
任务4:支持FTP被动模式
目标:允许外部访问内网FTP服务器(被动模式)。
-
加载FTP连接跟踪模块
modprobe nf_conntrack_ftp # 永久生效 echo "nf_conntrack_ftp" >> /etc/modules-load.d/modules.conf
-
允许FTP控制连接
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 21 -j DNAT --to-destination 192.168.10.200:21 iptables -A FORWARD -d 192.168.10.200 -p tcp --dport 21 -j ACCEPT
-
放行动态数据端口(RELATED状态)
iptables -A FORWARD -m conntrack --ctstate RELATED -j ACCEPT
验证:
- 在外部客户端使用FTP客户端连接
ftp://网关公网IP:21
,上传/下载文件应成功。
实训总结
通过本案例,您已掌握以下技能:
- 使用iptables配置基础防火墙规则,保护服务器关键端口。
- 通过SNAT实现内网共享上网。
- 利用DNAT实现公网端口到内网服务的映射。
- 结合连接跟踪(Conntrack)支持FTP等动态端口协议。
知识要点
要点 | 说明 |
---|---|
Netfilter钩子 | PREROUTING(DNAT)、POSTROUTING(SNAT)、INPUT/OUTPUT/FORWARD链 |
四表优先级 | raw → mangle → nat → filter |
有状态过滤 | -m conntrack --ctstate 匹配连接状态 |
NAT类型 | SNAT(源地址转换)、DNAT(目标地址转换) |
动态协议支持 | 加载nf_conntrack_ftp 模块,利用RELATED 状态 |
下一步扩展:尝试配置ICMP限速、日志记录(LOG
动作)或DDoS防护(如限制并发连接数)。