firewalld 和 iptables 的关系
firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。
对于centos7服务器来说,有的服务器firewalld和iptables两者都有的,有的服务器却只有firewalld;
firewalld的配置模式
firewalld的配置文件以xml格式为主(主配置文件firewalld.conf例外),他们有两个存储位置
1、/etc/firewalld/ 用户配置文件
2、/usr/lib/firewalld/ 系统配置文件,预置文件
我们知道每个zone就是一套规则集,但是有那么多zone,对于一个具体的请求来说应该使用哪个zone(哪套规则)来处理呢?这个问题至关重要,如果这点不弄明白其他的都是空中楼阁,即使规则设置的再好,不知道怎样用、在哪里用也不行。
对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:
1、source,也就是源地址 优先级最高
2、interface,接收请求的网卡 优先级第二
3、firewalld.conf中配置的默认zone 优先级最低
这三个的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去查找,如果前两个都找不到才会使用第三个,也就是学生在前面给大家讲过的在firewalld.conf中配置的默认zone。
firewalld 常用命令
通常情况下开放一个端口步骤所需命令如下:
- 启动:systemctl start firewalld
- 停止:systemctl stop firewalld
- 状态:firewall-cmd --state
- 添加:firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
- 重启:firewall-cmd --reload
- 查看:firewall-cmd --zone=public --query-port=80/tcp
- 删除:firewall-cmd --zone=public --remove-port=80/tcp --permanent
一、firewalld 安装、运行、停止、禁用命令
1、安装
root@localhost:~# yum install firewalld
2、启动 firewalld
root@localhost:~# systemctl start firewalld
3、停止 firewalld
root@localhost:~# systemctl stop firewalld
4、禁用 firewalld
root@localhost:~# systemctl disable firewalld
5、在系统引导时启动 firewalld
root@localhost:~# systemctl enable firewalld
二、firewalld配置命令
1、查看版本:
root@localhost:~# firewall-cmd --version
2、查看帮助:
root@localhost:~# firewall-cmd --help
3、显示状态:
root@localhost:~# firewall-cmd --state
4、查看区域信息:
root@localhost:~# firewall-cmd --get-active-zones
5、查看指定接口所属区域:$
root@localhost:~# firewall-cmd --get-zone-of-interface=eth0
6、拒绝所有包:
root@localhost:~# firewall-cmd --panic-on
7、取消拒绝状态:
root@localhost:~# firewall-cmd --panic-off
8、查看是否拒绝:
root@localhost:~# firewall-cmd --query-panic
三、firewall更新防火墙规则命令
1、无需断开连接,就是firewalld特性之一动态添加规则
root@localhost:~# firewall-cmd --reload
2、需要断开连接,类似重启服务
root@localhost:~# firewall-cmd --complete-reload
四、firewall 区域命令
1、将接口添加到区域,默认接口都在public
root@localhost:~# firewall-cmd --zone=public --add-interface=eth0
2、永久生效再加上 --permanent 然后reload防火墙
root@localhost:~# firewall-cmd --zone=public --add-interface=eth0 --permanent
root@localhost:~# firewall-cmd --reload
3、设置默认接口区域
root@localhost:~# firewall-cmd --set-default-zone=public #立即生效无需重启
五、firewall 服务、端口命令
1、查看所有打开的端口:
root@localhost:~# firewall-cmd --list-ports
2、加入一个端口到区域:
root@localhost:~# firewall-cmd --zone=dmz --add-port=8080/tcp
3、若要永久生效方法同上:
root@localhost:~# firewall-cmd --zone=dmz --add-port=8080/tcp --permanent
4、打开一个服务,类似于将端口可视化,服务需要在配置文件中添加,/etc/firewalld 目录下有services文件夹,这个不详细说了,详情参考文档
root@localhost:~# firewall-cmd --zone=work --add-service=smtp
5、移除服务
root@localhost:~# firewall-cmd --zone=work --remove-service=smtp
Firewalld 所有命令详细
用法:
firewall-cmd [选项...]
常规选项
-h,--help 打印帮助文档
-V,--version 打印firewalld的版本
-q,--quiet 不要打印状态消息
状态选项
--state 返回并打印firewalld状态
--reload 重新加载防火墙并保存状态信息
--complete-reload 完全重新加载防火墙和松散的状态信息
永久选项
--permanent 性永久设置一个选项,可用于[P]
Zone(区域)选项
--get-default-zone 打印连接和接口的默认区域
--set-default-zone= 设置默认区域
--get-active-zones 打印当前活动区域
--get-zones 打印预定义区域[P]
--get-services 打印预定义的服务[P]
--get-icmptypes 打印预定义的icmptypes [P]
--get-zone-of-interface= 打印界面绑定区域的名称[P]
--get-zone-of-source=[/] [/ mask]绑定的区域的打印名称[P]
--list-all-zones 列出所有区域添加或启用的所有内容[P]
--new-zone = 添加一个新区域[仅限P]
--delete-zone = 删除现有区域[仅限P]
--zone = 使用此区域设置或查询选项,否则使用默认区域,可用于与[Z]匹配的选项
--get-target 获取区域目标[仅限P]
--set-target= 设置区域目标[仅限P]
IcmpType选项
--new-icmptype= 添加新的icmptype [仅限P]
--delete-icmptype= 删除和现有icmptype [仅限P]
服务选项
--new-service= 添加一项新服务[仅限P]
--delete-service= 删除和现有服务[仅限P]
适应和查询区域的选项
--list-all 列出在区域中添加或启用的所有内容[P] [Z]
--list-services 为区域添加的列表服务[P] [Z]
--timeout = 仅在秒内启用一个选项可用于与[T]匹配的选项
--add-service= 为区域添加服务[P] [Z] [T]
---remove-service= 从区域中删除服务[P] [Z]
--query-service= 返回是否为区域添加了服务[P] [Z]
--list-ports 为区域添加的列表端口[P] [Z]
--add-port =[-]/ 为区域添加端口[P] [Z] [T]
--remove-port =[-]/ 从区域删除端口[P] [Z]
--query-port=[-]/ 返回是否已为区域[P]添加端口[Z]
--list-icmp-blocks 列出为区域添加的Internet ICMP类型块[P] [Z]
--add-icmp-block= 添加区域的ICMP块[P] [Z] [T]
--remove-icmp-block= 从区域删除ICMP块[P] [Z]
--query-icmp-block= 返回是否为区域添加了ICMP块[P] [Z]
--list-forward-ports 列出为区域添加的IPv4转发端口[P] [Z]
--add-forward-port=port=[-]:proto=[:toport=[-]][:toaddr=[/]] 为区域添加IPv4转发端口[P] [Z] [T]
--remove-forward-port=port=[-]:proto=[:toport=[-]][:toaddr=[/]] 从区域删除IPv4转发端口[P] [Z]
--query-forward-port=port=[-]:proto=[:toport=[-]][:toaddr=[/]] 返回是否已添加IPv4转发端口,一个区域[P] [Z]
--add-masquerade 为区域启用IPv4伪装[P] [Z] [T]
--remove-masquerade 禁用区域的IPv4伪装[P] [Z]
--query-masquerade 返回是否已为a启用了IPv4伪装区域[P] [Z]
--list-rich-rules 列出为区域添加的富语言规则[P] [Z]
--add-rich-rule= 为区域添加丰富的语言规则“规则”[P] [Z] [T]
--remove-rich-rule= 从区域中移除丰富的语言规则'规则'[P] [Z]
--query-rich-rule= 返回是否有丰富的语言规则“规则”,为区域添加[P] [Z]选项来处理接口绑定
--list-interfaces 列出绑定到区域的接口[P] [Z]
--add-interface= 绑定到区域[P] [Z]
--change-interface= 更改区域绑定到[Z]
--query-interface= 查询是否绑定到区域[P] [Z]
--remove-interface= 删除区域绑定[P] [Z]选项来处理源绑定
--list-sources 列出绑定到区域的源代码[P] [Z]
--add-source=[/] 将[/]绑定到区域[P] [Z]
--change-source=[/] 更改区域[/]绑定到[Z]
--query-source=[/] 查询[/]是否绑定到区域[P] [Z]
--remove-source=[/] 删除区域[/]的绑定[P] [Z]直接选项
--direct 所有直接选项的第一个选项
--get-all-chains 获得所有连锁店[P]
--get-chains {ipv4 | ipv6 | eb} 获取所有链表添加到表[P]
--add-chain {ipv4 | ipv6 | eb} 在表中添加一个新链[P]
--remove-chain {ipv4 | ipv6 | eb} 从表中删除链[P]
--query-chain {ipv4 | ipv6 | eb} 返回链表是否已经添加到表格[P]
--get-all-rules 获取所有规则[P]
--get-rules {ipv4 | ipv6 | eb} 获取添加到表中的所有规则[P]
--add-rule {ipv4 | ipv6 | eb} ... 将规则添加到链表中[P]
--remove-rule {ipv4 | ipv6 | eb} ... 从链表中删除具有优先级的规则[P]
--remove-rules {ipv4 | ipv6 | eb} 从链表中删除规则[P]
--query-rule {ipv4 | ipv6 | eb} ... 返回表中是否在链中添加了具有优先级的规则[P]
--passthrough {ipv4 | ipv6 | eb} ... 传递一个命令
--get-all-passthroughs 获取所有直通规则[仅限P]
--get-passthroughs {ipv4 | ipv6 | eb} ... 获取直通规则[仅限P]
--add-passthrough {ipv4 | ipv6 | eb} ... 添加新的passthrough规则[仅限P]
--remove-passthrough {ipv4 | ipv6 | eb} ... 删除passthrough规则[仅限P]
--query-passthrough {ipv4 | ipv6 | eb} ... 返回是否已添加直通规则[仅限P]锁定选项
--lockdown-on 启用锁定。
--lockdown-off 禁用锁定。
--query-lockdown 查询锁定是否为enabledLockdown白名单选项
--list-lockdown-whitelist-commands 列出白名单上的所有命令行[P]
--add-lockdown-whitelist-command= 将该命令添加到白名单[P]
--remove-lockdown-whitelist-command= 从白名单中删除命令[P]
--query-lockdown-whitelist-command= 查询该命令是否在白名单上[P]
--list-lockdown-whitelist-contexts 列出白名单上的所有上下文[P]
--add-lockdown-whitelist-context= 将上下文上下文添加到白名单[P]
--remove-lockdown-whitelist-context= 从白名单中删除上下文[P]
--query-lockdown-whitelist-context= 查询上下文是否在白名单上[P]
--list-lockdown-whitelist-uids 列出白名单上的所有用户ID [P]
--add-lockdown-whitelist-uid= 将用户标识uid添加到白名单[P]
--remove-lockdown-whitelist-uid= 从白名单中删除用户ID uid [P]
--query-lockdown-whitelist-uid= 查询用户标识uid是否在白名单中[P]
--list-lockdown-whitelist-users 列出白名单上的所有用户名[P]
--add-lockdown-whitelist-user= 将用户名称用户添加到白名单[P]
--remove-lockdown-whitelist-user= 从白名单中删除用户名用户[P]
--query-lockdown-whitelist-user= 查询用户名是否在白名单中[P] Panic选项
-- panic-on 启用恐慌模式
-- panic-off 禁用恐慌模式
--query-panic 查询是否启用恐慌模式