firewall

159 阅读9分钟

一、firewall

1.firewalld 和 iptables service 之间最本质的不同

  • iptables service 在 /etc/sysconfig/iptables 中储存配置,而 firewalld 将配置储存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件里。
  • 使 用 iptables service 每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables 里读取所有新的规则,然而使用 firewalld 却不会再创建任何新的规则;仅仅运行规则中的不同之处。因此,firewalld 可以在运行时间内,改变设置而不丢失现行连接。
  • firewall使用的是区域的概念:没有iptables的四表五链。

2.区域:

区域说明
trusted (信任区域)可接收所有的网络连接,如果规则都没有匹配上,则放行
public (公共区域)规则匹配成功,则放行,或与 ssh 或 dhcpv6-client 预定义服务匹配,否则拒绝流量传入, 在公共区域内,不能相信网络内的其他计算机不会对计算机造成危害,只能接收经过选择的连接。 并且,该区域是新添加网络接口的默认区域
work (工作区域)规则匹配成功,则放行,或与 ssh、ipp-client、dhcpv6-client 预定义服务匹配,否则拒绝流量传入,用于工作区。 相信网络内的其他计算机不会危害计算机,仅接收经过选择的连接
home (家庭区域)规则匹配成功,则放行,或与 ssh、ipp-client、mdns、samba-client、dhcpv6-client预定义服务匹配, 否则拒绝流量传入,用于家庭网络。 信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接
internal (内部区域)规则匹配成功,则放行,或与 ssh、ipp-client、mdns、samba-client、dhcpv6-client预定义服务匹配, 否则拒绝流量传入,用于内部网络。 信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接
external (外部区域)规则匹配成功,则放行,或与 ssh 预定义服务匹配,否则拒绝流量传入。 通过此区域转发的 IPv4 传出流量将进行地址伪装,可用于为路由器启用了伪装功能的外部网络
dmz (隔离区域也称为非军事区域)除非与传出的流量相关,或与 ssh 预定义服务匹配,否则拒绝流量传入
block (限制区域)规则匹配成功,则放行,否则拒绝所有传入流量
drop (丢弃区域)规则匹配成功,则放行,否则丢弃所有传入流量, 并且不产生包含 ICMP(Internet Control Message Protocol,互联网控制报文协议)的错误响应
选项说明
--get-default-zone显示网络连接或接口的默认区域
--set-default-zone=<zone>设置网络连接或接口的默认区域
--get-active-zones显示已激活的所有区域
--get-zone-of-interface=<interface>显示指定接口绑定的区域
--zone=<zone> --add-interface=<interface>为指定接口绑定区域
--zone=<zone> --change-interface=<interface>为指定的区域更改绑定的网络接口
--zone=<zone> --remove-interface=<interface>为指定的区域删除绑定的网络接口
--list-all-zones显示所有区域及其规则
[--zone=<zone>] --list-all显示所有指定区域的所有规则,省略--zone=<zone>时表示仅对默认区域操作

3.区域查看:

  1. 1.关闭iptables或者清空规则
  2. systemctl stop iptables
  3. --------------------------------------
  4. iptables -F 清空filter
  5. iptables -t nat -F 清空nat表
  6. ``
  7. 2。开启firewalld服务
  8. systemctl start firewalld
  9. ``
  10. 3. 查看所有的区域
  11. firewall-cmd --get-zones #查看所有区域

image.png

4、查看当前网卡所在区域:

  1. firewall-cmd --get-active-zones #查看区域

image.png

5、查看默认区域设置:

  1. firewall-cmd --get-default-zone

image.png

6、查看所有区域规则:

  1. firewall-cmd --list-all-zones

  2. block

  3. target: %%REJECT%%

  4. icmp-block-inversion: no

  5. interfaces:

  6. sources:

  7. services:

  8. ports:

  9. protocols:

  10. masquerade: no

  11. forward-ports:

  12. source-ports:

  13. icmp-blocks:

  14. rich rules:

  15. ``

  16. ``

  17. dmz

  18. target: default

  19. icmp-block-inversion: no

  20. interfaces:

  21. sources:

  22. services: ssh

  23. ports:

  24. protocols:

  25. masquerade: no

  26. forward-ports:

  27. source-ports:

  28. icmp-blocks:

  29. rich rules:

  30. ``

  31. ``

  32. drop

  33. target: DROP

  34. icmp-block-inversion: no

  35. interfaces:

  36. sources:

  37. services:

  38. ports:

  39. protocols:

  40. masquerade: no

  41. forward-ports:

  42. source-ports:

  43. icmp-blocks:

  44. rich rules:

  45. ``

  46. ``

  47. external

  48. target: default

  49. icmp-block-inversion: no

  50. interfaces:

  51. sources:

  52. services: ssh

  53. ports:

  54. protocols:

  55. masquerade: yes

  56. forward-ports:

  57. source-ports:

  58. icmp-blocks:

  59. rich rules:

  60. ``

  61. ``

  62. home

  63. target: default

  64. icmp-block-inversion: no

  65. interfaces:

  66. sources:

  67. services: dhcpv6-client mdns samba-client ssh

  68. ports:

  69. protocols:

  70. masquerade: no

  71. forward-ports:

  72. source-ports:

  73. icmp-blocks:

  74. rich rules:

  75. ``

  76. ``

  77. internal

  78. target: default

  79. icmp-block-inversion: no

  80. interfaces:

  81. sources:

  82. services: dhcpv6-client mdns samba-client ssh

  83. ports:

  84. protocols:

  85. masquerade: no

  86. forward-ports:

  87. source-ports:

  88. icmp-blocks:

  89. rich rules:

  90. ``

  91. ``

  92. public (active)

  93. target: default

  94. icmp-block-inversion: no

  95. interfaces: ens33 ens37

  96. sources:

  97. services: dhcpv6-client ssh

  98. ports:

  99. protocols:

  100. masquerade: no

  101. forward-ports:

  102. source-ports:

  103. icmp-blocks:

  104. rich rules:

  105. ``

  106. ``

  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. ``

  121. ``

  122. work

  123. target: default

  124. icmp-block-inversion: no

  125. interfaces:

  126. sources:

  127. services: dhcpv6-client ssh

  128. ports:

  129. protocols:

  130. masquerade: no

  131. forward-ports:

  132. source-ports:

  133. icmp-blocks:

  134. rich rules:

7、修改区域:

  1. firewall-cmd --set-default-zone=区域

8、端口添加

  1. firewall-cmd --list-ports 显示当前已经开放的端口
  2. ``
  3. firewall-cmd --add-port=端口号/协议
  4. firewall-cmd --add-port=80/tcp
  5. ``
  6. firewall-cmd --list-all #显示当前区域的所有规则
  7. ``
  8. firewall-cmd --remove-port=端口号/协议 #移除已开放的端口

9、服务添加

  1. firewall-cmd --list-services #显示已允许服务名称
  2. firewall-cmd --get-services #查看所有的服务名称
  3. ``
  4. firewall-cmd --add-service=服务名 #添加服务
  5. firewall-cmd --add-service=http
  6. ``
  7. firewall-cmd --remove-service=服务名 #移除开发的服务

10、端口转发

  1. 语法:
  2. firewall-cmd [--permanent] [--zone=zone] --add-forward-port
  3. =port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]] 将本机的88端口请求转发到80端口:
  4. firewall-cmd --add-forward-port=port=88:proto=tcp:toport=80 11.地址伪装:
  5. firewall-cmd --add-masquerade

11.直接规则:

在firewall中,通过firewall-cmd使用iptables语法添加规则;

  1. firewall-cmd --direct --add-chain ipv4|ipv6 表名 链名
  2. firewall-cmd --direct --add-chain ipv4 nat INPUT-NEW
  3. ``
  4. firewall-cmd --direct --get-chains ipv4|ipv6 表名 查看表中的所有链
  5. firewall-cmd --direct --get-chains ipv4 nat
  6. ``
  7. firewall-cmd --direct --remove-chain ipv4|ipv6 表名 链名
  8. firewall-cmd --direct --remove-chain ipv4 nat INPUT-NEW
  9. ``
  10. firewall-cmd --direct --add-rule ipv4|ipv6 表名 链名 优先级 选项
  11. firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 80 -j DROP

12.临时规则设置:

在规则后,添加超时时间:—timeout=时间

  1. firewall-cmd --add-port=8080/tcp --timeout=30s
  2. ``
  3. 秒s 分m 时h

13、富语言规则:

  1. 语法:
  2. firewall-cmd --add-rich-rule='
  3. rule [family="<rule family>"]
  4. [source address="<ip>/<mask>" [invert="True"]]
  5. [destination address="<ip address>/<mask>" [invert="True"]]
  6. [<element>]
  7. [log [prefix="<prefix text>"] [level="<log level>"] [limit value="rate/duration"] ]
  8. [ audit [limit value="rate/duration"]
  9. [ accept|reject|drop]

任 何 已 配 置 的 富 规 则 都 会 显示在 firewall-cmd —list-all 和 firewall-cmd —list-all-zones 的输出结果中

  • :配置ipv4,ipv6,ebtables的。

  • source:限制源 IP 地址,源地址可以是一个 IPv4、IPv6 地址或者一个网络地址段。 invert 是!非的意思

  • destination:限制目标地址,目标地址使用跟源地址相同的语法。

  • element:要素,该项只能是以下几种要素类型之一:service、port 、protocol、icmp-block、masquerade 和 forward-port

    • service:服务名称是 firewalld 提供的其中一种服务。要获得支持的服务列表,输入以下命令: firewall-cmd —get-services 。如果一个服务提供了一个目标地址,它和规则中的目标地址冲突,则会导致一个错误。命令格式为:service name=ssh

    • port:端口可以是一个独立端口数字,或者是端口范围,如 5060~5062。协议为 TCP或 UDP 。命令格式为:port port=number_or_range protocol=protocol。 port port=80-9000 protocol=tcp

    • protocol:协议,可以是一个协议 ID 号,或者一个协议名。查询可用协议,请查阅 /etc/protocols。命令格式为:protocol value=protocol_name_or_ID。 protocol value=icmp

    • icmp-block:阻断一个或多个 ICMP 类型。要获得支持的 ICMP 类型列表,输入firewall-cmd —get-icmptypes 命 令 即 可 查 看 。 命 令 格式为 : icmp-block name=icmptype_name。 icmp-block name=”Echo Request”

    • masquerade:规则里的 IP 伪装。用源地址而不是目的地址来把伪装限制在一个范围内

    • forward-port:将指定的 TCP 或 UDP 协议的数据包转发到本机的其他端口,或另一台机器,或另一台机器上的其他端口。 port 和 to-port 可以是一个单独的端口数字,或一个端口范围。而目的地址是一个简单的 IP 地址。命令格式为:

      forward-port port=number_or_range protocol=protocol to-port=number_or_range to-addr=address

      forward-port port=8888 protocol=tcp to-port=80 to-addr=10.20.30.40

  • log:注册有内核日志的连接请求到规则中,如系统日志。可以定义一个前缀文本把日志信息作为前缀加入。日志等级可以是emerg、alert、crit、error、warning、notice、info 或者 debug 中的一个。可以选择日志的用法,按以下方式限制日志:日志所在位置 /var/log/message

    log [prefix=prefix text] [level=log level] limit value=rate/duration

    log prefix=”blocklist-info: “ level=”info” limit value=2/s

    持续时间的单位为 s、 m、 h、 d。 s 表示秒, m 表示分钟, h 表示小时, d 表示天。最大限定值是 1/d(每天最多有一条日志进入)。

  • audit:审核,审核类型可以是 accept、reject 或 drop 中的一种,但不能在 audit 命令后指定,因为审核类型将会从规则动作中自动收集。审核不包含自身参数,但可以选择性地增加限制。审核的使用是可选择的。

  • accept|reject|drop:可以是 accept、reject 或 drop 中的一个行为。命令格式为:accept | reject [type=reject type] | drop。指定 accept 时,所有新的连接请求都将被允许。指定 reject 时,连接将被拒绝,发起端将接到一个拒绝信息。指定 drop时,所有数据包会被丢弃,并且不会向发起端发送任何信息

练习:允许指定ip访问本地80端口:

  1. firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.32.12 port port=80 protocol=tcp accept'