firewall-cmd语法

firewall-cmd

  firewall-cmd是firewalld的主要命令行工具。它可用于获取有关firewalld的状态信息,获取运行时和永久环境的防火墙配置,以及更改这些信息。
  根据所选策略,需要通过身份验证才能访问或更改firewalld配置。它仅在firewalld运行时才可用

常规参数

  -h   打印简短的帮助文本并退出

  -V   打印firewalld的版本字符串。此选项不能与其他选项组合使用

  -q  不要打印状态消息

状态参数

  –state  检查firewalld守护程序是否处于运行状态

  –reload   重新加载防火墙规则并保留状态信息。当前的系统配置将成为新的运行时配置,如果当前配置未处于永久配置中会因重新加载而丢失

  –complete-reload   完全重新加载防火墙,甚至netfilter内核模块。这会终止活动连接,此选项只应在防火墙出现严重问题时使用

  –runtime-to-permanent   保存当前运行时配置并重写系统配置,该方法的工作原理是,在配置firewalld时只进行运行时配置更改,一旦对配置满意并测试了它的工作方式,就可以将其保存到系统配置中

拒绝日志参数

  通过使用LogDenied选项,firewalld可以为拒绝的数据包添加简单的日志记录机制。这些是被拒绝或丢弃的数据包。

  –get-log-denied  打印拒绝日志

  –set-log-denied=value   value的值可以为all,unicast,broadcast,multicast和off。默认设置为off,禁用日志记录。all为所有。这会改变运行时配置和系统配置,并会重新加载防火墙以开启日志规则。

系统选项

  –permanent  用于设置系统选项,仅在系统重启或服务restart/reload后生效,如果不加该参数则只是运行时配置的一部分

Zone

  –get-default-zone  打印连接和接口的默认区域

  –set-default-zone=zone   为没有选择区域的连接和接口设置默认区域。也可以更改连接或接口默认区域。这会改变运行配置和系统配置

  –get-active-zones  打印当前区域以及区域中使用的接口和源。该是与接口或源绑定的区域

  [–permanent] –get-zones   将预定义的区域打印为空格分隔的列表(firewalld将网卡对应到不同的区域(zone),zone 默认共有9个:block、dmz、drop、external、home、internal、public、trusted、work

  [–permanent] –get-services  将预定义的服务打印为空格分隔的列表

  [–permanent] –get-icmptypes  将预定义的icmptypes打印为空格分隔的列表。

  [–permanent] –get-zone-of-interface=interface  打印接口绑定的区域名称

  [–permanent] –get-zone-of-source=source[/mask]|MAC|ipset:ipset  打印源绑定的区域

  [–permanent] –info-zone=zone  打印指定Zone的相关信息

  [–permanent] –list-all-zones  列出所有区域添加和开启的所有内容

  –permanent –new-zone=zone  添加新的系统配置和空区域

  –permanent –new-zone-from-file=filename [–name=zone]  从已准备的区域文件中添加新永久区域

  –permanent –delete-zone=zone  删除现有的永久区域

  –permanent –load-zone-defaults=zone  加载区域默认设置或报告NO_DEFAULTS错误

  –permanent –path-zone=zone  打印区域配置文件的路径

  –permanent –zone=zone –set-description=description  为区域添加描述信息

  –permanent –zone=zone –get-description  打印区域描述信息

  –permanent [–zone=zone] –get-target  获得永久的目标区域

  –permanent [–zone=zone] –set-target=target  设定一个永久区域的目标。参数为:default, ACCEPT, DROP, REJECT

更改和查询区域的参数

  本节中的选项只影响一个特定区域。如果与 –zone=zone选项一起使用,则会影响指定zone。如果省略该选项,则会影响默认区域(–get-default-zone)。

  [–permanent] [–zone=zone] –list-all  列出在指定区域的所有内容

service

  [–permanent] [–zone=zone] –list-services  列出区域中添加的服务

  [–permanent] [–zone=zone] –add-service=service [–timeout=timeval]  为Zone添加指定服务。可以多次指定此选项。也可指定时间,规则将在指定的时间内处于活动状态,并在之后自动删除。timeval格式为10s,20m或1h。
–timeout不能与–permanent组合使用

  [–permanent] [–zone=zone] –remove-service=service  从区域中删除服务

  [–permanent] [–zone=zone] –query-service=service  查询是否为Znoe添加了服务。如果为真,返回0,否则返回1

port

  [–permanent] [–zone=zone] –list-ports  列出区域中添加的端口,格式为”端口号/协议”

  [–permanent] [–zone=zone] –add-port=portid[-portid]/protocol [–timeout=timeval]  将端口添加到区域,并设定超时时间
,可以是单个端口也可以是端口范围。协议可以是 tcp, udp, sctp , dccp等,–timeout不能与–permanent组合使用

  [–permanent] [–zone=zone] –remove-port=portid[-portid]/protocol  从ZONE中删除端口

  [–permanent] [–zone=zone] –query-port=portid[-portid]/protocol  查询是Znoe是否包含指定端口。如果为真,返回0,否则返回1

protocol

  [–permanent] [–zone=zone] –list-protocols  列出Zone中包含的协议

  [–permanent] [–zone=zone] –add-protocol=protocol [–timeout=timeval]  为Zone添加指定协议。可以多次指定此选项。也可指定时间,规则将在指定的时间内处于活动状态,并在之后自动删除。timeval格式为10s,20m或1h。
–timeout不能与–permanent组合使用

  [–permanent] [–zone=zone] –remove-protocol=protocol  从ZONE中删除协议

  [–permanent] [–zone=zone] –query-protocol=protocol  查询是Znoe是否包含指定协议。如果为真,返回0,否则返回1

source-port

  [–permanent] [–zone=zone] –list-source-ports  列出区域中添加的源端口,格式为”端口号/协议”

  [–permanent] [–zone=zone] –add-source-port=portid[-portid]/protocol [–timeout=timeval]  将源端口添加到区域,并设定超时时间
,可以是单个端口也可以是端口范围。协议可以是 tcp, udp, sctp , dccp等,–timeout不能与–permanent组合使用

  [–permanent] [–zone=zone] –remove-source-port=portid[-portid]/protocol  从ZONE中删除源端口

  [–permanent] [–zone=zone] –query-source-port=portid[-portid]/protocol  查询是Znoe是否包含指定源端口。如果为真,返回0,否则返回1

icmp-block

  [–permanent] [–zone=zone] –list-icmp-blocks  列出Zone中的ICMP协议块

  [–permanent] [–zone=zone] –add-icmp-block=icmptype [–timeout=timeval]  为Zone的icmp块添加icmptype,可以多次指定此选项。也可指定时间,规则将在指定的时间内处于活动状态,并在之后自动删除。timeval格式为10s,20m或1h。
–timeout不能与–permanent组合使用

  [–permanent] [–zone=zone] –remove-icmp-block=icmptype  从Zone的icmp块中删除icmptype

  [–permanent] [–zone=zone] –query-icmp-block=icmptype  查询是Zone中是否包含指定icmptype。如果为真,返回0,否则返回1

forward-ports

  [–permanent] [–zone=zone] –list-forward-ports  列出Zone中的IPv4转发端口

  [–permanent] [–zone=zone] –add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]] [–timeout=timeval]  在Zone中添加端口转发,可以多次指定此选项。也可指定时间,规则将在指定的时间内处于活动状态,并在之后自动删除。timeval格式为10s,20m或1h。
–timeout不能与–permanent组合使用。
  端口可以是单个端口号,也可以是端口范围portid-portid。协议可以是tcp、udp、sctp或dccp。目标地址是一个简单的IP地址。

  [–permanent] [–zone=zone] –remove-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]  删除端口转发

  [–permanent] [–zone=zone] –query-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]  查询端口转发,如果为真,返回0,否则返回1

masquerade

  [–permanent] [–zone=zone] –add-masquerade [–timeout=timeval]   设置IPv4地址转换,可指定时间,规则将在指定的时间内处于活动状态,并在之后自动删除。timeval格式为10s,20m或1h。

  [–permanent] [–zone=zone] –remove-masquerade  关闭Zone中的Ipv4地址转换,当其超时了也会被关闭

  [–permanent] [–zone=zone] –query-masquerade  查询Zone中是否开启了IPv4地址转换,如果为真,返回0,否则返回1

rich-rule

  [–permanent] [–zone=zone] –list-rich-rules  列出Zone中的rich-rule

  [–permanent] [–zone=zone] –add-rich-rule=’rule’ [–timeout=timeval]  为Zone中添加rich-rule

  [–permanent] [–zone=zone] –remove-rich-rule=’rule’  删除 Zone中的rich-rule

  [–permanent] [–zone=zone] –query-rich-rule=’rule’  查询Zone中是否有rich-rule,如果为真,返回0,否则返回1

接口绑定参数

  将接口绑定到Zone意味着此Zone设置用于限制通过接口的流量。
  本节中的选项只影响一个特定区域。如果与 –zone=zone选项一起使用,则会影响指定zone。如果省略该选项,则会影响默认区域(–get-default-zone)。使用firewall-cmd –get-zones

  [–permanent] [–zone=zone] –list-interfaces  列出绑定到Zone的接口

  [–permanent] [–zone=zone] –add-interface=interface  绑定接口到Zone。如果接口受NetworkManager控制,则首先连接到接口更改其连接区域。如果失败,则在防火墙中创建区域绑定。对于不受NetworkManager控制的接口,firewalld尝试更改ifcfg文件中的区域设置(如果该文件存在)。

  作为终端用户,在大多数情况下不需要这样做,当没有设定NM_CONTROLLED=no时,NetworkManager会自动根据ifcfg接口文件中的zone=option向Zone中添加接口,只有在没有/etc/sysconfig/network scripts/ifcfg接口文件的情况下才应该这样做。如果存在这样的文件,并且使用–add-interface选项将接口添加到区域中,请确保在这两种情况下区域是相同的,否则行为将是未定义的。

  [–zone=zone] –change-interface=interface  如果接口受NetworkManager控制,则首先连接到接口更改其连接区域。如果失败,则在防火墙中创建区域绑定。对于不受NetworkManager控制的接口,firewalld尝试更改ifcfg文件中的区域设置(如果该文件存在)。.

  更改接口绑定的区域。步骤是–remove-interface然后–add-interface。如果接口以前没有绑定到Zone,那么它类似于–add-interface

  [–permanent] [–zone=zone] –query-interface=interface  查询接口是否和该Zone绑定

  [–permanent] –remove-interface=interface  仅用于删除不受NetworkManager控制的接口,firewalld不会更改ifcfg文件中的区域设置

绑定源(source)的参数

  将源绑定到Zone意味着此区域设置用于限制来自此源的流量。

  源地址是IP地址或地址范围,要么是带有IPv4或IPv6掩码的网络IP地址,或者是MAC地址,或者是ipset: prefix。对于IPv4,掩码可以是网络掩码,也可以是普通数字。对于IPv6,掩码是一个普通的数字。不支持使用主机名。

  [–permanent] [–zone=zone] –list-sources  列出绑定到Zone的源

  [–permanent] [–zone=zone] –add-source=source[/mask]|MAC|ipset:ipset  将源绑定到Zone

  [–zone=zone] –change-source=source[/mask]|MAC|ipset:ipset  改变区域中绑定的源

  [–permanent] [–zone=zone] –query-source=source[/mask]|MAC|ipset:ipset  查询源是否在Zone中

  [–permanent] –remove-source=source[/mask]|MAC|ipset:ipset  删除源

IPSet 参数

1
2
firewall-cmd --get-ipset-types  #打印出ipset类型
hash:ip hash:ip,mark hash:ip,port hash:ip,port,ip hash:ip,port,net hash:mac hash:net hash:net,iface hash:net,net hash:net,port hash:net,port,net

  –permanent –new-ipset=ipset –type=type [–family=inet|inet6] [–option=key[=value]]  添加永久的ipset,以及指定各种参数

  –permanent –new-ipset-from-file=filename [–name=ipset]  从文件中添加永久ipset配置

  –permanent –delete-ipset=ipset  删除已存在的ipset配置

  –permanent –load-ipset-defaults=ipset  加载ipset 默认配置或者报告NO_DEFAULTS

  [–permanent] –info-ipset=ipset  打印ipset的信息

1
2
3
4
ipset
type: type
options: option1[=value1] ..
entries: entry1 ..

  [–permanent] –get-ipsets  打印预定义的ipset

  –permanent –ipset=ipset –set-description=description  为ipset添加描述

  –permanent –ipset=ipset –get-description  打印ipset的描述

  [–permanent] –ipset=ipset –add-entry=entry  为ipset添加新条目

  Adding an entry to an ipset with option timeout is permitted, but these entries are not tracked by firewalld.

  [–permanent] –ipset=ipset –remove-entry=entry  删除ipset中的一个条目

  [–permanent] –ipset=ipset –query-entry=entry  查询ipset中是否包含指定条目。Querying an ipset with a timeout will yield an error. Entries are not tracked for ipsets with a timeout.

  [–permanent] –ipset=ipset –get-entries  列出ipset的所有条目

  [–permanent] –ipset=ipset –add-entries-from-file=filename  使用文件向ipset添加条目,对于文件中列出的条目在ipset中已经存在的时候,打印警告。以#号、分号开头的行以及空白行会被忽略

  [–permanent] –ipset=ipset –remove-entries-from-file=filename  使用文件从ipset删除条目,对于文件中列出的条目在ipset中已经存在的时候,打印警告。以#号、分号开头的行以及空白行会被忽略

  –permanent –path-ipset=ipset  打印ipset配置文件的路径

Service参数

  此部分中的选项仅影响一个特定服务。

  [–permanent] –info-service=service  打印Service相关信息

1
2
3
4
5
6
service
ports: port1 ..
protocols: protocol1 ..
source-ports: source-port1 ..
modules: module1 ..
destination: ipv1:address1 ..

  –permanent –new-service=service 系统配置中添加服务

  –permanent –new-service-from-file=filename [–name=service]  通过文件项系统配置中添加服务

  –permanent –delete-service=service  删除已存在的服务

  –permanent –load-service-defaults=service  加载服务默认设置或者报告NO_DEFAULTS错误

  –permanent –path-service=service  打印服务配置文件的路径

  –permanent –service=service –set-description=description  为服务添加描述

  –permanent –service=service –get-description  打印服务的描述

  –permanent –service=service –add-port=portid[-portid]/protocol  向服务中添加端口

  –permanent –service=service –remove-port=portid[-portid]/protocol  从指定的服务中移除某端口

  –permanent –service=service –query-port=portid[-portid]/protocol  查询端口是否添加到服务中

  –permanent –service=service –get-ports  列出服务中添加的端口

  –permanent –service=service –add-protocol=protocol  向服务中添加协议

  –permanent –service=service –remove-protocol=protocol  从服务中删除某协议

  –permanent –service=service –query-protocol=protocol 查询服务中是否包含某协议

  –permanent –service=service –get-protocols 列出服务中包含的协议

  –permanent –service=service –add-source-port=portid[-portid]/protocol  向某服务中添加源端口

  –permanent –service=service –remove-source-port=portid[-portid]/protocol 从某服务中删除源端口

  –permanent –service=service –query-source-port=portid[-portid]/protocol 查询源端口是否添加到服务中

  –permanent –service=service –get-source-ports  列出某服务中的添加的源端口

  –permanent –service=service –add-module=module  向服务中添加模块

  –permanent –service=service –remove-module=module  从服务中删除模块

  –permanent –service=service –query-module=module  查询模块是否已经添加到服务

  –permanent –service=service –get-modules  列出服务中添加的模块

  –permanent –service=service –set-destination=ipv:address[/mask]  为某服务设置目的地址

  –permanent –service=service –remove-destination=ipv  从某服务中删除目的地址

  –permanent –service=service –query-destination=ipv:address[/mask]  查询目的地址是否存在于服务设置中

  –permanent –service=service –get-destinations  列出服务中添加的目的地址

Internet Control Message Protocol (ICMP)类型选项

  Options in this section affect only one particular icmptype.

1
2
3
4
5
6
7
8
9
10
11
firewall-cmd --get-icmptypes  #获取所有支持的ICMP类型
[root@docker-study ~]# firewall-cmd --get-icmptypes
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

  [–permanent] –info-icmptype=icmptype   打印有关ICMPtype 的信息

1
2
3
[root@docker-study ~]# firewall-cmd --info-icmptype=bad-header
bad-header
destination: ipv6

  –permanent –new-icmptype=icmptype   添加新的ICMPtype

  –permanent –new-icmptype-from-file=filename [–name=icmptype]   用过文件添加新的ICMPtype

  –permanent –delete-icmptype=icmptype  删除已存在的ICMPtype

  –permanent –load-icmptype-defaults=icmptype   加载icmptype默认设置或报告NO_DEFAULTS错误

  –permanent –icmptype=icmptype –set-description=description   为ICMPtype 设置新的描述

  –permanent –icmptype=icmptype –get-description   打印指定ICMPtype的描述

  –permanent –icmptype=icmptype –add-destination=ipv  在ICMPtype中开启目的地址,可以是ipv4 或 ipv6

  –permanent –icmptype=icmptype –remove-destination=ipv   在ICMPtype中禁用目的地址,可以是ipv4 或 ipv6

  –permanent –icmptype=icmptype –query-destination=ipv  返回在ICMPtype中是否开启ipv4 或ipv6目的地址

1
2
3
4
[root@docker-study ~]# firewall-cmd --permanent --icmptype=bad-header --query-destination=ipv4
no
[root@docker-study ~]# firewall-cmd --permanent --icmptype=bad-header --query-destination=ipv6
yes

  –permanent –icmptype=icmptype –get-destinations   List destinations in permanent icmptype.

1
2
[root@docker-study ~]# firewall-cmd --permanent --icmptype=bad-header --get-destinations
ipv6

  –permanent –path-icmptype=icmptype  打印出icmptype配置文件的路径。

锁定(Lockdown)参数

  如果本地应用程序或服务以根用户身份运行(例如:libvirt)或使用policykit进行身份验证,则它们可以更改防火墙配置。使用此功能,管理员可以锁定防火墙配置,以便只有锁定白名单上的应用程序才能请求防火墙更改。

  锁定访问检查限制了正在更改防火墙规则的D-Bus方法。查询、列表和get方法不受限制。

  锁定功能是firewalld用户和应用程序策略的一个非常轻量级的版本,默认情况下是关闭的。
  –lockdown-on
启用锁定。注意 , 如果启用锁定时firewall-cmd不在锁定白名单中,则无法使用firewall-cmd再次禁用它,需要编辑firewalld.conf。这是运行时和永久性更改。

  –lockdown-off 禁用锁定。这是运行时和永久性更改。

  –query-lockdown 查询是否启用了锁定。如果启用了锁定,则返回0,否则返回1。

锁定白名单(Lockdown Whitelist)参数

  该锁定白名单可以包括commands,contexts,users和user ids。
如果白名单上的命令条目以星号“*”结尾,那么以该命令开头的所有命令行都将匹配。如果没有“*”,则必须匹配绝对命令包含的参数。

  用户root和其他用户的命令并不总是相同。示例:root使用 /bin/firewall-cmd,在Fedora上的普通用户使用 /usr/bin/firewall-cmd。

  [ –permanent]–list-lockdown-whitelist-commands
列出白名单中的所有命令。

  [ –permanent] –add-lockdown-whitelist-command=command
添加command到白名单。

  [ –permanent] –remove-lockdown-whitelist-command=command
command从白名单中 删除。

  [ –permanent] –query-lockdown-whitelist-command=command
查询是否command在白名单中。如果为true则返回0,否则返回1。

  [ –permanent]–list-lockdown-whitelist-contexts
列出白名单中的所有环境。

  [ –permanent] –add-lockdown-whitelist-context=context
添加context到白名单。

  [ –permanent] –remove-lockdown-whitelist-context=context
从白名单中 删除context。

  [ –permanent] –query-lockdown-whitelist-context=context
查询context是否在白名单中。如果为true则返回0,否则返回1。

  [ –permanent]–list-lockdown-whitelist-uids
列出白名单中的所有用户ID。

  [ –permanent] –add-lockdown-whitelist-uid=uid
添加uid到白名单。

  [ –permanent] –remove-lockdown-whitelist-uid=uid
从白名单中 删除用户ID 。

  [ –permanent] –query-lockdown-whitelist-uid=uid
查询用户uid标识是否在白名单中。如果为true则返回0,否则返回1。

  [ –permanent]–list-lockdown-whitelist-users
列出白名单中的所有用户名。

  [ –permanent] –add-lockdown-whitelist-user=user
添加user到白名单。

  [ –permanent] –remove-lockdown-whitelist-user=user
从白名单中 删除用户。

  [ –permanent] –query-lockdown-whitelist-user=user
查询user是否在白名单中。如果为true则返回0,否则返回1。

紧急参数

  –panic-on   开启紧急模式,所有进出包都被丢弃,活动连接将超时。只有在网络环境出现严重问题时才启用此功能。例如,黑客入侵。
这是运行时配置的更改

  –panic-off  禁用紧急选项

  –query-panic  查询是否开启紧急模式

------ end ------
0%