跳转到内容

防火墙高级配置

课程介绍

防火墙是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 firewalld

2.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 --reload

2.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 --reload

2.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 --reload

2.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 --reload

3. 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 iptables

3.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 INPUT

3.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/iptables

4. 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 save

4.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 save

4.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 save

5. 端口转发

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@server

5.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@server

5.4 动态端口转发

动态端口转发用于创建SOCKS代理。

配置动态端口转发

bash
# 创建SOCKS代理
ssh -D 1080 user@server

# 后台运行
ssh -f -N -D 1080 user@server

6. 防火墙最佳实践

6.1 默认拒绝策略

默认拒绝策略可以提高系统安全性。

配置默认拒绝策略

bash
# 设置默认拒绝策略
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 保存规则
sudo service iptables save

6.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 save

6.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 save

6.4 限制连接数

限制连接数可以防止DDoS攻击。

配置限制连接数

bash
# 限制每个IP的连接数
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP

# 保存规则
sudo service iptables save

7. 实战案例

案例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:安装firewalld
  • sudo 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服务器防火墙规则。

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径