Centos6 使用的是iptables,Centos7 使用的是 filewall(-cmd)

iptables 用于过滤数据包,属于网络层防火墙。

firewall 能够允许哪些服务可用,那些端口可用…属于更高一层的防火墙。


firewalld中常用的区域名称及策略规则

区域 默认规则策略
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 拒绝流入的流量,除非与流出的流量相关

firewall-cmd命令中使用的参数以及作用

参数 作用
--get-default-zone 查询默认的区域名称
--set-default-zone=<区域名称> 设置默认的区域,使其永久生效
--get-zones 显示可用的区域
--get-services 显示预先定义的服务
--get-active-zones 显示当前正在使用的区域与网卡名称
--add-source= 将源自此IP或子网的流量导向指定的区域
--remove-source= 不再将源自此IP或子网的流量导向某个指定区域
--add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称> 将某个网卡与区域进行关联
--list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
--list-all-zones 显示所有区域的网卡配置参数、资源、端口以及服务等信息
--add-service=<服务名> 设置默认区域允许该服务的流量
--add-port=<端口号/协议> 设置默认区域允许该端口的流量
--remove-service=<服务名> 设置默认区域不再允许该服务的流量
--remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
--reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
--panic-on 开启应急状况模式
--panic-off 关闭应急状况模式
1.firewalld的基本使用

启动:

systemctl start firewalld

如果出现如下信息,则表示未开启防火墙

Failed to start firewalld.service: Unit is masked.

# 则需执行如下命令
systemctl unmask firewalld

查看状态:

systemctl status firewalld

停止:

systemctl disable firewalld

禁用:

systemctl stop firewalld

在开机时启用一个服务:

systemctl enable firewalld.service

在开机时禁用一个服务:

systemctl disable firewalld.service

查看服务是否开机启动:

systemctl is-enabled firewalld.service

查看已启动的服务列表:

systemctl list-unit-files|grep enabled

查看启动失败的服务列表:

systemctl --failed
2.配置firewalld-cmd
# 查看版本:
firewall-cmd --version

# 查看帮助:
firewall-cmd --help

# 显示状态:
firewall-cmd --state

# 查看防火墙规则:
firewall-cmd --list-all

# 查看所有打开的端口
firewall-cmd --zone=public --list-ports

# 更新防火墙规则
firewall-cmd --reload
# 查看区域信息:
firewall-cmd --get-active-zones

# 查看指定接口所属区域:
firewall-cmd --get-zone-of-interface=eth0

# 拒绝所有包:
firewall-cmd --panic-on

# 取消拒绝状态:
firewall-cmd --panic-off

# 查看是否拒绝:
firewall-cmd --query-panic
3.通过firewall-cmd 开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent   #作用域是public,开放tcp协议的80端口,一直有效
firewall-cmd --zone=public --add-port=80-90/tcp --permanent #作用域是public,批量开放tcp协议的80-90端口,一直有效
firewall-cmd --zone=public --add-port=80/tcp  --add-port=90/tcp --permanent #作用域是public,批量开放tcp协议的80、90端口,一直有效
firewall-cmd --zone=public --add-service=http --permanent #开放的服务是http协议,一直有效
firewall-cmd --reload    # 重新载入,更新防火墙规则,这样才生效。通过systemctl restart firewall 也可以达到
firewall-cmd --zone= public --query-port=80/tcp  #查看tcp协议的80端口是否生效
firewall-cmd --zone= public --remove-port=80/tcp --permanent  # 删除
firewall-cmd --list-services
firewall-cmd --get-services
firewall-cmd --add-service=<service>
firewall-cmd --delete-service=<service>

在每次修改端口和服务后/etc/firewalld/zones/public.xml文件就会被修改,所以也可以在文件中之间修改,然后重新加载
使用命令实际也是在修改文件,需要重新加载才能生效。

4.使用备忘
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept'    //设置某个ip访问某个服务
firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept' //删除配置
firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.0.1/2 port port=80 protocol=tcp accept'     //设置某个ip访问某个端口
firewall-cmd --permanent --remove-rich-rule 'rule family=ipv4 source address=192.168.0.1/2 port port=80 protocol=tcp accept'     //删除配置
firewall-cmd --query-masquerade  # 检查是否允许伪装IP
firewall-cmd --add-masquerade    # 允许防火墙伪装IP
firewall-cmd --remove-masquerade # 禁止防火墙伪装IP

firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080   # 将80端口的流量转发至8080
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 # 将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口
作者:joker.liu  创建时间:2021-09-20 12:58
最后编辑:admin  更新时间:2022-12-23 10:16