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 | firewall-cmd --get-ipset-types #打印出ipset类型 |
–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 | ipset |
[–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 | service |
–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 | firewall-cmd --get-icmptypes #获取所有支持的ICMP类型 |
[–permanent] –info-icmptype=icmptype 打印有关ICMPtype 的信息
1 | [root@docker-study ~]# firewall-cmd --info-icmptype=bad-header |
–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 | [root@docker-study ~]# firewall-cmd --permanent --icmptype=bad-header --query-destination=ipv4 |
–permanent –icmptype=icmptype –get-destinations List destinations in permanent icmptype.
1 | [root@docker-study ~]# firewall-cmd --permanent --icmptype=bad-header --get-destinations |
–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 查询是否开启紧急模式