## 介绍
防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。
### Firewall 能将不同的网络连接归类到不同的信任级别,Zone 提供了以下几个级别:
```
丢弃区域(Drop Zone):如果使用丢弃区域,任何进入的数据包将被丢弃。这个类似与我们之前使用iptables -j drop。使用丢弃规则意味着将不存在响应,只有流出的网络连接有效。
阻塞区域(Block Zone):阻塞区域会拒绝进入的网络连接,返回icmp-host-prohibited,只有服务器已经建立的连接会被通过。
公共区域(Public Zone):只接受那些被选中的连接,而这些通过在公共区域中定义相关规则实现。服务器可以通过特定的端口数据,而其它的连接将被丢弃。
外部区域(External Zone):这个区域相当于路由器的启用伪装(masquerading)选项。只有指定的连接会被接受,而其它的连接将被丢弃或者不被接受。
隔离区域(DMZ Zone):如果想要只允许给部分服务能被外部访问,可以在DMZ区域中定义。它也拥有只通过被选中连接的特性。
工作区域(Work Zone):在这个区域,我们只能定义内部网络。比如私有网络通信才被允许。
家庭区域(Home Zone):这个区域专门用于家庭环境。我们可以利用这个区域来信任网络上其它主机不会侵害你的主机。它同样只允许被选中的连接。
内部区域(Internal Zone):这个区域和工作区域(Work Zone)类似,只有通过被选中的连接。
信任区域(Trusted Zone):信任区域允许所有网络通信通过。
```
## CentOS7查看防火墙状态,启动,关闭防火墙
## systemctl
- 启动:
`systemctl start firewalld`
- 停止:
`systemctl stop firewalld`
- 重启:
`systemctl restart firewalld`
- 查看状态:
`systemctl status firewalld`
- 开机启动:
`systemctl enable firewalld`
- 开机禁用:
`systemctl disable firewalld`
- 查看服务是否开机启动:
`systemctl is-enabled firewalld`
- 查看已启动的服务列表:
`systemctl list-unit-files | grep enabled`
- 查看启动失败的服务列表:
`systemctl --failed`
## firewall-cmd
- 查看版本:
`firewall-cmd --version`
- 显示所有配置:
`firewall-cmd --list-all-zones`
- 查看帮助:
`firewall-cmd --help`
- 显示状态:
`firewall-cmd --state`
- 查看防火墙规则:
`firewall-cmd --zone=public --list-all`
- 查看所有打开的端口:
`firewall-cmd --zone=public --list-ports`
- 从public添加 interface:
`firewall-cmd --zone=public --add-interface=eno16777736`
- 从public移除 interface:
`firewall-cmd --zone=public --remove-interface=eno16777736`
- 改变网卡接口的所属域(ps:一个接口只能属于一个域):
`firewall-cmd --zone=public --change-interface=eth1`
- 查看区域信息:
`firewall-cmd --get-active-zones`
- 查看默认的zone:
`firewall-cmd --get-default-zone`
- 设置默认的zone:
`firewall-cmd --set-default-zone=trusted`
- 查看指定接口所属区域:
`firewall-cmd --get-zone-of-interface=eth0`
- 拒绝所有包:
`firewall-cmd --panic-on`
- 取消拒绝状态:
`firewall-cmd --panic-off`
- 查看是否拒绝:
`firewall-cmd --query-panic`
- 将发往80端口的请求转发到8080:
`firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080`
- 开放某个端口:
`firewall-cmd --zone=public --add-port=80/tcp --permanen`
- 查看某个端口是否开放:
`firewall-cmd --zone=public --query-port=80/tcp`
- 删除某个端口:
`firewall-cmd --zone=public --remove-port=80/tcp --permanent`
- 开放端口区间:
`firewall-cmd --permanent --zone=public --add-port=8080-9999/tcp`
- 针对某个IP开放端口规则:
`firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="6379" accept"`
`firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.233" accept"`
- 删除某个规则:
`firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.51" accept"`
- 针对一个IP段访问:
`firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/16" accept"`
`firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="9200" accept"`
- 禁止某个IP访问某个端口:
`firewall-cmd --zone=public --add-rich-rule "rule family="ipv4" source address=192.168.1.4 port port=22 protocol=tcp reject"`
- 获取全部的服务:
`firewall-cmd --get-services`
- 查看某域的服务:
`firewall-cmd --zone=public --list-services`
- 域中添加服务:
`firewall-cmd --zone=public --add-service=http`
- 删除服务:
`firewall-cmd --zone=public --permanent --remove-service=http`
- 重新载入使配置立即生效:
`firewall-cmd --reload`
### 参数说明:
* --zone:指定域
* --permanent :永久生效
* --add-rich-rule:添加一条规则
* source address:来源IP
* --query-port:查询某个端口
## 编写 firewall 服务文件
firewall 的服务配置XML文件位置都存放在 `/usr/lib/firewalld/service` 和 `/etc/firewalld/service` 下面
一份简易的配置示例:
```
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
<port protocol="tcp" port="22"/>
</service>
```
一份教复杂的配置示例:
```
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<port protocol="tcp" port="80"/>
<port protocol="udp" port="8080-9999"/>
<rule family="ipv4">
<source address="192.168.0.0/24"/>
<accept/>
</rule>
<rule family="ipv4">
<source address="192.168.142.166"/>
<port protocol="tcp" port="6379"/>
<accept/>
</rule>
<rule family="ipv4">
<source address="192.168.1.4"/>
<port protocol="tcp" port="22"/>
<reject/>
</rule>
</service>
```
- Linux常用命令
- find命令常用用法
- grep命令常用用法
- Sublime Text常用插件
- Laravel artisan 命令工具
- Centos使用Bind搭建DNS服务器
- Docker
- Docker安装
- 镜像使用
- 容器使用
- 使用Docker Hub
- Linux下编译安装PHP7.2.14
- Git常用操作
- Laravel-env使用注意事项
- Linux系统安装docker后,firewall规则无效不起作用
- CentOS7 firewall 防火墙
- Mysql
- mysql查看binlog日志
- mysql使用sql备份文件恢复数据库
- mysqldump备份数据库
- mysql用户操作
- mysql基本命令
- Explain详解
- 先排序后分组
- 查询逗号分隔的id,翻译出相对应name,同样用逗号分隔
- 解决VirtualBox安装增强工具失败问题
- curl常用用法
- strtotime() 的各种用法
- 使用kebeadm搭建k8s
- win10激活