Firewall

Firewall介绍

firewalld是CentOS 7.0新推出的管理netfilter的用户空间软件工具
firewalld是配置和监控防火墙规则的系统守护进程。可以实iptables,ip6tables,ebtables的功能
firewalld服务由firewalld包提供
firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则

相较于iptables防火墙而言,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

iptables每一个更改都需要先清除所有旧有的规则,然后重新加载所有的规则(包括新的和修改后的规则);而firewalld任何规则的变更都不需要对整个防火墙规则重新加载。

firewalld中常用的区域名称及策略规则

区域(noze) 默认策略规则
trusted 允许所有的数据包进出
home 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许进入
Internal 等同于home区域
work 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许进入
public 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许进入
external 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh服务相关,则允许进入
dmz 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh服务相关,则允许进入
block 拒绝进入的流量,除非与出去的流量相关
drop 拒绝进入的流量,除非与出去的流量相关

注意:firewalld默认出口是全放开的

Firewall 主要文件:

/etc/firewalld/		# 用户配置文件
├── firewalld.conf
├── helpers
├── icmptypes
├── ipsets
├── lockdown-whitelist.xml
├── services
└── zones
    ├── public.xml
    └── public.xml.old
    
/usr/lib/firewalld # 系统配置文件,预定义配置

firewalld有基于CLI(命令行界面)和基于GUI(图形用户界面)两种管理方式,即:firewall-cmd(终端管理工具)和firewall-config(图形管理工具)。

如果要使用firewall-config需要安装:

yum -y install firewall-config

firewall-cmd操作

Status Options
  --state             				 			# 返回并打印防火墙状态
  --reload             							# 重新加载防火墙并保留状态信息
  --complete-reload    							# 重新加载防火墙并丢失状态信息
  --runtime-to-permanent						# 通过运行时配置创建永久文件
  --check-config       							# 检查永久性配置是否有错误
  
Log Denied Options
  --get-log-denied    # 打印被拒绝的日志
  --set-log-denied=<value>	# 设置日志拒绝值

Automatic Helpers Options
  --get-automatic-helpers		# 打印自动助手值
  --set-automatic-helpers=<value>	 # 设置自动助手值

Permanent Options
  --permanent      # 永久设置一个选项(可用于标有[P]的选项)

Zone Options
  --get-default-zone   # 打印连接和接口的默认区域
  --set-default-zone=<zone>		# 设置默认区域
  --get-active-zones   # 打印当前活动区域
  --get-zones          # 打印预定义区域 [P]
  --get-services       # 打印预定义的服务 [P]
  --get-icmptypes      # 打印预定义的icmptypes [P]
  --get-zone-of-interface=<interface>	# 打印接口绑定到的区域名称 [P]
  --get-zone-of-source=<source>[/<mask>]|<MAC>|ipset:<ipset>	# 打印源绑定到的区域名称 [P]
  --list-all-zones     # 列出为所有区域添加或启用的所有内容 [P]
  --new-zone=<zone>    # 添加一个新区域 [P only]
  --new-zone-from-file=<filename> [--name=<zone>]		# 从文件中添加具有可选名称的新区域 [P only]
  --delete-zone=<zone> 	# 删除现有区域 [P only]
  --load-zone-defaults=<zone>		# 加载区域默认设置 [P only] [Z]
  --zone=<zone>        # 使用此区域设置或查询选项,否则使用默认区域 (可用于标有[Z]的选项)
  --get-target         # 获取区域目标 [P only] [Z]
  --set-target=<target>  # 设定区域目标 [P only] [Z]
  --info-zone=<zone>   # 打印有关区域的信息
  --path-zone=<zone>   # 打印区域的文件路径 [P only]

IPSet Options
  --get-ipset-types    # 打印支持的ipset类型
  --new-ipset=<ipset> --type=<ipset type> [--option=<key>[=<value>]]..  # 添加一个新的ipset [P only]
  --new-ipset-from-file=<filename> [--name=<ipset>]   # 从文件中添加具有可选名称的新ipset [P only]
  --delete-ipset=<ipset>   # 删除现有的ipset [P only]
  --load-ipset-defaults=<ipset>  # 加载ipset默认设置 [P only]
  --info-ipset=<ipset> # 打印有关ipset的信息
  --path-ipset=<ipset> # 打印ipset的文件路径 [P only]
  --get-ipsets         # 打印预定义的ipset
  --ipset=<ipset> --set-description=<description>  # 将新描述设置为ipset [P only]
  --ipset=<ipset> --get-description   # 打印ipset的描述 [P only]
  --ipset=<ipset> --set-short=<description>  # 将新的简短描述设置为ipset [P only]
  --ipset=<ipset> --get-short  # 打印ipset的简短描述 [P only]
  --ipset=<ipset> --add-entry=<entry> # 将新条目添加到ipset [P]
  --ipset=<ipset> --remove-entry=<entry> # 从ipset中删除条目 [P]
  --ipset=<ipset> --query-entry=<entry> # 返回ipset是否有条目 [P]
  --ipset=<ipset> --get-entries  # 列出一个ipset的条目 [P]
  --ipset=<ipset> --add-entries-from-file=<entry> # 将新条目添加到ipset [P]
  --ipset=<ipset> --remove-entries-from-file=<entry>  # 从ipset中删除条目 [P]
  
 IcmpType Options
  --new-icmptype=<icmptype>  # 添加新的icmptype [P only]
  --new-icmptype-from-file=<filename> [--name=<icmptype>] # 从具有可选名称的文件中添加新的icmptype [P only]
  --delete-icmptype=<icmptype> # 删除现有的icmptype [P only]
  --load-icmptype-defaults=<icmptype> # 加载icmptype默认设置 [P only]
  --info-icmptype=<icmptype>  # 显示有关icmptype的信息
  --path-icmptype=<icmptype>  # 打印icmptype的文件路径 [P only]
  --icmptype=<icmptype> --set-description=<description>  # 为icmptype设置新描述 [P only]
  --icmptype=<icmptype> --get-description  # 打印icmptype的描述 [P only]
  --icmptype=<icmptype> --set-short=<description>  #  为icmptype设置新的简短描述 [P only]
  --icmptype=<icmptype> --get-short  # 打印icmptype的简短描述 [P only]
  --icmptype=<icmptype> --add-destination=<ipv>  #  在icmptype中启用ipv的目标 [P only]
  --icmptype=<icmptype> --remove-destination=<ipv>  # 在icmptype中禁用ipv的目标 [P only]
  --icmptype=<icmptype> --query-destination=<ipv>  #  返回是否在icmptype中启用了目标ipv [P only]
  --icmptype=<icmptype> --get-destinations  #  列出icmptype中的目的地 [P only]
  
  
 Service Options
  --new-service=<service>  # 新增服务 [P only]
  --new-service-from-file=<filename> [--name=<service>] # 从文件中添加具有可选名称的新服务 [P only]
  --delete-service=<service>  # 删除现有服务 [P only]
  --load-service-defaults=<service>  # 加载icmptype默认设置 [P only]
  --info-service=<service>  #  打印有关服务的信息
  --path-service=<service> # 打印服务的文件路径 [P only]
  --service=<service> --set-description=<description>  # 设置新的服务描述 [P only]
  --service=<service> --get-description # 打印服务说明 [P only]
  --service=<service> --set-short=<description>   # 设置新的简短服务说明 [P only]
  --service=<service> --get-short #  打印服务简短说明 [P only]
  --service=<service> --add-port=<portid>[-<portid>]/<protocol>  # 为服务添加新端口 [P only]
  --service=<service> --remove-port=<portid>[-<portid>]/<protocol>   #  从服务中删除端口 [P only]
  --service=<service> --query-port=<portid>[-<portid>]/<protocol>     #  返回是否已添加端口以进行服务 [P only]
  --service=<service> --get-ports    #  列出服务端口 [P only]
  --service=<service> --add-protocol=<protocol>  #  向服务添加新协议 [P only]
  --service=<service> --remove-protocol=<protocol>  #  从服务中删除协议 [P only]
  --service=<service> --query-protocol=<protocol>   #  返回是否已为服务添加协议 [P only]
  --service=<service> --get-protocols   #  列出服务协议 [P only]
  --service=<service> --add-source-port=<portid>[-<portid>]/<protocol>    # 为服务添加新的源端口 [P only]
  --service=<service> --remove-source-port=<portid>[-<portid>]/<protocol>  #  从服务中删除源端口 [P only]
  --service=<service> --query-source-port=<portid>[-<portid>]/<protocol>  #  返回是否已经为服务添加了源端口 [P only]
  --service=<service> --get-source-ports    #  列出服务的源端口 [P only]
  --service=<service> --add-module=<module>  # 向服务添加新模块 [P only]
  --service=<service> --remove-module=<module>    # 从服务中删除模块 [P only]
  --service=<service> --query-module=<module>   #  返回是否已添加该模块进行维修 [P only]
  --service=<service> --get-modules  # 列出服务模块 [P only]
  --service=<service> --set-destination=<ipv>:<address>[/<mask>]   #  设置ipv的目标地址以启用服务 [P only]
  --service=<service> --remove-destination=<ipv>   # 禁用ipv i服务的目标 [P only]
  --service=<service> --query-destination=<ipv>:<address>[/<mask>]   # 返回是否为服务设置了目标ipv [P only]
  --service=<service> --get-destinations   # 列出服务中的目的地 [P only]
  
  Options to Adapt and Query Zones
  --list-all           # 列出为区域添加或启用的所有内容 [P] [Z]
  --list-services      # 列出为区域添加的服务 [P] [Z]
  --timeout=<timeval>  # 启用timeval时间选项,其中timeval为一个数字,后跟字母“ s”或“ m”或“ h”之一,可用于标有[T]的选项
  --set-description=<description>   #  为区域设置新的说明 [P only] [Z]
  --get-description    # 打印区域说明 [P only] [Z]
  --set-short=<description>   # 在区域中设置新的简短描述 [P only] [Z]
  --get-short          # 打印区域的简短描述 [P only] [Z]
  --add-service=<service>    # 为区域添加服务 [P] [Z] [T]
  --remove-service=<service>  # 从区域中删除服务 [P] [Z]
  --query-service=<service>  #  返回是否已为区域添加服务 [P] [Z]
  --list-ports         # 列出为区域添加的端口 [P] [Z]
  --add-port=<portid>[-<portid>]/<protocol>  #  添加区域的端口 [P] [Z] [T]
  --remove-port=<portid>[-<portid>]/<protocol>  # 从区域中删除端口 [P] [Z]
  --query-port=<portid>[-<portid>]/<protocol>  #  返回是否已为区域添加端口 [P] [Z]
  --list-protocols    # 列出为区域添加的协议 [P] [Z]
  --add-protocol=<protocol>   # 添加区域协议 [P] [Z] [T]
  --remove-protocol=<protocol>   #  从区域中删除协议 [P] [Z]
  --query-protocol=<protocol> #  返回是否已为区域添加协议 [P] [Z]
  --list-source-ports  # 列出为区域添加的源端口 [P] [Z]
  --add-source-port=<portid>[-<portid>]/<protocol>  #  添加区域的源端口 [P] [Z] [T]
  --remove-source-port=<portid>[-<portid>]/<protocol>   # 从区域中删除源端口 [P] [Z]
  --query-source-port=<portid>[-<portid>]/<protocol>  # 返回是否为区域添加了源端口 [P] [Z]
  --list-icmp-blocks   # 列出为区域添加的Internet ICMP类型阻止 [P] [Z]
  --add-icmp-block=<icmptype>    # 为区域添加ICMP块 [P] [Z] [T]
  --remove-icmp-block=<icmptype>   # 从区域中删除ICMP块 [P] [Z]
  --query-icmp-block=<icmptype>   # 返回是否已为区域添加ICMP块 [P] [Z]
  --add-icmp-block-inversion   # 启用区域的icmp块反转 [P] [Z]
  --remove-icmp-block-inversion  #  禁用区域的icmp块反转 [P] [Z]
  --query-icmp-block-inversion   # 返回是否已启用icmp块反转用于区域 [P] [Z]
  --list-forward-ports   # 列出为区域添加的IPv4转发端口 [P] [Z]
  --add-forward-port=port=<portid>[-<portid>]:proto=<protocol>[:toport=<portid>[-<portid>]][:toaddr=<address>[/<mask>]]   #  为区域添加IPv4转发端口 [P] [Z] [T]
  --remove-forward-port=port=<portid>[-<portid>]:proto=<protocol>[:toport=<portid>[-<portid>]][:toaddr=<address>[/<mask>]]   # 从区域中删除IPv4转发端口 [P] [Z]
  --query-forward-port=port=<portid>[-<portid>]:proto=<protocol>[:toport=<portid>[-<portid>]][:toaddr=<address>[/<mask>]]   # 返回是否为区域添加了IPv4转发端口 [P] [Z]
  --add-masquerade     # 启用区域的IPv4伪装 [P] [Z] [T]
  --remove-masquerade  # 禁用区域的IPv4伪装 [P] [Z]
  --query-masquerade   # 返回是否已为区域启用IPv4伪装 [P] [Z]
  --list-rich-rules    # 列出为区域添加的丰富语言规则 [P] [Z]
  --add-rich-rule=<rule>  # 为区域添加丰富的语言规则“规则” [P] [Z] [T]
  --remove-rich-rule=<rule> #  从区域中删除丰富语言规则“规则” [P] [Z]
  --query-rich-rule=<rule>   #  返回是否为区域添加了丰富的语言规则“规则”[P] [Z]

Options to Handle Bindings of Interfaces
  --list-interfaces    # 列出绑定到区域的接口 [P] [Z]
  --add-interface=<interface>   # 将<interface>绑定到区域 [P] [Z]
  --change-interface=<interface>   # 更改<interface>绑定到的区域 [P] [Z]
  --query-interface=<interface>   # 查询<interface>是否绑定到区域 [P] [Z]
  --remove-interface=<interface>   # 从区域中删除<interface>的绑定 [P] [Z]

Options to Handle Bindings of Sources
  --list-sources       # 列出绑定到区域的源 [P] [Z]
  --add-source=<source>[/<mask>]|<MAC>|ipset:<ipset>   # 将源绑定到区域 [P] [Z]
  --change-source=<source>[/<mask>]|<MAC>|ipset:<ipset>   # 源绑定到的更改区域 [Z]
  --query-source=<source>[/<mask>]|<MAC>|ipset:<ipset>   # 查询源是否绑定到区域 [P] [Z]
  --remove-source=<source>[/<mask>]|<MAC>|ipset:<ipset> #  从区域中删除源的绑定 [P] [Z]

Options to Handle Bindings of Sources
  --list-sources      # 列出绑定到区域的源 [P] [Z]
  --add-source=<source>[/<mask>]|<MAC>|ipset:<ipset>   # 将源绑定到区域 [P] [Z]
  --change-source=<source>[/<mask>]|<MAC>|ipset:<ipset>   # 源绑定到的更改区域 [Z]
  --query-source=<source>[/<mask>]|<MAC>|ipset:<ipset>   # 查询源是否绑定到区域 [P] [Z]
  --remove-source=<source>[/<mask>]|<MAC>|ipset:<ipset>   # 从区域中删除源的绑定 [P] [Z]

Helper Options
  --new-helper=<helper> --module=<module> [--family=<family>]   # 添加一个新的助手 [P only]
  --new-helper-from-file=<filename> [--name=<helper>]   # 从文件中添加具有可选名称的新帮助程序 [P only]
  --delete-helper=<helper>   # 删除现有的助手 [P only]
  --load-helper-defaults=<helper>   #  加载助手默认设置 [P only]
  --info-helper=<helper>   # 打印有关帮手的信息
  --path-helper=<helper>   # 打印助手的文件路径 [P only]
  --get-helpers        #  打印预定义的助手
  --helper=<helper> --set-description=<description>   # 设置新的帮助说明 [P only]
  --helper=<helper> --get-description  #  打印帮助的描述 [P only]
  --helper=<helper> --set-short=<description>  #  为助手设置新的简短描述 [P only]
  --helper=<helper> --get-short   # 打印助手的简短说明 [P only]
  --helper=<helper> --add-port=<portid>[-<portid>]/<protocol>   # 向助手添加新端口 [P only]
  --helper=<helper> --remove-port=<portid>[-<portid>]/<protocol>  # 从助手中删除端口[P only]
  --helper=<helper> --query-port=<portid>[-<portid>]/<protocol>  # 返回是否为助手添加了端口 [P only]
  --helper=<helper> --get-ports   # 列出助手的端口 [P only]
  --helper=<helper> --set-module=<module>   # 将模块设置为助手 [P only]
  --helper=<helper> --get-module   # 从助手获取模块 [P only]
  --helper=<helper> --set-family={ipv4|ipv6|}   # 为家人定下帮手 [P only]
  --helper=<helper> --get-family   # 从助手获取模块 [P only]

Direct Options
  --direct            # 所有直接选项的第一个选项
  --get-all-chains    # 获取所有链 [P]
  --get-chains {ipv4|ipv6|eb} <table>   # 将所有链条添加到表中 [P]
  --add-chain {ipv4|ipv6|eb} <table> <chain>   # 在表中添加新链 [P]
  --remove-chain {ipv4|ipv6|eb} <table> <chain>  # 从表中移除链 [P]
  --query-chain {ipv4|ipv6|eb} <table> <chain>   # 返回链是否已添加到表中 [P]
  --get-all-rules  # 获取所有规则 [P]
  --get-rules {ipv4|ipv6|eb} <table> <chain>   #  获取所有添加到表链中的规则 [P]
  --add-rule {ipv4|ipv6|eb} <table> <chain> <priority> <arg>...    # 将规则添加到表中的链 [P]
  --remove-rule {ipv4|ipv6|eb} <table> <chain> <priority> <arg>...   # 从表中的链中删除具有优先级的规则 [P]
  --remove-rules {ipv4|ipv6|eb} <table> <chain>  # 从表中的链中删除规则 [P]
  --query-rule {ipv4|ipv6|eb} <table> <chain> <priority> <arg>...   # 返回是否将具有优先级的规则添加到表的链中 [P]
  --passthrough {ipv4|ipv6|eb} <arg>...   # 传递命令(由firewalld跟踪)
  --get-all-passthroughs   # 获取所有跟踪的通过规则 [P]
  --get-passthroughs {ipv4|ipv6|eb} <arg>...   # 跟踪通过规则 [P]
  --add-passthrough {ipv4|ipv6|eb} <arg>...   # 添加新的跟踪通过规则 [P]
  --remove-passthrough {ipv4|ipv6|eb} <arg>...   # 删除跟踪的直通规则 [P]
  --query-passthrough {ipv4|ipv6|eb} <arg>...   # 返回是否已添加跟踪的直通规则 [P]

Lockdown Options
  --lockdown-on        # 启用锁定.
  --lockdown-off       # 禁用锁定.
  --query-lockdown    # 查询是否启用了锁定

Lockdown Whitelist Options
  --list-lockdown-whitelist-commands   # 列出白名单上的所有命令行 [P]
  --add-lockdown-whitelist-command=<command>   # 将命令添加到白名单 [P]
  --remove-lockdown-whitelist-command=<command>   # 从白名单中删除命令 [P]
  --query-lockdown-whitelist-command=<command>  # 查询命令是否在白名单上 [P]
  --list-lockdown-whitelist-contexts  # 列出白名单上的所有上下文 [P]
  --add-lockdown-whitelist-context=<context>   # 将上下文上下文添加到白名单 [P]
  --remove-lockdown-whitelist-context=<context>  # 从白名单中删除上下文 [P]
  --query-lockdown-whitelist-context=<context>  # 查询上下文是否在白名单上 [P]
  --list-lockdown-whitelist-uids  # 列出白名单上的所有用户ID [P]
  --add-lockdown-whitelist-uid=<uid>   # 将用户ID uid添加到白名单 [P]
  --remove-lockdown-whitelist-uid=<uid>   # 从白名单中删除用户ID uid [P]
  --query-lockdown-whitelist-uid=<uid>  # 查询用户id uid是否在白名单中 [P]
  --list-lockdown-whitelist-users   # 列出白名单上的所有用户名 [P]
  --add-lockdown-whitelist-user=<user>  # 将用户名user添加到白名单 [P]
  --remove-lockdown-whitelist-user=<user>   # 从白名单中删除用户名user [P]
  --query-lockdown-whitelist-user=<user>   # 查询用户名“ user”是否在白名单中 [P]

Panic Options
  --panic-on           # 启用紧急模式
  --panic-off          # 禁用紧急模式
  --query-panic        # 查询是否启用了应急模式 
posted @ 2021-04-20 11:30  忘川的彼岸  阅读(877)  评论(0编辑  收藏  举报