Linux下防火墙介绍及常用命令
一、Linux防火墙核心介绍
1.1 防火墙定义与核心作用
Linux防火墙是一种基于Linux系统的网络安全防护机制,本质是内核级别的流量过滤工具,通过预设规则对进出系统的网络数据包进行允许、拒绝或转发等操作,核心目的是隔离风险区域与安全区域,阻止未授权访问、过滤不安全服务,同时为网络安全监控提供数据支持,是Linux服务器安全防护的第一道防线。
其核心工作原理是依托Linux内核中的netfilter网络过滤模块,该模块负责数据包的过滤、转发等底层处理,路径通常为/lib/modules/(内核版本)/kernel/net/netfilter,各类防火墙管理工具均是基于该模块提供的接口进行规则配置与管理。
1.2 Linux防火墙主要分类
Linux系统中常用的防火墙工具分为三类,适配不同发行版和使用场景,核心区别在于操作便捷性和功能侧重:
1firewalld:动态防火墙工具,CentOS 7及以上版本、Fedora等RedHat系发行版默认自带,支持实时生效的规则配置,无需重启服务即可应用新规则,采用“区域(Zone)”管理机制,配置灵活,适合大多数生产和日常使用场景。
1iptables:传统底层防火墙工具,基于netfilter模块开发,适用于所有Linux发行版,CentOS 6及更早版本默认使用。可直接操作内核防火墙规则,支持精细的流量控制(如NAT转换、复杂过滤规则),但配置相对繁琐,且规则默认临时生效,需手动持久化。
1ufw:Ubuntu等Debian系发行版默认的简化防火墙工具,是iptables的前端封装,命令简洁易懂,适合初学者快速配置基础防火墙规则。
1.3 核心概念补充
(1)firewalld核心概念
1区域(Zone):firewalld通过区域对网络接口和流量进行分组,不同区域对应不同安全级别,优先级从高到低分为:drop(强制拒绝所有流量,不返回响应)、block(拒绝所有流量,返回拒绝响应)、trusted(允许所有流量)、public(公共网络,严格规则)、home(家庭网络,宽松规则)等,未指定区域时使用默认区域。
1规则类型:分为临时规则(重启防火墙后失效)和永久规则(需重载配置生效,重启后保留),通过--permanent参数区分。
1富规则(Rich Rules):用于配置复杂规则,可基于源地址、端口、日志等条件设置精细化控制,满足特殊场景需求。
(2)iptables核心概念
1表(Table):用于区分不同功能的规则集合,默认包含4个核心表,其中filter表(默认表,用于流量过滤)、nat表(用于网络地址转换)最常用,此外还有mangle表(修改数据包头部)、raw表(连接跟踪)。
1链(Chain):表内的规则集合,对应数据包的不同处理环节,核心链包括INPUT(入站数据包)、OUTPUT(出站数据包)、FORWARD(转发数据包)、PREROUTING(路由前)、POSTROUTING(路由后)。
1目标(Target):规则匹配后的执行动作,常用动作有ACCEPT(允许数据包通过)、DROP(丢弃数据包,不返回响应)、REJECT(拒绝数据包,返回错误响应)、LOG(记录日志)。
二、Linux防火墙常用命令
以下按firewalld、iptables、ufw分类整理常用命令,涵盖服务管理、规则配置、状态查看等核心操作,标注关键参数和使用场景,方便直接复制使用。
2.1 firewalld常用命令(CentOS 7+ 首选)
(1)服务基础管理(启动、停止、重启)
1查看firewalld运行状态:firewall-cmd --state(输出running表示运行中,not running表示未运行)
1查看firewalld详细状态:systemctl status firewalld
1启动firewalld(临时生效,重启系统失效):systemctl start firewalld
1设置firewalld开机自启(永久生效):systemctl enable firewalld
1停止firewalld(临时生效):systemctl stop firewalld
1禁用firewalld开机自启(永久生效):systemctl disable firewalld
1重启firewalld(中断现有连接,谨慎使用):systemctl restart firewalld
1重载firewalld配置(不中断现有连接,修改规则后必执行):firewall-cmd --reload
1完全重载firewalld(中断所有连接,用于解决严重配置问题):firewall-cmd --complete-reload
(2)区域相关操作
1查看所有可用区域:firewall-cmd --get-zones
1查看当前默认区域:firewall-cmd --get-default-zone
1设置默认区域(如设为public):firewall-cmd --set-default-zone=public
1查看当前激活的区域(已绑定网卡的区域):firewall-cmd --get-active-zones
1查看指定区域的详细配置(如public区域):firewall-cmd --zone=public --list-all
1创建自定义区域(永久生效):firewall-cmd --permanent --new-zone=myzone
1删除自定义区域(永久生效):firewall-cmd --permanent --delete-zone=myzone
1将网卡绑定到指定区域(如将eth0绑定到public):firewall-cmd --zone=public --add-interface=eth0 --permanent
(3)端口与服务管理(最常用)
1查看当前开放的所有端口(临时+永久):firewall-cmd --list-ports
1查看永久开放的端口:firewall-cmd --permanent --list-ports
1开放单个端口(临时生效,如TCP 80端口):firewall-cmd --zone=public --add-port=80/tcp
1开放单个端口(永久生效):firewall-cmd --zone=public --add-port=80/tcp --permanent(需执行reload生效)
1开放端口范围(永久生效,如TCP 18881-18885):firewall-cmd --zone=public --add-port=18881-18885/tcp --permanent
1关闭指定端口(永久生效):firewall-cmd --zone=public --remove-port=80/tcp --permanent(需执行reload生效)
1查看指定端口是否开放(如80/tcp):firewall-cmd --zone=public --query-port=80/tcp(返回yes/no)
1开放预定义服务(临时生效,如http服务,等价于开放80/tcp):firewall-cmd --zone=public --add-service=http
1开放预定义服务(永久生效):firewall-cmd --zone=public --add-service=http --permanent
1移除开放的服务(永久生效):firewall-cmd --zone=public --remove-service=http --permanent
(4)富规则配置(复杂场景)
1允许特定IP访问指定端口(永久生效,如允许192.168.1.100访问22端口):firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
1拒绝特定网段访问指定端口(永久生效,如拒绝10.0.0.0/24访问80端口):firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" reject'
1限制连接速率(永久生效,如限制192.168.1.100每分钟最多10次访问80端口):firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="80" limit value="10/m" accept'
1临时拒绝特定IP访问(如172.16.30.0/24,600秒后失效):firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.30.0/24 service name=ssh audit limit=2/m reject' --timeout=600
(5)其他常用操作
1开启IP转发(用于伪装、端口转发):先编辑配置文件vim /etc/sysctl.conf,添加net.ipv4.ip_forward = 1,再执行sysctl -p生效
1启用伪装(允许内部网络通过公网IP访问外部):firewall-cmd --add-masquerade --permanent
1设置端口转发(如将80端口转发到8080端口):firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
1开启防火墙日志(记录所有被拒绝的流量):firewall-cmd --set-log-denied=all(日志存储在/var/log/firewalld)
1实时查看防火墙日志:journalctl -f -u firewalld
2.2 iptables常用命令(传统底层工具)
(1)服务基础管理
1查看iptables状态:systemctl status iptables
1启动iptables:systemctl start iptables
1设置iptables开机自启:systemctl enable iptables
1停止iptables:systemctl stop iptables
1重启iptables:systemctl restart iptables
(2)规则查看与清空
1查看filter表所有规则(默认表,简洁显示):iptables -L
1查看filter表所有规则(详细显示,不解析IP和端口):iptables -L -n -v
1查看指定表的规则(如nat表):iptables -t nat -L -n -v
1查看规则时显示规则编号:iptables -L -n --line-numbers
1清空filter表所有规则:iptables -F
1清空指定表的规则(如nat表):iptables -t nat -F
1重置规则计数器(清空流量统计):iptables -Z
(3)核心规则配置(入站、出站、转发)
1设置默认策略(filter表,入站拒绝、出站允许、转发拒绝):iptables -P INPUT DROP、iptables -P OUTPUT ACCEPT、iptables -P FORWARD DROP
1允许本地回环地址(lo接口)通信:iptables -A INPUT -i lo -j ACCEPT
1允许已建立的连接通信(避免断开现有连接):iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
1允许特定IP访问(如允许192.168.1.100访问所有端口):iptables -A INPUT -s 192.168.1.100 -j ACCEPT
1允许特定端口入站(如TCP 22端口,SSH):iptables -A INPUT -p tcp --dport 22 -j ACCEPT
1允许特定端口出站(如TCP 80端口,HTTP):iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
1拒绝特定IP访问(如拒绝10.0.0.5):iptables -A INPUT -s 10.0.0.5 -j DROP
1拒绝特定端口入站(如TCP 3306端口):iptables -A INPUT -p tcp --dport 3306 -j REJECT
(4)规则删除与修改
1按规则编号删除(如删除filter表INPUT链第3条规则):iptables -D INPUT 3
1按规则内容删除(如删除允许22端口的规则):iptables -D INPUT -p tcp --dport 22 -j ACCEPT
1修改规则(如将INPUT链第2条规则改为允许192.168.1.0/24访问):iptables -R INPUT 2 -s 192.168.1.0/24 -j ACCEPT
(5)规则持久化(避免重启失效)
1保存当前iptables规则(CentOS 6):service iptables save(规则保存到/etc/sysconfig/iptables)
1保存当前iptables规则(CentOS 7+):iptables-save > /etc/sysconfig/iptables
1恢复规则(从保存文件加载):iptables-restore < /etc/sysconfig/iptables
2.3 ufw常用命令(Ubuntu默认)
1查看ufw状态:ufw status(inactive表示未启用,active表示启用)
1启用ufw(默认拒绝所有入站,允许所有出站):ufw enable
1禁用ufw:ufw disable
1重置所有ufw规则:ufw reset
1允许特定端口(如22端口):ufw allow 22
1允许特定协议端口(如TCP 80端口):ufw allow 80/tcp
1拒绝特定端口(如3306端口):ufw deny 3306
1允许特定IP访问(如192.168.1.100):ufw allow from 192.168.1.100
1拒绝特定IP访问(如10.0.0.5):ufw deny from 10.0.0.5
1删除指定规则(如删除允许80/tcp的规则):ufw delete allow 80/tcp
三、注意事项
1firewalld与iptables不能同时启用,启用其中一个前需先停止另一个,否则会导致规则冲突。
1临时规则重启防火墙或系统后会失效,生产环境中需配置永久规则并重载生效。
1配置规则时需谨慎,避免误封自身SSH连接(尤其是远程服务器),建议先配置允许自身IP访问,再设置严格规则。
1iptables规则按顺序执行,匹配到第一条符合条件的规则后,不再执行后续规则,配置时需注意规则顺序。
1firewalld的--reload命令不会中断现有连接,而--complete-reload和systemctl restart firewalld会中断所有连接,生产环境优先使用--reload。
|(注:文档部分内容可能由 AI 生成)