centos7防火墙firewalld详解
防火墙初识
防火墙是整个系统安全性最重要的方面,能够有效的防止网络攻击。所以我们需要详细了解防火墙的知识。从centos 7开始,使用了firewalld替代了centos 6中的iptables。之前在linux运维开发(一)----------防火墙使用过以下命令:
firewall-cmd --zone=public -add-port=9999/tcp --permanent
firewalld-cmd --reload
firewall-cmd --zone=public --list-ports | grep 9999
接下来我们就来好好讲解这个命令的作用
通过了解以上命令,我们发现有一个–zone=public的参数设置,这是什么意思呢?讲到这里,我们就需要了解一个概念:区域。定义如下:
区域是预定义的规则集,用于根据计算机连接到的网络上的信任级别指定应允许的流量。您可以将网络接口和源分配给区域。
Bellow是FirewallD提供的区域,根据区域的信任级别从不信任到可信:
- drop:删除所有传入连接而不发出任何通知。仅允许传出连接。
- block:所有传入连接都被拒绝,其中包含用于IPv4的icmp-host-prohibited消息和用于IPv6n的icmp6-adm-prohibited。仅允许传出连接。
- public:用于不受信任的公共场所。您不信任网络上的其他计算机,但您可以允许选定的传入连接。
- external:用于在系统充当网关或路由器时启用NAT伪装的外部网络。仅允许选定的传入连接。
- internal:用于在系统充当网关或路由器时在内部网络上使用。网络上的其他系统通常是可信的。仅允许选定的传入连接。
- dmz:用于位于非军事区的计算机,该计算机对网络其余部分的访问权限有限。仅允许选定的传入连接。
- work:用于工作机器。网络上的其他计算机通常是可信的。仅允许选定的传入连接。
- home:用于家用机器。网络上的其他计算机通常是可信的。仅允许选定的传入连接。
- trusted:接受所有网络连接。信任网络中的所有计算机。
打开/关闭防火墙
systemctl start firewalld
systemctl stop firewalld
启用/禁用防火墙
systemctl enable firewalld
systemctl disable firewalld
防火墙区域的查看
查看可用区域:
firewall-cmd --get-zones
查看默认区域:
firewall-cmd --get-default-zone
查看被激活的的区域:
firewall-cmd --get-active-zones
查看指定区域信息
查看端口信息:
firewall-cmd --zone=public --list-ports
查看服务信息:
firewall-cmd --zone=public --list-services
查看协议信息:
firewall-cmd --zone=public --list-protocols
查看网络接口信息:
firewall-cmd --zone=public --list-interfaces
查看所有信息:
firewall-cmd --zone=public --list-all
规则永久化
在进行修改操作后面使用 --permanment使命令永久化,–add-xxx、remove-xxx等命令
规则生效方式
–reload:重新载入配置信息,保持状态信息
firewall-cmd --reload
–complete-reload:重新载入配置信息,会丧失状态信息,相当于重启
firewall-cmd --complete-reload
添加规则
添加端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent
添加服务:
firewall-cmd --zone=public --add-service=mysql --permanent
添加协议:
firewall-cmd --zone=public -add=protocol=tcp --permanent
添加网络接口(将会使ens33接口处于work区域):
firewall-cmd --zone=work --add-interface=ens33 --permanent
等同
firewall-cmd --zone=work --change-interface=ens33 --permanent
删除规则
删除端口:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
删除服务:
firewall-cmd --zone=public --remove-service=mysql --permanent
删除协议:
firewall-cmd --zone=public --remove-protocol=tcp --permanent
删除接口:
firewall-cmd --zone=public --remove-interface=ens33 --permanent
验证规则绑定
查询端口信息:
firewall-cmd --zone=public --query-port=80/tcp
查询服务信息:
firewall-cmd --zone=public --query-service=mysql
查询协议信息:
firewall-cmd --zone=public --query-protocol=tcp
查询接口信息:
firewall-cmd --zone=public --query-interface=ens33
端口转发流量
1、为所需区域开启伪装:
firewall-cmd --zone=external --add-masquerade --permanent
2、验证是否开启伪装:
firewall-cmd --zone=external --query-masquerade --permanent
3、转发流量:
- 将流量从端口80转发到同一服务器上的端口8080
firewall-cmd --zone=external --add-forward-port-80:proto=tcp:toport=8080 --permanent
- 流量从端口80转发到IP 192.168.1.2的服务器上的端口80:
firewall-cmd --zone=external --add-forward-port=80:proto=tcp:toaddr=192.1681.2 --permanent
- 流量从端口80转发到IP 192.168.1.2的服务器上的端口8080:
firewall-cmd --zone=external -add-forward-port=80:proto=tcp:toport=8080:toaddr=192.168.1.2 --permanent
4、为指定区域去除伪装:
firewall-cmd --zone=external --remove-masquerade --permanent
查看所有区域的所有信息:
firewall-cmd --list-all-zones
更多问题可以加公众号:代码小栈,期待为您解决更多问题