Centos7防火墙

Centos7防火墙

前言:

本来想在系统那里去说防火墙 但防火墙要说的要很多 使用单独做一章文章去讲防火墙~~

在 CentOS 7 中,防火墙是保障系统网络安全的核心组件,默认采用firewalld作为防火墙管理工具(替代了 CentOS 6 的iptables​服务),底层仍基于iptables​内核模块实现规则控制。

iptables

iptables​ 命令的完整格式较为复杂,其核心结构由 命令选项表(table)链(chain)匹配条件目标动作(target) 组成。以下是其完整语法框架及各部分详解:

一、完整语法框架

bash

iptables -A/-I [-t 表名] 命令选项 [链名] [匹配条件] [-j 目标动作]

二、各部分详解

1. 表名(-t table)

指定操作的表(默认操作 filter​ 表),可选值:

filter​:过滤表(默认),用于数据包过滤。
nat​:网络地址转换表,用于端口映射、IP 转发等。
mangle​:修改数据包标记(如 TTL、服务类型)。
raw​:处理未被连接跟踪的数据包(较少用)。

示例:操作 nat 表

bash

iptables -t nat ...
2. 命令选项(管理规则的操作)
选项 功能描述
-A​ 或 --append 在链的末尾添加一条规则
-I​ 或 --insert 在链的指定位置插入一条规则(默认插入到开头,如 iptables -I INPUT 3 ...​ 插入到第 3 位)
-D​ 或 --delete 删除链中的一条规则(可通过规则内容或序号删除,如 iptables -D INPUT 2​ 删除第 2 条)
-R​ 或 --replace 替换链中指定位置的规则(如 iptables -R INPUT 1 ...​ 替换第 1 条)
-L​ 或 --list 列出链中的所有规则
-F​ 或 --flush 清空链中的所有规则(如 iptables -F INPUT​ 清空 INPUT 链)
-Z​ 或 --zero 重置链中规则的数据包和流量计数器(如 iptables -Z INPUT​)
-N​ 或 --new-chain 创建自定义链(如 iptables -N MY_CHAIN​)
-X​ 或 --delete-chain 删除自定义链(需先清空链中规则)
-P​ 或 --policy 设置链的默认策略(如 iptables -P INPUT DROP​)
-E​ 或 --rename-chain 重命名自定义链(如 iptables -E MY_CHAIN NEW_CHAIN​)

常用组合选项(与 -L​ 搭配查看规则):

-n​:以数字形式显示 IP 和端口(不解析服务名)。
-v​:显示详细信息(如数据包计数、流量大小)。
-vv​:更详细的信息(包括 TCP 标志位、TOS 等)。
--line-numbers​:显示规则序号(方便删除 / 替换规则)。

示例:查看 INPUT 链规则(带序号和数字格式)

bash

iptables -L INPUT -n --line-numbers
3. 链名(内置链 + 自定义链)

内置链随表固定,不同表包含的链不同:

filter 表INPUT​(入站)、OUTPUT​(出站)、FORWARD​(转发)。
nat 表PREROUTING​(路由前)、POSTROUTING​(路由后)、OUTPUT​(本机生成的数据包)。
mangle 表PREROUTING​、POSTROUTING​、INPUT​、OUTPUT​、FORWARD​。

自定义链:通过 -N​ 创建,需关联到内置链才能生效(如将规则跳转到自定义链处理)。

4. 匹配条件(过滤数据包的规则)

根据数据包的属性(协议、IP、端口等)设置匹配条件,满足条件则执行目标动作。

(1)基本匹配条件(无需额外模块)
条件 描述
-p​ 或 --protocol 指定协议(如 tcp​、udp​、icmp​、all​),不指定则匹配所有协议。
-s​ 或 --source 匹配源 IP 地址(可带子网掩码,如 192.168.1.0/24​,!10.0.0.5​ 表示排除该 IP)。
-d​ 或 --destination 匹配目标 IP 地址(格式同 -s​)。
-i​ 或 --in-interface 匹配入站网络接口(如 eth0​、lo​,仅用于 INPUT、FORWARD、PREROUTING 链)。
-o​ 或 --out-interface 匹配出站网络接口(仅用于 OUTPUT、FORWARD、POSTROUTING 链)。

示例:拒绝来自 10.0.0.5​ 且通过 eth0​ 接口入站的 TCP 数据包

bash

iptables -A INPUT -i eth0 -s 10.0.0.5 -p tcp -j DROP
(2)扩展匹配条件(需加载模块,通过 -m​ 指定)

需结合 -m 模块名​ 使用,常用模块如下:

tcp 模块-m tcp​):匹配 TCP 协议的细节

--sport​:源端口(如 --sport 22​ 或 --sport 1024:65535​ 表示端口范围)。
--dport​:目标端口(格式同 --sport​)。
--tcp-flags​:匹配 TCP 标志位(如 --tcp-flags SYN,ACK,FIN,RST SYN​ 匹配 SYN 包,用于防 SYN 攻击)。

示例:允许目标端口为 80 的 TCP 流量
bash

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

udp 模块-m udp​):匹配 UDP 协议的端口

--sport​/--dport​:用法同 TCP 模块(如允许 UDP 53 端口的 DNS 流量)

bash

iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT

multiport 模块-m multiport​):匹配多个离散端口(最多 15 个)

--sports​:多个源端口(如 --sports 22,80,443​)。
--dports​:多个目标端口(如 --dports 80,443​)。

示例:允许目标端口为 22、80、443 的 TCP 流量
bash

iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT

icmp 模块-m icmp​):匹配 ICMP 类型(如 ping 包)

--icmp-type​:指定 ICMP 类型(echo-request​ 表示 ping 请求,echo-reply​ 表示 ping 回复)。

示例:允许 ping 请求(禁止 ping 则用 DROP​)
bash

iptables -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT

state 模块-m state​):基于连接状态匹配(依赖内核连接跟踪)

--state​:状态包括 NEW​(新连接)、ESTABLISHED​(已建立连接)、RELATED​(相关连接,如 FTP 数据连接)、INVALID​(无效连接)。

示例:允许已建立和相关的连接(减少规则数量,推荐配置)
bash

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iprange 模块-m iprange​):匹配 IP 地址范围

--src-range​:源 IP 范围(如 192.168.1.10-192.168.1.20​)。
--dst-range​:目标 IP 范围。

示例:拒绝源 IP 在 192.168.1.10-20 的入站流量
bash

iptables -A INPUT -m iprange --src-range 192.168.1.10-192.168.1.20 -j DROP
5. 目标动作(-j target)

当数据包匹配规则时执行的动作,常用动作:

动作 描述
ACCEPT 允许数据包通过,不再匹配后续规则。
DROP 丢弃数据包,不返回任何响应(客户端会超时)。
REJECT 拒绝数据包,并返回 ICMP 错误信息(如 --reject-with icmp-port-unreachable​)。
LOG 将数据包信息记录到系统日志(/var/log/messages​),需配合日志参数(如 --log-prefix "INPUT-DENY: "​ 增加日志前缀),日志后继续匹配后续规则。
DNAT​(仅 nat 表) 目标地址转换(如端口映射,--to-destination 192.168.1.10:80​)。
SNAT​(仅 nat 表) 源地址转换(如内网共享公网 IP,--to-source 203.0.113.5​)。
MASQUERADE​(仅 nat 表) 动态源地址转换(适用于公网 IP 不固定的场景,如拨号上网,--to-ports 1024-65535​ 指定端口范围)。
自定义链名 将数据包跳转到自定义链处理(处理完后返回原链继续匹配)。

示例:记录并拒绝入站的无效连接

bash

iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "INVALID_PACKET: "
iptables -A INPUT -m state --state INVALID -j DROP

三、完整示例

以下是一个典型的服务器防火墙规则配置(仅开放必要端口):

bash

# 清空所有规则
iptables -F
iptables -X

# 设置默认策略
iptables -P INPUT DROP    # 入站默认拒绝
iptables -P OUTPUT ACCEPT  # 出站默认允许
iptables -P FORWARD DROP   # 禁止转发

# 允许回环接口(本地服务通信)
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立和相关的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 开放SSH(22)、HTTP(80)、HTTPS(443)端口
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dports 80,443 -j ACCEPT  # 结合multiport模块

# 允许ping请求
iptables -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT

# 记录被拒绝的入站流量(可选)
iptables -A INPUT -j LOG --log-prefix "DROP_INPUT: "
解刨命令
iptables -I INPUT 2 -p tcp -s 192.168.10.3 -d 192.168.10.6  --dport 80 -j ACCEPT  #允许192.168.10.3:80的TCP数据访问192.168.10.6

-I 		#默认将规则放在最后 再INPUT(表名)后加数字 就是自定义顺序
INPUT 	#入口表格
-p		#自定义协议
-s		#源IP
-d		#目的端口
--dort	#自定义端口
-j		#动作

四、注意事项

规则顺序iptables​ 按规则顺序匹配,先匹配的规则优先生效(例如,若先设置默认拒绝,再开放端口,端口会被阻断)。
模块依赖:扩展匹配条件需内核支持对应的模块(通常默认加载,无需手动处理)。
临时生效:所有规则默认临时生效,重启后丢失,需通过 service iptables save​ 保存到 /etc/sysconfig/iptables​(CentOS 系统)。

掌握完整格式后,可根据实际需求灵活组合匹配条件和动作,实现细粒度的防火墙控制。

firewalld

firewalld​ 是 Linux 系统中用于管理防火墙规则的动态防火墙工具,其核心命令为 firewall-cmd

基本格式

firewall-cmd [--zone=区域名] [--permanent] 操作命令 [参数]
核心组成部分:

--zone=区域名​(可选)
指定操作的防火墙区域(默认区域可通过 firewall-cmd --get-default-zone​ 查看)。
查看所有的区域 firewall-cmd –get-zones
区域是 firewalld 的核心概念,用于对不同网络环境(如 public​、home​、dmz​ 等)设置独立规则。
若不指定,默认操作当前生效的区域。
--permanent​(可选)
表示规则为 “永久生效”(需重新加载防火墙后生效)。
若不添加此参数,规则仅 “临时生效”(重启防火墙后失效)。
操作命令
用于定义具体操作(如添加规则、查询状态、重新加载等),是 firewall-cmd​ 的核心部分。
参数
根据操作命令的不同,搭配具体参数(如端口、服务、IP 等)。

常用操作命令及示例

1. 区域相关

查看所有区域:firewall-cmd --get-zones
查看默认区域:firewall-cmd --get-default-zone
切换默认区域:firewall-cmd --set-default-zone=public
查看指定区域规则:firewall-cmd --zone=public --list-all

2. 规则管理(添加 / 删除允许的服务 / 端口)

添加允许的服务(如 HTTP 服务,对应端口 80):
bash

# 临时生效
firewall-cmd --zone=public --add-service=http
# 永久生效(需重新加载)
firewall-cmd --zone=public --add-service=http --permanent

添加允许的端口(如 TCP 端口 3306):

bash

# 临时生效
firewall-cmd --zone=public --add-port=3306/tcp
# 永久生效
firewall-cmd --zone=public --add-port=3306/tcp --permanent

删除规则(将 --add​ 改为 --remove​):

bash

firewall-cmd --zone=public --remove-port=3306/tcp --permanent
3. 重载与重启

重新加载规则(使永久配置生效):
bash

firewall-cmd --reload

重启防火墙服务:
bash

systemctl restart firewalld

关键区别:临时规则 vs 永久规则

类型 命令是否带 --permanent 生效时机 失效时机
临时规则 不带 立即生效 防火墙重启或重载后
永久规则 需执行 --reload​ 后 手动删除或修改后重载
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容