[title-plane title=”说明”]本文防火墙配置是基于CentOS7进行叙述,其他linux版本仅供参考[/title-plane]

防火墙概述

  • 在 Centos7里有几种防火墙共存: firewalldiptables、 ebtables(基本不用)。
  • 默认是使用 firewalld来管理 netfilter 子系统,不过底层调用的命令仍然是 iptables等。
https://z3.ax1x.com/2021/07/05/R5JtL6.png

firewalld 和 iptables 区别

https://z3.ax1x.com/2021/07/05/R5JARs.png

firewalld 防火墙

firewalld的重要概念 – 区域管理
firewalld将网卡对应到不同的区域(zone),zone默认有9个

https://z3.ax1x.com/2021/07/05/R5YQnP.png https://z3.ax1x.com/2021/07/05/R5Yfnx.png

[c-alert type=”success”]注意: Firewalld的默认区域是 public[/c-alert]

[start-plane type=”2″] 区域

  • 区域就像进入主机之前的安全检査的关口,毎个区域都具有不同程度的限制规则。
  • 可以同时使用多个区域,但是每个区域都必须关联ip和接口。
  • 默认情况下,public区域是默认区域,包含所有网卡。[/start-plane]

Firewalld默认提供的9个zone配置文件。配置文件分别为:

block. xml、 dmz.xml、drop.xml、 external xml、 home. xml、 internal xml、 public. xml、trusted. xml、 work. xml

存放路径: /usr/ib/ firewall/ zones/ 目录下

https://z3.ax1x.com/2021/07/05/R5NDW4.png

firewalld 配置方法

Firewalld的配置方法主要有三种: firewall-configfirewall-cmd 和 直接编辑xml文件
1. firewall-config:图形化工具

https://z3.ax1x.com/2021/07/05/R5UrAf.png

2. firewall-cmd:命令行工具

https://z3.ax1x.com/2021/07/05/R5Uy4S.pnghttps://z3.ax1x.com/2021/07/05/R5Ufun.png

[c-alert type=”success”]允许或者拒绝任意端口/协议           举例:允许或禁用1234端口的TCP流量[/c-alert]

firewall-cmd --zone=public --add-port=1234/tcp --permanent  #允许1234端口的TCP流量
firewall-cmd --zone=public --remove-port=1234/tcp --permanent  #禁止1234端口的TCP流量
  • firewal|-cmd:firewalld命令行工具
  • –ad-port:标识添加的端口
  • –permanent:表示设置为永久
  • –zone:指定到具体的zone配置文件
https://z3.ax1x.com/2021/07/05/R5dTl4.png

[c-alert type=”success”]批量开放或限制端口                        举例:批量开放端口,如从100-500之间的端口都开放[/c-alert]

firewall-cmd --zone=public --add-port=100-500/tcp --permanent
https://z3.ax1x.com/2021/07/05/R5wqgg.png

[c-alert type=”success”]启用或禁用服务                                举例:启用或禁用HTTP服务[/c-alert]

firewall-cmd --zone=public --add-service=http --permanent   #永久允许http服务的流量
firewall-cmd --zone=public --remove-service=http --permanent   #永久禁用http服务流量

https://z3.ax1x.com/2021/07/05/R50lxe.png3. 直接编辑 xml 文件
可以直接修改ⅹm|文件
用户配置目录有:
/etc/firewalld/
/etc/firewalld/services
/etc/firewalld/zones
[c-alert type=”warning”]注意:更改完xml文件后,要使用 firewall-cmd –reload 命令重新进行加载[/c-alert]

iptables 防火墙

iptables 和 firewalld 一样不是真正的防火墙,我们可以将它理解成一个客户端代理,通过这个代理,我们将安全的设定执行到对应的“安全框架”中,这个“安全框架”才是真正的防火墙,即 netfilter。
iptables是按照规则,即网络管理员与定义的条件和方法来处理数据包,如:通过(accept)、丢弃(drop)等。
iptables的结构:iptables→ Tables→ Chains→ Rules,即 tables由 chains组成,而 chains又由rules组成。

https://z3.ax1x.com/2021/07/05/R5rSUI.png

iptables 四表五链

https://z3.ax1x.com/2021/07/05/R5rNI1.pnghttps://z3.ax1x.com/2021/07/05/R5rcdA.png

 

Linux防火墙过滤框架

如图为 Linux防火墙的过滤框架,从图中可以看出,

  • 如果是 外部主机 发送数据包给 防火墙本机,数据将会经过 PREROUTING链 与 INPUT链;
  • 如果是 防火墙本机 发送数据包到 外部主机,数据会经过 OUTPUT链与 POSTROUTING链;
  • 如果防火墙作为路由负责转发数据,则数据将经过 PREROUTING链、 FORWARD链以及POSTROUTING链。
https://z3.ax1x.com/2021/07/05/R5r7Zj.png

iptables 语法构成

iptables [-t 表名] 选项 [链名] [条件] [控制类型]
[root@icq Desktop]# iptables -t filter -I INPUT -p icmp -j REJECT   #阻止ping

-j:数据包的常见控制类型
ACCEPT:允许通过
REJECT:拒绝通过,必要时会给出提示
DROP:直接丢弃,不给出任何回应
LOG:记录日志信息,然后传给下一条规则继续匹配

-p:指定协议类型:tcp、udp、icmp
-m:表示启用扩展功能,一般和-p配合使用

[c-alert type=”warning”]注意
1.不指定表名时,默认指 filter表
2.不指定链名时,默认指表内的所有链
3.除非设置链的默认策略,否则必须指定匹配条件
4.选项、链名、控制类型使用大写字母,其余均为小写字母[/c-alert]

iptables 命令详解

[c-alert type=”success”]iptables 添加新的规则[/c-alert]

示例:
[root@icq Desktop]# iptables -t filter -A INPUT -p tcp -j ACCEPT 
[root@icq Desktop]# iptables -I INPUT -p udp -j ACCEPT 
[root@icq Desktop]# iptables -I INPUT 2 -p icmp -j ACCEPT 

参数: 
-A:在链的末尾追加条规则 
-I:在链的开头,或指定序号,插入一条规则 
-d:指定IP地址 
--dport:知道目的端口

[c-alert type=”success”]iptables 规则查看[/c-alert]

示例:
[root @icq Desktop]# iptables -n -L INPUT

参数:
-L:列出所有的规则条目
-n:以数字形式显示地址、端口等信息
-I:以更详细的方式显示规则信息
https://z3.ax1x.com/2021/07/05/R5omCD.png

[c-alert type=”success”]iptables 删除、清空规则[/c-alert]

示例:
[root@icq Desktop]# iptables -D INPUT 1
[root@icq Desktop]# iptables -F
[root@icq Desktop]# iptables -t 指定表 -F

参数:
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则
https://z3.ax1x.com/2021/07/05/R5TwWD.png