Firewalld的简单使用
从Centos7开始默认防火墙就已经更换为了firewall,替换了之前的iptables
Firewalld服务采用firewall-cmd或firewall-config(图形化工具)来动态管理kernel netfilter的临时或永久的接口规则,并实时生效而无需重启服务,firewalld增加了zone的概念。
zone
- public(公共):公共域,接受经过筛选的连接
- trusted(信任):允许任何请求(白名单)
- block(限制):拒绝所有请求,给客户端回复拒绝信息
- dmz(非军事):仅接受经过选择的连接
常用的区域有4个:public、block、drop、trusted,其实一般都是使用public区,public也是默认区域
firewalld 是如何规定一个网络请求规则,首先会根据 zone 上绑定的 source 进行判断,然后再根据interface 进行判断
Firewalld服务管理
systemctl status firewalld 或者 firewall-cmd --state 查看Firewalld的状态
systemctl stop firewalld 停止Firewalld
systemctl start firewalld 启动Firewalld
systemctl enable firewalld 设置Firewalld开机启动
systemctl disable firewalld 禁用Firewalld
Firewall-cmd常用命令
zone管理
- 显示当前系统中的默认区域
firewall-cmd --get-default-zone
- 显示默认区域的所有规则
firewall-cmd --list-all
- 显示当前正在使用的区域
firewall-cmd --get-active-zones
- 设置默认区域
firewall-cmd --set-default-zone=trusted
firewall-cmd --get-default-zone
service管理
语法:
- 显示当前zone中的service
firewall-cmd --list-service
- 显示指定zone中的service
firewall-cmd --list-service --zone=trusted
- 显示当前支持的所有service
firewall-cmd --get-service
- 添加service到默认zone
firewall-cmd --add-service=jenkins
- 添加service到指定zone
firewall-cmd --add-service=http --zone=trusted
- 查看service的具体信息
firewall-cmd --info-service=http
- 创建一个新的service
firewall-cmd --new-service=testservice --permanent
示例:
创建一个叫nginx的service,开放端口为18080
[root@10-4-7-101 ~]# firewall-cmd --delete-service=svnserver --permanent
success
[root@10-4-7-101 ~]# firewall-cmd --new-service=nginx --permanent
success
[root@10-4-7-101 ~]# firewall-cmd --service=nginx --add-port=18080/tcp --permanent
success
[root@10-4-7-101 ~]# firewall-cmd --reload
success
[root@10-4-7-101 ~]# firewall-cmd --info-service=nginx
nginx
ports: 18080/tcp
protocols:
source-ports:
modules:
destination:
注意:--permanent代表永久有效,需要重启firewalld服务或者使用firewall-cmd --reload重新加载配置才能生效。若配置时不带有此选项,表示即时生效,但是当firewall重启或者配置重新加载时这些规则会失效,也可以使用firewall-cmd --runtime-to-permanent命令将当前运行的配置写入配置文件
端口管理
- 列出指定zone下开放的端口,默认区域可以省略参数--zone
firewall-cmd --list-port --zone=public
- 允许TCP协议80端口到public区域
firewall-cmd --zone=public --add-port=80/tcp
- 允许UDP协议5000-6000端口到public区域
firewall-cmd --zone=public --add-port=5000-6000/udp
- 从public区域删除TCP协议的80端口
firewall-cmd --zone=public --remove-port=80/tcp
富语言规则
语法:
--add-rich-rule='<RULE>' #在指定的区域添加一条富语言规则
--remove-rich-rule='<RULE>' #在指定的区删除一条富语言规则
--query-rich-rule='<RULE>' #找到规则返回0,找不到返回1
--list-rich-rules #列出指定区里的所有富语言规则
示例:
1、允许10.4.7.100主机能够访问http服务
firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=10.4.7.100 service name=http accept'
2、允许10.4.7.0/24段能访问8080端口
firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=10.4.7.0/24 port port=8080 protocol=tcp accept'
3、当访问IP是10.4.7.100主机,将请求的8080端口转发至后端10.4.7.200的9999端口
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.4.7.100 forward-port port=8080 protocol=tcp to-port=9999 to-addr=10.4.7.200'
4、禁止所有主机ping
firewall-cmd --add-rich-rule='rule protocol value=icmp drop'
扩展一、Block和Drop的区别
两者都是拒绝所有请求,唯一的区别是block会给请求方一个拒绝信息,drop则是直接丢弃请求信息不回复,这里测试对一下,可以看到,当block的时候我们ping还是可以接收到拒绝信息,但是drop的时候任何信息都接受不到。