CentOS7之后默认使用了firewall防火墙。
一、基本操作
# 查看是否开启
firewall-cmd --state
# 启动
systemctl start firewalld
# 停止
systemctl stop firewalld
# 重启
systemctl restart firewalld.service
# 开机启动
systemctl enable firewalld.service
# 开机禁用
systemctl disable firewalld
# 重新加载防火墙配置
firewall-cmd --reload
# 查看所有状态
firewall-cmd --list-all
# 查看public区域所有打开的端口
firewall-cmd --zone=public --list-ports
二、开放、禁用端口
1. 开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
80-端口号
tcp-协议
--permanent -使设置永久生效,不加的话机器重启之后失效
2. 禁用端口
防火墙相当于白名单,从列表里删除就可以禁用对应的端口了
firewall-cmd --zone=public --remove-port=80/tcp --permanent
3. 批量开放或限制端口
firewall-cmd --zone=public --add-port=6000-7000/tcp --permanent
firewall-cmd --zone=public --remove-port=6000-7000/tcp --permanent
三、开放或限制IP
可以针对IP操作,可以指定某ip访问某端口,也能禁用某ip访问某端口。
1. 端口针对某ip开放
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.55" port protocol="tcp" port="80" accept"
2. 限制ip访问端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.55" port protocol="tcp" port="80" reject"
3. 开放或限制IP地址段
这里用子网掩码的表格来表示。如:192.168.0.0~192.168.0.255 用 192.168.0.0/24表示
# 允许访问
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="80" accept"
# 限制访问
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="80" reject"
四、配置文件
firewalld防火墙配置是/etc/firewalld/zones/public.xml
,我们也可以通过修改配置文件来设置防火墙
<?xml version="1.0" encoding="utf-8"?>
<zone>
<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>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<port protocol="tcp" port="8080"/>
<rule family="ipv4">
<source address="192.168.0.55"/>
<port protocol="tcp" port="80"/>
<accept/>
</rule>
<rule family="ipv4">
<source address="192.168.0.0/24"/>
<port protocol="tcp" port="21"/>
<reject/>
</rule>
</zone>
五、设置区域
1. 常用的区域名称及策略规则
区域(noze) | 默认策略规则 |
---|---|
trusted | 允许所有的数据包进出 |
home | 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许进入 |
Internal | 等同于home区域 |
work | 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许进入 |
public | 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许进入 |
external | 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh服务相关,则允许进入 |
dmz | 拒绝进入的流量,除非与出去的流量相关;而如果流量与ssh服务相关,则允许进入 |
block | 拒绝进入的流量,除非与出去的流量相关 |
drop | 拒绝进入的流量,除非与出去的流量相关 |
2. 查看网卡及所在区域
$ firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eno1
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
target:目标
icmp-block-inversion:ICMP协议类型黑白名单开关(yes/no)
interfaces:关联的网卡接口
sources:来源,可以是IP地址,也可以是mac地址
services:允许的服务
ports:允许的目标端口,即本地开放的端口
protocols:允许通过的协议
masquerade:是否允许伪装(yes/no),可改写来源IP地址及mac地址
forward-ports:允许转发的端口
source-ports:允许的来源端口
icmp-blocks:可添加ICMP类型,当icmp-block-inversion为no时,这些ICMP类型被拒绝;当icmp-block-inversion为yes时,这些ICMP类型被允许。
rich rules:富规则,即更细致、更详细的防火墙规则策略,它的优先级在所有的防火墙策略中也是最高的。
可以看到当前激活(active)区域是public,区域下关联的网卡有eno1
3. 设置区域相关操作
# 查看默认当前使用的区域
firewall-cmd --get-default-zone
#查看系统默认活动区域名称、来源地址和关联的网卡
firewall-cmd --get-active-zones
#查看所有可用区域
firewall-cmd --get-zones
#查看指定网卡所在的区域
firewall-cmd --get-zone-of-interface=eno1
# 设置默认区域
firewall-cmd --set-default-zone=public
# 设置区域关联网卡
firewall-cmd --permanent --zone=drop --change-interface=eno1
# 区域中添加关联网卡
firewall-cmd --zone=drop -add-interface=eno1
# 区域中移除关联网卡
firewall-cmd --zone=drop -remove-interface=eno1
六、注意注意!!
-
修改之后记得使用
firewall-cmd --reload
重新加载配置使之生效。 -
如果你是用ssh连接上去修改的防火墙,如果之前防火墙未启用,你在启用之前先查看一下配置文件,是否有
<service name="ssh"/>
或开放了ssh对应的22端口。否则,当你启动防火墙之后,你将无法再用ssh连接服务器了。
网友评论