Linux,凭借其开源、灵活和强大的安全性能,成为许多组织和个人的首选操作系统
而在Linux的安全体系中,防火墙(通常使用`iptables`或`firewalld`)扮演着举足轻重的角色
本文将详细介绍如何在Linux系统中添加防火墙规则,构建一道坚不可摧的安全防线
一、Linux防火墙基础 Linux防火墙的核心功能在于控制进出系统的网络流量
通过设定一系列规则,防火墙可以允许或拒绝特定的数据包,从而有效防止未经授权的访问和潜在的安全威胁
1.1 iptables与firewalld - iptables:作为Linux系统中经典的防火墙工具,iptables允许用户定义复杂的规则集,包括地址转换(NAT)、数据包过滤和日志记录等
虽然配置相对复杂,但灵活性极高,适合需要精细控制网络流量的场景
- firewalld:作为iptables的友好前端,firewalld提供了基于区域的防火墙管理,支持动态更新规则而不中断现有连接,极大简化了配置过程,尤其适合服务器环境
1.2 防火墙规则的基本概念 - 链(Chains):iptables中有三条内置链:INPUT(处理进入系统的数据包)、FORWARD(处理转发的数据包)和OUTPUT(处理离开系统的数据包)
- 规则(Rules):每条规则包含一个匹配条件和相应的动作(ACCEPT、DROP、REJECT等)
- 策略(Policies):为每条链设定默认动作,当数据包不匹配任何规则时执行
二、使用iptables添加规则 2.1 检查当前规则 在配置之前,了解当前防火墙状态是基础
使用以下命令查看iptables规则: sudo iptables -L -v -n 该命令将显示所有链的详细规则及计数器
2.2 添加基本规则 允许SSH连接: bash sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT 这条规则允许所有TCP端口22(SSH)的入站连接
拒绝所有其他入站连接: bash sudo iptables -P INPUT DROP 将INPUT链的默认策略设置为DROP,拒绝所有未明确允许的入站连接
允许出站连接: 虽然默认情况下OUTPUT链允许所有出站连接,但显式设置可以增强可读性: bash sudo iptables -A OUTPUT -j ACCEPT 记录日志: 对于需要监控的流量,可以添加日志记录规则: bash sudo iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix HTTP Access: 这条规则将尝试访问HTTP服务的所有请求记录到系统日志中
2.3 保存规则 由于iptables规则在系统重启后会丢失,需要保存它们
在Debian/Ubuntu系统上,可以使用`iptables-save`和`iptables-restore`命令,或安装`iptables-persistent`包自动保存
在CentOS/RHEL系统上,则可以通过`service iptables save`命令保存规则
三、使用firewalld添加规则 相较于iptables,firewalld提供了更为直观的管理方式,尤其适合不熟悉底层网络配置的用户
3.1 启动并检查firewalld服务 首先,确保firewalld服务正在运行: sudo systemctl start firewalld sudo systemctl enable firewalld sudo firewall-cmd --state 3.2 添加基本规则 允许SSH连接: 默认情况下,firewalld会允许SSH连接
若需手动添加,使用: bash sudo firewall-cmd --zone=public --add-service=ssh --permanent sudo firewall-cmd --reload 允许HTTP/HTTPS服务: bash sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --add-service=https --permanent sudo firewall-cmd --reload 开放特定端口: 如果需要开放非标准端口,如MySQL的3306端口: bash sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent sudo firewall-cmd --reload 拒绝特定IP地址: firewalld不直接支持基于IP地址的拒绝规则,但可以通过创建自定义区域或服