FirewallD的使用小结

FirewallD的使用小结

#

FirewallD简介

FirewallD 是 iptables 的前端控制器 用于实现持久的网络流量规则
与直接控制 iptables 相比 使用 FirewallD 有两个主要区别

  • FirewallD 使用区域和服务而不是链式规则
  • FirewallD 动态管理规则集 允许更新规则而不破坏现有会话和连接
  • FirewallD 默认是拒绝的 需要设置以后才能放行 而 iptables 相反

FirewallD 自身并不具备防火墙的功能 而是和 iptables 一样需要通过内核的 Netfilter *来实现
也就是说 FirewallD 和 iptables 一样 它们的作用都用于维护规则
而真正使用规则干活的是内核的 *
Netfilter

只不过 FirewallD 和 iptables 的结果以及使用方法不一样

可理解为 FirewallD 是 iptables 的一个封装
FirewallD的使用本质是调用了ip 更容易管理 iptables 规则
iptables 命令仍可用于 FirewallD「不推荐」

题外话
博主目前的两台服务器都是CentOS7 已内置FirewallD
其中一台是从Ubuntu16.04LTS转的
Ubuntu配置防火墙可以使用 ufw 「Uncomplicated FireWall」
也是 iptables 的封装

区域管理

通过将网络划分成不同的区域
制定出不同区域之间的访问控制策略来控制不同程序区域间传送数据流

初始化区域

  • 阻塞区域(block):任何传入的网络数据包都将被阻止
  • 工作区域(work):相信网络上的其他计算机 不会损害你的计算机
  • 家庭区域(home):相信网络上的其他计算机 不会损害你的计算机
  • 公共区域(public):不相信网络上的任何计算机 只有选择接受传入的网络连接
  • 隔离区域(DMZ):也称为非军事区域 内外网络之间增加的一层网络 起到缓冲作用 对于隔离区域 只有选择接受传入的网络连接
  • 信任区域(trueted):所有网络连接都可以接受
  • 丢弃区域(drop):任何传入的网络连接都被拒绝
  • 内部区域(internal):信任网络上的其他计算机 不会损害你的计算机 只选择接受传入的网络连接
  • 外部区域(external):不相信网络上的其他计算机 不会损害你的计算机 只选择接受传入的网络连接

firewalld的默认区域是public


# 安装与管理 #### FirewallD配置方法
  • firewall-config(图形化工具)「需安装firewalld-config」
  • firewall-cmd(命令行工具)「推荐」
  • 直接编辑XML文件 「除非是非常特殊的配置 日常使用不推荐」

配置文件位于两个目录中:

  • /usr/lib/firewalld 下保存默认配置 如默认区域和公用服务 避免修改它们 因为每次 firewall 软件包更新时都会覆盖这些文件
  • /etc/firewalld 下保存系统配置文件 这些文件将覆盖默认配置。

firewalld默认提供了九个zone配置文件
在/usr/lib/firewalld/zones目录下 分别是

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

安装

1
yum install firewalld

FirewallD管理

1
2
3
4
5
6
# 开启|停止|重启 FirewallD
systemctl start|stop|restart firewalld
# 开启|禁止 开机自启动
systemctl enable|disable firewalld
# 重新加载 FirewallD 配置
firewall-cmd --reload

检查防火墙状态

1
2
3
4
# 查看防火墙状态
firewall-cmd --state
# 查看firewalld守护进程的
systemctl status firewalld

配置集 「重要」

“运行时” 和 “持久” 「本文所有配置均使用 运行时配置集
在系统重新启动或重新启动 FirewallD 时 不会保留运行时的配置更改
而对持久配置集的更改不会应用于正在运行的系统
添加并激活持久性规则的方法有两种

1
2
3
4
5
6
7
8
9
# --permanent 标志 为添加持久配置

# 方法一 将规则同时添加到持久规则集和运行时规则集中
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=http

# 方法二 将规则添加到持久规则集中并重新加载 FirewallD 无需断开连接更新防火墙规则
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload

防火墙的区域管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看默认区域
firewall-cmd --get-default-zone
# 修改默认区域
firewall-cmd --set-default-zone=public
# 查看你网络接口使用的区域
firewall-cmd --get-active-zones
# 获取特定区域的所有配置
firewall-cmd --zone=public --list-all
# 获取所有区域的所有配置
firewall-cmd --list-all-zones
# 查看指定接口所属区域
firewall-cmd --get-zone-of-interface=eth0
# 将接口添加到区域 默认接口都在public
firewall-cmd --zone=public --add-interface=eth0
# 拒绝|开启 所有包
firewall-cmd --panic-on|off
# 查看是否拒绝所有包
firewall-cmd --query-panic
# 需要断开连接 类似重启服务 「推荐使用 --reload 可动态」
firewall-cmd --complete-reload
# 查看所有打开的端口
firewall-cmd --zone=public --list-ports

服务管理

FirewallD 可以根据特定网络服务的预定义规则来允许相关流量
可以创建自己的自定义系统规则 并将它们添加到任何区域

默认支持的服务的配置文件位于 /usr/lib /firewalld/services
用户创建的服务文件在 /etc/firewalld/services

1
2
3
4
5
6
7
8
# 查看默认可用服务 
# 也可在 /usr/lib/firewalld/services/ 目录下查看
firewall-cmd --get-services

# 启用HTTP服务 确保服务存在
firewall-cmd --zone=public --add-service=http
# 禁用HTTP服务 确保服务存在
firewall-cmd --zone=public --remove-service=http

允许或者拒绝任意端口/协议

1
2
3
# 允许或者禁用1233端口的TCP流量
firewall-cmd --zone=public --add-port=1233/tcp
firewall-cmd --zone=public --remove-port=1233/tcp

伪装IP管理

1
2
3
4
5
6
# 检查是否允许伪装IP
firewall-cmd --query-masquerade
# 允许防火墙伪装IP
firewall-cmd --add-masquerade
# 禁止防火墙伪装IP
firewall-cmd --remove-masquerade

端口转发

1
2
3
4
5
6
7
8
9
10
# 将80端口的TCP流量转发到1233端口
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=1233

# 将端口转发到另外一台服务器上
# 首先在需要的区域中激活 masquerade 允许防火墙伪装IP 否则转发会失效
firewall-cmd --zone=public --add-masquerade
# 将本地80端口的TCP流量转发到指定ip的8080端口 需保证端口都在监听状态
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=133.133.133.133
# 禁止本地80端口的TCP流量转发到指定ip的8080端口
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=133.133.133.133

丰富规则

**

1
2
3
4
5
6
7
# 列出丰富规则
firewall-cmd --list-rich-rules

# 添加丰富规则 以只允许IP 133.133.133.133 访问本地3306为例子实现
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="133.133.133.133" port protocol="tcp" port="3306" accept"
# 删除丰富规则 同样的例子
firewall-cmd --zone=public --remove-rich-rule="rule family="ipv4" source address="133.133.133.133" port protocol="tcp" port="3306" accept"

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×