--- title: "Firewalld 笔记" date: 2019-10-30T13:01:37+08:00 lastmod: 2019-10-30T13:01:37+08:00 tags: ["firwalld"] categories: ["network"] --- # 区域(zone) - 查看支持的 zone ```bash firewall-cmd --get-zones [--permanent] ``` - zone 定义 - 丢弃(drop) 任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。 - 限制(block) 任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。 - 公共(public) 在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。 - 外部(external) 特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。 - 非军事区(dmz) 用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。 - 工作(work) 用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。 - 家庭(home) 用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。 - 内部(internal) 用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。 - 信任(trusted) 可接受所有的网络连接。 - 指定其中一个区域为默认区域是可行的。当接口连接加入了 NetworkManager,它们就被分配为默认区域。安装时,firewalld 里的默认区域被设定为公共区域。 - 判断请求使用的 zone - source,源地址,优先级最高 - interface,接收请求的网卡 - 默认 zone,优先级最低 - 查看默认的 zone ```bash firewall-cmd --get-default-zone ``` - 设置默认的 zone ```bash firewall-cmd --set-default-zone=public ``` - 查看活动的 zone ```bash firewall-cmd --get-active-zones ``` - 查看指定 zone 下的规则 ```bash firewall-cmd [--zone=] --list-all ``` # 源地址(source) - 列出指定zone的所有绑定的source地址 ```bash firewall-cmd [--permanent] [--zone=zone] --list-sources ``` - 查询指定zone是否跟指定source地址进行了绑定 ```bash firewall-cmd [--permanent] [--zone=zone] --query-source=ip[/mask] ``` - 用于将一个source地址绑定到指定的zone(只可绑定一次,第二次绑定到不同的zone会报错) ```bash firewall-cmd [--permanent] [--zone=zone] --add-source=ip[/mask] ``` - 改变source地址所绑定的zone,如果原来没有绑定则进行绑定 ```bash firewall-cmd [--permanent] [--zone=zone] --change-source=ip[/mask] ``` - 删除source地址跟zone的绑定 ```bash firewall-cmd [--permanent] [--zone=zone] --remove-source=ip[/mask] ``` # 网卡(interface) - 获取网卡所在的 zone ```bash firewall-cmd --get-zone-of-interface= ``` - 增加网卡到 zone ```bash firewall-cmd [--zone=] --add-interface= ``` - 修改网卡到 zone ```bash firewall-cmd [--zone=] --change-interface= ``` - 从 zone 中删除网卡 ```bash firewall-cmd [--zone=] --remove-interface= ``` - 查看 zone 中是否包含某网卡 ```bash firewall-cmd [--zone=] --query-interface= ``` # target - 默认可以取四个值: default、ACCEPT、%%REJECT%%、DROP - 查看 taget ```bash firewall-cmd --permanent [--zone=zone] --get-target ``` - 设置 target ```bash firewall-cmd --permanent [--zone=zone] --set-target=target ``` - **必须使用参数 --permanent**,而且使用 firewall-cmd 命令不能直接生效,需 reload # 服务(service) - 查看支持的 service ```bash firewall-cmd --get-services [--permanent] ``` - 查看 zone 启动的 service ```bash firewall-cmd [--zone=] --list-services ``` - 在 zone 中启动 service ```bash firewall-cmd [--zone=] --add-service= \ [ --permanent | --timeout= ] ``` - 禁用 zone 中的 service ```bash firewall-cmd [--zone=] --remove-service= [--permanent] ``` - 查看 zone 中是否启动 service ```bash firewall-cmd [--zone=] --query-service= ``` # 端口和协议组合 - 查看配置的全部端口规则 ```bash firewall-cmd [--permanent] [--zone=zone] --list-ports ``` - 启动 zone 中指定协议的端口 ```bash firewall-cmd [--zone=] --add-port=[-]/ \ [ --permanent | --timeout= ] ``` - 禁用 zone 中指定协议的端口 ```bash firewall-cmd [--zone=] --remove-port=[-]/ [--permanent] ``` - 查看 zone 中指定协议的端口 ```bash firewall-cmd [--zone=] --query-port=[-]/ [--permanent] ``` # ICMP - 查看支持的 icmp 类型 ```bash firewall-cmd --get-icmptypes [--permanent] ``` - 查看全部 icmp 阻塞规则 ```bash firewall-cmd [--permanent] [--zone=zone] --list-icmp-blocks ``` - 启动 zone 中的 icmp 阻塞 ```bash firewall-cmd [--zone=] --add-icmp-block= \ [ --permanent | --timeout=seconds ] ``` - 禁用 zone 中的 icmp 阻塞 ```bash firewall-cmd [--zone=] --remove-icmp-block= [--permanent] ``` - 查询 zone 的 icmp 阻塞 ```bash firewall-cmd [--zone=] --query-icmp-block= [--permanent] ``` # IPV4 源地址转换 - 启动 zone 中 ipv4 源地址转换 ```bash firewall-cmd [--zone=] --add-masquerade \ [ --permanent | --timeout=seconds ] ``` - 禁用 zone 中 ipv4 源地址转换 ```bash firewall-cmd [--zone=] --remove-masquerade [--permanent] ``` - 查看 zone 中 ipv4 源地址转换 ```bash firewall-cmd [--zone=] --query-masquerade [--permanent] ``` # 端口转发 - 查看全部端口转发规则 ```bash firewall-cmd [--permanent] [--zone=zone] --list-forward-ports ``` - 启动 zone 中端口转发 ```bash firewall-cmd [--zone=] --add-forward-port=port=[-]:proto= \ { :toport=[-] | :toaddr=
| :toport=[-]:toaddr=
} \ [ --permanent | --timeout=seconds ] ``` - 禁用 zone 中端口转发 ```bash firewall-cmd [--zone=] --remove-forward-port=port=[-]:proto= \ { :toport=[-] | :toaddr=
| :toport=[-]:toaddr=
} \ [--permanent] ``` - 查看 zone 中端口转发 ```bash firewall-cmd [--zone=] --query-forward-port=port=[-]:proto= \ { :toport=[-] | :toaddr=
| :toport=[-]:toaddr=
} \ [--permanent] ``` # Rich Rules - 通用结构 ```bash firewall-cmd [--zone=] [ --permanent | --timeout=seconds ] \ <--add|--remove>-rich-rule='rule [family= \ source address= [invert=] \ destination address= [invert=] \ service name= \ port port=[-] \ protocol= \ icmp-block name= \ masquerade \ forward-port port=[-] protocol= to-port=[-] to-address=
\ log [prefix=] [level=] [limit value=] \ accept|reject [type=]|drop' ``` - 查看全部 rich rule ```bash firewall-cmd [--permanent] [--zone=zone] --list-rich-rules ``` - 具体参数解释见系统 man 手册 ```bash man firewalld.richlanguage 5 ``` # 应急模式(panic) - 启动 panic,即断网 ```bash firewall-cmd --panic-on ``` - 关闭 panic,即联网 ```bash firewall-cmd --panic-off ``` - 查询应急模式 ```bash firewall-cmd --query-panic ``` # 重新载入(reload) - 重新载入防火墙,不中断用户连接 ```bash firewall-cmd --reload ``` - 重新载入防火墙并中断用户连接 ```bash firewall-cmd --complete-reload ``` # 备注 - 参数 --timeout 是让规则生效一段时间,过期自动删除,不能与 --permanent 一起使用