主题
防火墙高级配置
课程介绍
防火墙是Linux系统安全的重要组成部分,用于控制网络流量。本课程将详细讲解防火墙高级配置、规则管理、NAT配置、端口转发等核心功能,帮助你搭建安全的网络环境。
1. 防火墙概述
1.1 什么是防火墙
防火墙是一种网络安全系统,用于控制进出网络的数据流。
防火墙的特点:
| 特点 | 说明 |
|---|---|
| 访问控制 | 控制网络访问 |
| 流量过滤 | 过滤网络流量 |
| NAT功能 | 支持网络地址转换 |
| 端口转发 | 支持端口转发 |
| 日志记录 | 记录网络流量 |
1.2 防火墙类型
Linux系统有多种防火墙类型。
防火墙类型:
| 类型 | 说明 |
|---|---|
| iptables | 传统的防火墙工具 |
| firewalld | 动态防火墙管理工具 |
| nftables | 新一代防火墙工具 |
| ufw | 简化的防火墙工具 |
2. firewalld配置
2.1 firewalld概述
firewalld是CentOS/RHEL系统的默认防火墙管理工具。
firewalld的特点:
| 特点 | 说明 |
|---|---|
| 动态管理 | 动态管理防火墙规则 |
| 区域管理 | 支持多个区域 |
| 服务管理 | 支持服务管理 |
| 端口管理 | 支持端口管理 |
| 富规则 | 支持复杂的规则 |
2.2 firewalld安装
安装firewalld的步骤。
在CentOS上安装firewalld:
bash
# 安装firewalld
sudo yum install firewalld -y
# 启动firewalld
sudo systemctl start firewalld
# 设置firewalld开机自启
sudo systemctl enable firewalld
# 查看firewalld状态
sudo systemctl status firewalld2.3 firewalld区域
firewalld使用区域来管理防火墙规则。
常用区域:
| 区域 | 说明 |
|---|---|
| public | 公共区域,默认拒绝所有连接 |
| trusted | 信任区域,允许所有连接 |
| internal | 内部区域,允许部分连接 |
| external | 外部区域,允许部分连接 |
| dmz | 非军事化区域,允许部分连接 |
查看区域:
bash
# 查看所有区域
sudo firewall-cmd --get-zones
# 查看当前区域
sudo firewall-cmd --get-active-zones
# 查看默认区域
sudo firewall-cmd --get-default-zone设置默认区域:
bash
# 设置默认区域
sudo firewall-cmd --set-default-zone=public
# 重载防火墙
sudo firewall-cmd --reload2.4 firewalld服务
firewalld支持服务管理。
查看服务:
bash
# 查看所有服务
sudo firewall-cmd --get-services
# 查看区域中的服务
sudo firewall-cmd --zone=public --list-services添加服务:
bash
# 添加服务(临时)
sudo firewall-cmd --zone=public --add-service=http
# 添加服务(永久)
sudo firewall-cmd --zone=public --add-service=http --permanent
# 重载防火墙
sudo firewall-cmd --reload删除服务:
bash
# 删除服务(临时)
sudo firewall-cmd --zone=public --remove-service=http
# 删除服务(永久)
sudo firewall-cmd --zone=public --remove-service=http --permanent
# 重载防火墙
sudo firewall-cmd --reload2.5 firewalld端口
firewalld支持端口管理。
查看端口:
bash
# 查看区域中的端口
sudo firewall-cmd --zone=public --list-ports添加端口:
bash
# 添加端口(临时)
sudo firewall-cmd --zone=public --add-port=80/tcp
# 添加端口(永久)
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
# 添加多个端口(永久)
sudo firewall-cmd --zone=public --add-port={80/tcp,443/tcp} --permanent
# 重载防火墙
sudo firewall-cmd --reload删除端口:
bash
# 删除端口(临时)
sudo firewall-cmd --zone=public --remove-port=80/tcp
# 删除端口(永久)
sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent
# 重载防火墙
sudo firewall-cmd --reload2.6 firewalld富规则
firewalld支持富规则,可以创建复杂的规则。
添加富规则:
bash
# 允许特定IP访问SSH
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.10" service name="ssh" accept'
# 允许特定IP段访问HTTP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" accept'
# 拒绝特定IP访问
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject'
# 重载防火墙
sudo firewall-cmd --reload查看富规则:
bash
# 查看富规则
sudo firewall-cmd --list-rich-rules删除富规则:
bash
# 删除富规则
sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.10" service name="ssh" accept'
# 重载防火墙
sudo firewall-cmd --reload3. iptables配置
3.1 iptables概述
iptables是传统的防火墙工具,功能强大但配置复杂。
iptables的特点:
| 特点 | 说明 |
|---|---|
| 功能强大 | 功能强大,支持复杂的规则 |
| 配置复杂 | 配置复杂,学习成本高 |
| 性能优秀 | 性能优秀,处理速度快 |
| 兼容性好 | 兼容性好,支持多种系统 |
3.2 iptables安装
安装iptables的步骤。
在Ubuntu上安装iptables:
bash
# 安装iptables
sudo apt install iptables -y
# 查看iptables版本
iptables --version在CentOS上安装iptables:
bash
# 安装iptables
sudo yum install iptables-services -y
# 启动iptables
sudo systemctl start iptables
# 设置iptables开机自启
sudo systemctl enable iptables
# 查看iptables状态
sudo systemctl status iptables3.3 iptables规则
iptables使用规则来控制网络流量。
查看规则:
bash
# 查看所有规则
sudo iptables -L -n -v
# 查看特定链的规则
sudo iptables -L INPUT -n -v
# 查看规则编号
sudo iptables -L -n -v --line-numbers添加规则:
bash
# 允许SSH连接
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许HTTP连接
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许HTTPS连接
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 拒绝所有连接
sudo iptables -A INPUT -j DROP删除规则:
bash
# 删除规则(根据编号)
sudo iptables -D INPUT 1
# 清空所有规则
sudo iptables -F
# 清空特定链的规则
sudo iptables -F INPUT3.4 iptables保存
iptables规则需要保存才能持久化。
保存规则:
bash
# 保存规则(Ubuntu)
sudo iptables-save > /etc/iptables/rules.v4
# 保存规则(CentOS)
sudo service iptables save
# 保存规则(手动)
sudo iptables-save | sudo tee /etc/sysconfig/iptables恢复规则:
bash
# 恢复规则(Ubuntu)
sudo iptables-restore < /etc/iptables/rules.v4
# 恢复规则(CentOS)
sudo service iptables restart
# 恢复规则(手动)
sudo iptables-restore < /etc/sysconfig/iptables4. NAT配置
4.1 NAT概述
NAT(Network Address Translation)是网络地址转换,用于转换IP地址。
NAT的类型:
| 类型 | 说明 |
|---|---|
| SNAT | 源地址转换 |
| DNAT | 目的地址转换 |
| MASQUERADE | 伪装地址转换 |
4.2 SNAT配置
SNAT用于转换源地址。
配置SNAT:
bash
# 启用IP转发
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 配置SNAT
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 203.0.113.1
# 保存规则
sudo service iptables save4.3 DNAT配置
DNAT用于转换目的地址。
配置DNAT:
bash
# 启用IP转发
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 配置DNAT
sudo iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
# 保存规则
sudo service iptables save4.4 MASQUERADE配置
MASQUERADE用于动态IP地址转换。
配置MASQUERADE:
bash
# 启用IP转发
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 配置MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
# 保存规则
sudo service iptables save5. 端口转发
5.1 端口转发概述
端口转发用于将一个端口的流量转发到另一个端口。
端口转发的类型:
| 类型 | 说明 |
|---|---|
| 本地端口转发 | 转发本地端口 |
| 远程端口转发 | 转发远程端口 |
| 动态端口转发 | 动态转发端口 |
5.2 本地端口转发
本地端口转发用于将本地端口转发到远程端口。
配置本地端口转发:
bash
# 转发本地端口到远程端口
ssh -L 8080:localhost:80 user@server
# 转发本地端口到远程服务器的端口
ssh -L 8080:192.168.1.10:80 user@server
# 后台运行
ssh -f -N -L 8080:localhost:80 user@server5.3 远程端口转发
远程端口转发用于将远程端口转发到本地端口。
配置远程端口转发:
bash
# 转发远程端口到本地端口
ssh -R 8080:localhost:80 user@server
# 转发远程端口到本地服务器的端口
ssh -R 8080:192.168.1.10:80 user@server
# 后台运行
ssh -f -N -R 8080:localhost:80 user@server5.4 动态端口转发
动态端口转发用于创建SOCKS代理。
配置动态端口转发:
bash
# 创建SOCKS代理
ssh -D 1080 user@server
# 后台运行
ssh -f -N -D 1080 user@server6. 防火墙最佳实践
6.1 默认拒绝策略
默认拒绝策略可以提高系统安全性。
配置默认拒绝策略:
bash
# 设置默认拒绝策略
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# 保存规则
sudo service iptables save6.2 允许必要的服务
允许必要的服务可以提高系统可用性。
配置允许必要的服务:
bash
# 允许SSH连接
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许HTTP连接
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许HTTPS连接
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 保存规则
sudo service iptables save6.3 限制IP访问
限制IP访问可以提高系统安全性。
配置限制IP访问:
bash
# 允许特定IP访问SSH
sudo iptables -A INPUT -p tcp -s 192.168.1.10 --dport 22 -j ACCEPT
# 拒绝其他IP访问SSH
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
# 保存规则
sudo service iptables save6.4 限制连接数
限制连接数可以防止DDoS攻击。
配置限制连接数:
bash
# 限制每个IP的连接数
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP
# 保存规则
sudo service iptables save7. 实战案例
案例1:Web服务器防火墙配置
场景:配置Web服务器的防火墙规则。
防火墙规则:
bash
# 设置默认拒绝策略
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# 允许SSH连接
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许HTTP连接
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许HTTPS连接
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许本地回环
sudo iptables -A INPUT -i lo -j ACCEPT
# 保存规则
sudo service iptables save案例2:数据库服务器防火墙配置
场景:配置数据库服务器的防火墙规则。
防火墙规则:
bash
# 设置默认拒绝策略
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# 允许SSH连接
sudo iptables -A INPUT -p tcp -s 192.168.1.10 --dport 22 -j ACCEPT
# 允许MySQL连接
sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -j ACCEPT
# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许本地回环
sudo iptables -A INPUT -i lo -j ACCEPT
# 保存规则
sudo service iptables save课程总结
这节课我们学习了防火墙高级配置。
核心内容:
- 防火墙概述
- firewalld配置
- iptables配置
- NAT配置
- 端口转发
- 防火墙最佳实践
- 实战案例
重要命令:
sudo yum install firewalld:安装firewalldsudo firewall-cmd --add-service=http:添加服务sudo firewall-cmd --add-port=80/tcp:添加端口sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT:添加规则sudo iptables-save:保存规则
防火墙是Linux系统安全的重要组成部分,掌握这些知识后,我们将在后续课程中学习SELinux配置和系统加固等内容。
课后练习
练习1(基础)
在CentOS上安装firewalld,并完成初始化配置。
练习2(进阶)
配置firewalld,允许HTTP、HTTPS、SSH服务。
练习3(拓展)
配置iptables,实现Web服务器防火墙规则。