【LinuxShell】linux防火墙之firewalld防火墙

╰+攻爆jí腚メ 2024-04-06 14:41 173阅读 0赞

文章目录

  • 前言
  • 一、firewalld概述
      1. 概念
      1. firewalld和iptables的关系
  • 二、firewalld网络区域
      1. firewalld区域的概念
      1. firewalld预定义区域
      1. firewalld数据包的处理
      • 3.1 firewalld数据处理流程
      • 3.2 firewalld检查数据包的源地址的规则
      • 3.3 总结
  • 三、firewalld防火墙的配置方法
      1. 使用firewall-cmd命令行工具
      • 1.1 区域管理
      • 1.2 服务管理
      • 1.4 端口管理
      • 1.5 协议管理
      • 1.6 设置地址转换
    • 2.使用firewall-config图形工具
    • 3.编写/etc/firewalld/中的配置文件

前言

  在Internet中,企业通过架设各种应用系统来为用户提供各种网络服务,比如Web网站、电子邮件、FTP服务器等。而且大部分都是使用Linux服务器进行搭建的。那么,想要保护这些服务器,过滤非授权的访问,甚至恶意进入内部网络 。就需要使用到——防火墙

  防火墙除了硬件防火墙之外,Linux系统的防火墙也十分强大,今天主要认识CentOS 7系统的防火墙——firewalld

一、firewalld概述

1. 概念

  firewalld防火墙是centos7系统默认的防火墙管理工具,取代了之前的iptables防火墙,也是工作在网络层,属于包过滤防火墙。

  firewalld和liptables都是用来管理防火墙的工具(属于用户态)来定义防火墙的各种规则功能,内部结构都指向netfiter网络过滤子系统(属于内核态)来实现包过滤就火墙功能。

  firewalld提供了支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具。它支持IPv4、IPv6防火墙设置以及以太网桥(在某些高级服务可能会用到,比如云计算〉,并且拥有两种配置模式:运行时配置与永久配置。

2. firewalld和iptables的关系

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PnGeovV6-1684743754440)(C:\\Users\\86138\\AppData\\Roaming\\Typora\\typora-user-images\\image-20230522143951227.png)\]

基于方式不同

  iptables主要是基于接口,来设置规则,从而判断网络的安全性。

  firewalld是基于区域,根据不同的区域来设置不同的规则,从而保证网络的安全。与硬件防火墙的设置相类似。

配置文件所在位置不同

  iptables 在/etc/sysconfig/iptables 中储存配置,

  firewalld将配置储存在/etc/firewalld/(优先加载)和/usr/lib/firewalld/(默认的配置文件)中的各种XML文件里。

对规则修改不同

  使用iptables 每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables里读取所有新的规则。(规则修改完后会立即生效)

  使用firewalld 却不会再创建任何新的规则,仅仅运行规则中的不同之处。因此firewalld可以在运行时间内,改变设置而不丢失现行连接。

防火墙类型不同

  iptables防火墙类型为静态防火墙。可以理解为iptables的规则就是一张表,对表进行增删改查操作。

  firewalld防火墙类型为动态防火墙。可以理解为firewalld的规则是一块区域,可以更换不同的区域进行增删改查操作。

二、firewalld网络区域

1. firewalld区域的概念

  firewalld防火墙为了简化管理,将所有网络流量分为多个区域(zone)。然后根据数据包的源IP地址或传入的网络接口等条件将流量传入相应区域。每个区域都定义了自己打开或者关闭的端口和服务列表。

2. firewalld预定义区域

  • 区域如同进入主机的安全门,每个区域都具有不同限制程度的规则,只会允许符合规则的流量传入。
  • 可以根据网络规模,使用一个或多个区域,但是任何一个活跃区域至少需要关联源地址或接口。
  • 默认情况下,public区域是默认区域,包含所有接口(网卡)。
  • 最终一个区域的安全程度是取决于管理员在此区域中设置的规则。

  如果数据包的源地址与区域绑定,则此数据包不管从那个网卡传入都使用改区域的规则过滤数据包。如果数据包的源地址未与区域绑定,则此数据从哪个网卡传入则使用该网卡绑定的区域规则过滤数据包。














































区域名 含义
trusted(信任区域) 允许所有的传入流量。
public(公共区域) 默认允许与ssh或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。是新添加网络接口的默认区域。
external(外部区域) 默认允许与 ssh预定义服务匹配的传入流量,其余均拒绝。
默认将通过此区域转发的IPv4传出流量将进行地址伪装(MASQUERADE),可用于为路由器启用了伪装功能的外部网络。
home(家庭区域) 默认允许与ssh、mdns、samba-client或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。
internal(内部区域) 默认值时与home区域相同。
work(工作区域) 允许与 ssh、dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。
dmz(隔离区域也称为非军事区域) 默认允许与 ssh预定义服务匹配的传入流量,其余均拒绝。
block(限制区域) 拒绝所有传入流量。
drop(丢弃区域) 丢弃所有传入流量,并且不产生包含ICMP的错误响应。

  注意:默认情况的默认区域为public(默认与所有网卡绑定),要激活某个区域,就需要将区域与源地址网卡绑定。

3. firewalld数据包的处理

3.1 firewalld数据处理流程

  firewalld对于进入系统的数据包,会根据数据包的源I地址或传入的网络接口等条件,将数据流量转入相应区域的防火靖规则。对于进入系统的数据包,首先捡查的就是其源地址。

3.2 firewalld检查数据包的源地址的规则

  若源地址关联到特定的区域(即源地址或接口绑定的区域有冲突),则执行该区域所制定的规则。

  若源地址未关联到特定的区域(即源地址或接口绑定的区域没有冲突〉,则使用传入网络接口的区域并执行该区域所制定的规则。

  若网络接口也未关联到特定的区域(即源地址或接口都没有绑定特定的某个区域),则使用默认区域并执行该区域所制定的规则。

3.3 总结

  先检查传入数据包的源地址,若源地址与特定区域绑定,则使用该区域的规则过滤数据包。若源地址与特定区域没有绑定,且数据包传入网卡与特定区域绑定,则使用绑定网卡的区域的规则过滤数据包。若也没有区域绑定网卡,则使用默认区域的规则过滤数据包。

三、firewalld防火墙的配置方法

1. 使用firewall-cmd命令行工具

  1. --get-default-zone :显示当前默认区域
  2. --set-default-zone=<zone> :设置默认区域
  3. --get-active-zones :显示当前正在使用的区域及其对应的网卡接口
  4. --get-zones :显示所有可用的区域
  5. --get-zone-of-interface=<interface> :显示指定接口绑定的区域
  6. --zone=<zone> --add-interface=<interface> :为指定接口绑定区域
  7. --zone=<zone> --change-interface=<interface> :为指定的区域更改绑定的网络接口
  8. --zone=<zone> --remove-interface=<interface> :为指定的区域删除绑定的网络接口
  9. --list-all-zones :显示所有区域及其规则
  10. [--zone=<zone>] --list-all :显示所有指定区域的所有规则,省略--zone=<zone>时表示仅对默认区域操作
  11. [--zone=<zone>] --list-services :显示指定区域内允许访问的所有服务
  12. [--zone=<zone>] --add-service=<service> :为指定区域设置允许访问的某项服务
  13. [--zone=<zone>] --remove-service=<service> :删除指定区域已设置的允许访问的某项服务
  14. [--zone=<zone>] --list-ports :显示指定区域内允许访问的所有端口号
  15. [--zone=<zone>] --add-port=<portid>[-<portid>]/<protocol> :为指定区域设置允许访问的某个/某段端口号(包括协议名)
  16. [--zone=<zone>] --remove-port=<portid>[-<portid>]/<protocol> :删除指定区域已设置的允许访问的端口号(包括协议名)
  17. [--zone=<zone>] --list-icmp-blocks :显示指定区域内拒绝访问的所有 ICMP 类型
  18. [--zone=<zone>] --add-icmp-block=<icmptype> :为指定区域设置拒绝访问的某项 ICMP 类型
  19. [--zone=<zone>] --remove-icmp-block=<icmptype> :删除指定区域已设置的拒绝访问的某项ICMP类型
  20. firewall-cmd --get-icmptypes :显示所有 ICMP 类型

1.1 区域管理

网卡接口显示操作

  1. ###显示所有可用的区域
  2. [root@localhost ~]# firewall-cmd --get-zones
  3. block dmz drop external home internal public trusted work
  4. ###显示当前默认区域
  5. [root@localhost ~]# firewall-cmd --get-default-zone
  6. public
  7. ###显示当前正在使用的区域及其对应的网卡接口
  8. [root@localhost ~]# firewall-cmd --get-active-zones
  9. public
  10. interfaces: ens32 ens33
  11. ###显示指定ens33接口绑定的区域
  12. [root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
  13. public
  14. ###显示指定ens32接口绑定的区域
  15. [root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32
  16. public

网卡接口添加与移除操作

  1. ###为指定的区域删除绑定的网络接口
  2. [root@localhost ~]# firewall-cmd --remove-interface=ens33
  3. success
  4. ###显示指定接口绑定的区域
  5. [root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
  6. no zone
  7. ###为指定接口绑定区域
  8. [root@localhost ~]# firewall-cmd --add-interface=ens33 --zone=work
  9. success
  10. ###显示指定接口绑定的区域
  11. [root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
  12. work
  13. ###显示当前正在使用的区域及其对应的网卡接口
  14. [root@localhost ~]# firewall-cmd --get-active-zones
  15. work
  16. interfaces: ens33
  17. public
  18. interfaces: ens32

网卡接口修改操作

  1. ###为指定的区域更改绑定的网络接口
  2. [root@localhost ~]# firewall-cmd --change-interface=ens33 --zone=home
  3. success
  4. [root@localhost ~]# firewall-cmd --get-active-zones
  5. home
  6. interfaces: ens33
  7. public
  8. interfaces: ens32

源地址操作

  1. ###为指定源地址绑定区域
  2. [root@localhost ~]# firewall-cmd --add-source=2.2.2.2 --zone=work
  3. success
  4. ###显示当前正在使用的区域及其对应的网卡接口或者源地址
  5. [root@localhost ~]# firewall-cmd --get-active-zones
  6. home
  7. interfaces: ens33
  8. work
  9. sources: 2.2.2.2
  10. public
  11. interfaces: ens32
  12. ###为指定的区域更改绑定的源地址
  13. [root@localhost ~]# firewall-cmd --change-source=2.2.2.2 --zone=internal
  14. success
  15. ###显示当前正在使用的区域及其对应的网卡接口或者源地址
  16. [root@localhost ~]# firewall-cmd --get-active-zones
  17. home
  18. interfaces: ens33
  19. internal
  20. sources: 2.2.2.2
  21. public
  22. interfaces: ens32
  23. ###为指定的区域移除绑定的源地址
  24. [root@localhost ~]# firewall-cmd --remove-source=2.2.2.2 --zone=internal
  25. success
  26. ###显示当前正在使用的区域及其对应的网卡接口或者源地址
  27. [root@localhost ~]# firewall-cmd --get-active-zones
  28. home
  29. interfaces: ens33
  30. public
  31. interfaces: ens32

显示所有区域及其规则

  1. [root@localhost ~]# firewall-cmd --list-all
  2. public (active)
  3. target: default
  4. icmp-block-inversion: no
  5. interfaces: ens32
  6. sources:
  7. services: dhcpv6-client ssh
  8. ports:
  9. protocols:
  10. masquerade: no
  11. forward-ports:
  12. source-ports:
  13. icmp-blocks:
  14. rich rules:
  15. [root@localhost ~]# firewall-cmd --list-all-zones
  16. block
  17. target: %%REJECT%%
  18. icmp-block-inversion: no
  19. interfaces:
  20. sources:
  21. services:
  22. ports:
  23. protocols:
  24. masquerade: no
  25. forward-ports:
  26. source-ports:
  27. icmp-blocks:
  28. rich rules:
  29. dmz
  30. target: default
  31. icmp-block-inversion: no
  32. interfaces:
  33. sources:
  34. services: ssh
  35. ports:
  36. protocols:
  37. masquerade: no
  38. forward-ports:
  39. source-ports:
  40. icmp-blocks:
  41. rich rules:
  42. drop
  43. target: DROP
  44. icmp-block-inversion: no
  45. interfaces:
  46. sources:
  47. services:
  48. ports:
  49. protocols:
  50. masquerade: no
  51. forward-ports:
  52. source-ports:
  53. icmp-blocks:
  54. rich rules:
  55. external
  56. target: default
  57. icmp-block-inversion: no
  58. interfaces:
  59. sources:
  60. services: ssh
  61. ports:
  62. protocols:
  63. masquerade: yes
  64. forward-ports:
  65. source-ports:
  66. icmp-blocks:
  67. rich rules:
  68. home (active)
  69. target: default
  70. icmp-block-inversion: no
  71. interfaces: ens33
  72. sources:
  73. services: dhcpv6-client mdns samba-client ssh
  74. ports:
  75. protocols:
  76. masquerade: no
  77. forward-ports:
  78. source-ports:
  79. icmp-blocks:
  80. rich rules:
  81. internal
  82. target: default
  83. icmp-block-inversion: no
  84. interfaces:
  85. sources:
  86. services: dhcpv6-client mdns samba-client ssh
  87. ports:
  88. protocols:
  89. masquerade: no
  90. forward-ports:
  91. source-ports:
  92. icmp-blocks:
  93. rich rules:
  94. public (active)
  95. target: default
  96. icmp-block-inversion: no
  97. interfaces: ens32
  98. sources:
  99. services: dhcpv6-client ssh
  100. ports:
  101. protocols:
  102. masquerade: no
  103. forward-ports:
  104. source-ports:
  105. icmp-blocks:
  106. rich rules:
  107. trusted
  108. target: ACCEPT
  109. icmp-block-inversion: no
  110. interfaces:
  111. sources:
  112. services:
  113. ports:
  114. protocols:
  115. masquerade: no
  116. forward-ports:
  117. source-ports:
  118. icmp-blocks:
  119. rich rules:
  120. work (active)
  121. target: default
  122. icmp-block-inversion: no
  123. interfaces:
  124. sources: 1.1.1.1
  125. services: dhcpv6-client ssh
  126. ports:
  127. protocols:
  128. masquerade: no
  129. forward-ports:
  130. source-ports:
  131. icmp-blocks:
  132. rich rules:

显示所有指定区域的所有规则

  1. [root@localhost ~]# firewall-cmd --list-all
  2. public (active)
  3. target: default
  4. icmp-block-inversion: no
  5. interfaces: ens32
  6. sources:
  7. services: dhcpv6-client ssh
  8. ports:
  9. protocols:
  10. masquerade: no
  11. forward-ports:
  12. source-ports:
  13. icmp-blocks:
  14. rich rules:
  15. [root@localhost ~]# firewall-cmd --list-all --zone=work
  16. work (active)
  17. target: default
  18. icmp-block-inversion: no
  19. interfaces:
  20. sources: 1.1.1.1
  21. services: dhcpv6-client ssh
  22. ports:
  23. protocols:
  24. masquerade: no
  25. forward-ports:
  26. source-ports:
  27. icmp-blocks:
  28. rich rules:

省略--zone=<zone>时表示仅对默认区域操作。

1.2 服务管理

  1. ###显示默认区域(public)内允许访问的所有服务
  2. [root@localhost ~]# firewall-cmd --list-services
  3. dhcpv6-client ssh
  4. ###为默认区域(public)设置允许访问的某项服务
  5. [root@localhost ~]# firewall-cmd --add-service=http
  6. success
  7. ###显示默认区域(public)内允许访问的所有服务
  8. [root@localhost ~]# firewall-cmd --list-services
  9. dhcpv6-client http ssh
  10. ###显示指定区域(home)内允许访问的所有服务
  11. [root@localhost ~]# firewall-cmd --list-services --zone=home
  12. dhcpv6-client mdns samba-client ssh
  13. ###为指定区域(home)设置允许访问的某项服务
  14. [root@localhost ~]# firewall-cmd --add-service=http --zone=home
  15. success
  16. ###显示指定区域(home)内允许访问的所有服务
  17. [root@localhost ~]# firewall-cmd --list-services --zone=home
  18. dhcpv6-client http mdns samba-client ssh
  19. ###删除指定区域(home)已设置的允许访问的某项服务
  20. [root@localhost ~]# firewall-cmd --remove-service=http --zone=home
  21. success
  22. ###显示指定区域(home)内允许访问的所有服务
  23. [root@localhost ~]# firewall-cmd --list-services --zone=home
  24. dhcpv6-client mdns samba-client ssh

  注意:一个区域可以绑定多个网卡或者多个源地址,一个网卡或者一个源地址只能绑定一个区域。

  如果想要同时添加多个服务可以使用以下方式

  1. [root@localhost ~]# firewall-cmd --add-service=ftp --add-service=http
  2. success
  3. [root@localhost ~]# firewall-cmd --list-services
  4. dhcpv6-client ftp http ssh

  以上方式只适用于少服务的多个添加,较为麻烦。如果服务添加的个数较多,可以使用{}用逗号进行分隔:

  1. [root@localhost ~]# firewall-cmd --list-services --zone=work
  2. dhcpv6-client ssh
  3. [root@localhost ~]# firewall-cmd --add-service={ftp,http} --zone=work
  4. success
  5. [root@localhost ~]# firewall-cmd --list-services --zone=work
  6. dhcpv6-client ftp http ssh

  以上操作运行时配置会立即生效,但是此方式是临时生效,重启firewalld服务后即失效。可以在firiewall-cmd的命令后面添加--permanent选项(此选项标识设置成永久生效),将之前的配置都转化成永久配置,重新加载防火墙规则时才会生效。

  1. firewall-cmd --add-service={ftp,http} --zone=work -permanent
  2. ###重启防火墙
  3. firewall-cmd --reload systemctl restart firewalld

  若不带有-permanent选项,表示用于设置运行时规则,但是这些规则在系统或firewalld服务重启、停止时配置将失效。所以可以将当前的运行时配置写入规则配置文件中,使之成为永久性配置。

  1. firewall-cmd --add-service={ftp,http} --zone=work --runtime-to-permanent

1.4 端口管理

  1. ###显示指定区域内允许访问的所有端口号
  2. [root@localhost ~]# firewall-cmd --list-ports --zone=home
  3. ###为指定区域设置允许访问的tcp协议的80端口
  4. [root@localhost ~]# firewall-cmd --add-port=80/tcp --zone=home
  5. success
  6. ###显示指定区域内允许访问的所有端口号
  7. [root@localhost ~]# firewall-cmd --list-ports --zone=home
  8. 80/tcp
  9. ### 删除指定区域已设置的允许访问的端口号(包括协议名)
  10. [root@localhost ~]# firewall-cmd --remove-port=80/tcp --zone=home
  11. success
  12. ###显示指定区域内允许访问的所有端口号
  13. [root@localhost ~]# firewall-cmd --list-ports --zone=home

1.5 协议管理

  1. ###显示所有 ICMP 类型
  2. [root@localhost ~]# firewall-cmd --get-icmptypes
  3. address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option
  4. ###为指定区域设置拒绝访问的某项 ICMP 类型
  5. [root@localhost ~]# firewall-cmd --add-icmp-block=echo-request
  6. success
  7. ###显示指定区域内拒绝访问的所有 ICMP 类型
  8. [root@localhost ~]# firewall-cmd --list-icmp-blocks
  9. echo-request
  10. ###为指定区域设置拒绝访问的某项 ICMP 类型
  11. [root@localhost ~]# firewall-cmd --add-icmp-block=destination-unreachable
  12. success
  13. ###显示指定区域内拒绝访问的所有 ICMP 类型
  14. [root@localhost ~]# firewall-cmd --list-icmp-blocks
  15. echo-request destination-unreachable
  16. 删除指定区域已设置的拒绝访问的某项ICMP类型
  17. [root@localhost ~]# firewall-cmd --remove-icmp-block=destination-unreachable
  18. success
  19. ###显示指定区域内拒绝访问的所有 ICMP 类型
  20. [root@localhost ~]# firewall-cmd --list-icmp-blocks
  21. echo-request

ICMP类型协议默认放通所有,拒绝个别。

1.6 设置地址转换

设置SNAT

  1. [root@localhost ~]# firewall-cmd --zone=public --direct --passthrough ipv4 -t nat -A POSTROUTING -s 192.168.145.0/24 -j SNAT --to-source 12.0.0.1
  2. success
  3. [root@localhost ~]# iptables -nL -t nat
  4. Chain PREROUTING (policy ACCEPT)
  5. target prot opt source destination
  6. Chain INPUT (policy ACCEPT)
  7. target prot opt source destination
  8. Chain OUTPUT (policy ACCEPT)
  9. target prot opt source destination
  10. Chain POSTROUTING (policy ACCEPT)
  11. target prot opt source destination
  12. SNAT all -- 192.168.145.0/24 0.0.0.0/0 to:12.0.0.1

设置 DNAT

  1. [root@localhost ~]# firewall-cmd --zone=public --direct --passthrough ipv4 -t nat -A PREROUTING -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.145.15
  2. success
  3. [root@localhost ~]# iptables -nL -t nat
  4. Chain PREROUTING (policy ACCEPT)
  5. target prot opt source destination
  6. DNAT tcp -- 0.0.0.0/0 12.0.0.1 tcp dpt:80 to:192.168.145.15

2.使用firewall-config图形工具

  firewall-config图形化配置工具支持防火墙所有的特性,系统管理员可以通过它来改变系统或用户策略。通过firewall-config图形化配置工具,可以实现配置防火墙允许通过的服务、端口、伪装、端口转发、ICMP 过滤器等功能。

  1. 方式1
  2. [root@localhost ~]# firewall-config
  3. 方式2
  4. CnetOS7系统中单击"应用程序-->杂项-->防火墙"打开

在这里插入图片描述

  在图形化界面可以根据需要选择服务类型,如果想要配置永久设置可以选择上方的配置项进行更改。

在这里插入图片描述

3.编写/etc/firewalld/中的配置文件

  1. [root@localhost ~]# cd /etc/firewalld/
  2. [root@localhost firewalld]# ls
  3. firewalld.conf icmptypes lockdown-whitelist.xml zones
  4. helpers ipsets services
  5. [root@localhost firewalld]# cd zones/
  6. [root@localhost zones]# ls
  7. public.xml public.xml.old
  8. [root@localhost zones]# vim public.xml
  9. <?xml version="1.0" encoding="utf-8"?>
  10. <zone>
  11. <short>Public</short>
  12. <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  13. <service name="ssh"/>
  14. <service name="dhcpv6-client"/>
  15. </zone>

此方式较为麻烦,不建议使用。

发表评论

表情:
评论列表 (有 0 条评论,173人围观)

还没有评论,来说两句吧...

相关阅读

    相关 firewalld防火墙

    1)firewalld概述 防火墙是指设置在不同网络与网络安全域之间的一系列部件的组合,也是不同安全域之间的信息的唯一出口。通过检测、限制并更改跨越防火墙的数据流,尽可能