Linux防火墙 firewall
- 基础命令
- 11天前
- 18热度
- 0评论
centos7 开始防火墙使用 firewalld
防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。
Firewall 能将不同的网络连接归类到不同的信任级别,Zone 提供了以下几个级别:
- drop: 丢弃所有进入的包,而不给出任何响应
- block: 拒绝所有外部发起的连接,允许内部发起的连接
- public: 允许指定的进入连接
- external: 同上,对伪装的进入连接,一般用于路由转发
- dmz: 允许受限制的进入连接
- work: 允许受信任的计算机被限制的进入连接,类似 workgroup
- home: 同上,类似 homegroup
- internal: 同上,范围针对所有互联网用户
- trusted: 信任所有连接
1、基础操作
1.1、基础操作
开启、关闭、重启防火墙
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld
设置开机启动
systemctl enable firewalld
1.2、zones
查询所有区域情况
firewall-cmd --list-all-zones
查询默认区域的设置
firewall-cmd --get-default-zone
设置默认区域
firewall-cmd --set-default-zone=public
获取目前生效的区域
firewall-cmd --get-active-zones
1.3、接口(网卡)
获取某个接口所属的区域
firewall-cmd --get-zone-of-interface=eth0
在某个区域下增加接口
firewall-cmd --zone=public --add-interface=eth0
# 添加 eth0 至 public
firewall-cmd --zone=public --remove-interface=eth0
# 在public中删除 eth0
1.4、查询防火墙各种状态
查询当前防火墙状态
firewall-cmd --stat
查询目前防火墙的规则
firewall-cmd --list-all
查询防火墙支持的所有区域
firewall-cmd --get-zones
查询防火墙支持的所有服务
firewall-cmd --get-service
查询防火墙支持的所有icmp类型
firewall-cmd --get-icmptypes
1.5、刷新防火墙
firewall-cmd --reload
firewall-cmd --complete-reload
2、通用配置项
永久有效,还是临时生效
--permanent
# 加上该配置表示写入配置文件,永久生效,即重启防火墙依旧生效,否则重启防火墙或者刷新防火墙就失效
# 但是因为加了该配置,所以只是写入防火墙配置,没有马上生效,马上生效需要调用 --reload 刷新防火墙规则
限制生效时间
--timeout=60
#加上该配置表示60秒以后失效
针对某个区域设置规则
--zone=public
# 一般设置规则时都要求加上该配置,即针对某个区域作出设置。也可以不加该配置,表示对默认区域设置
3、添加服务
3.1、配置防火墙默认支持的服务
增加服务
firewall-cmd --permanent --zone=public --add-service=http
删除服务
firewall-cmd --permanent --zone=public --remove-service=http
查询所有的服务
firewall-cmd --permanent --zone=public --list-service
详细配置规则
firewall-cmd [--zone=<zone>] --add-service=<service> [--timeout=<seconds>]
3.2、查询当前防火墙支持的所有服务
firewall-cmd --get-service
所有的服务对应的配置在目录: /usr/lib/firewalld/servies/
3.3、新增或者修改服务
修改服务一般是拷贝原有的服务配置至防火墙配置目录下,并修改配置,如:
cp /usr/lib/firewalld/servies/ssh.xml /etc/firewalld/services/
vi /etc/firewalld/services/ssh.xml
如果是新增服务,则直接在/etc/firewalld/services/目录下创建服务配置
4、配置端口
增加端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp
增加批量端口
firewall-cmd --permanent --zone=public --add-port=8080-8090/tcp
禁用端口
firewall-cmd --permanent --zone=public --remove-port=8080/tcp
查询所有的端口
firewall-cmd --zone=public --list-ports
详细配置
firewall-cmd [--zone=<zone>] --add-port=<port>[-<port>]/<protocol> [--timeout=<seconds>]
5、富规则
仅允许部分IP访问本机服务配置,移除
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service name="http" accept"
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service name="http" accept"
仅允许部分IP访问本机端口配置
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.4/24" port protocol="tcp" port="8080" accept"
部分端口转发
firewall-cmd --add-rich-rule='rule family="ipv4" source address="122.229.31.227" forward-port port="8660" protocol="tcp" to-port="8660" to-addr="192.168.71.33"'
6、端口转发
6.1、首先要打开端口伪装
查看
firewall-cmd --zone=public --query-masquerade
打开伪装
firewall-cmd --zone=public --add-masquerade [--permanent]
关闭伪装
firewall-cmd --zone=public --remove-masquerade
6.2、增加转发规则
转发 tcp 22 端口至 3753
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=3753 [--permanent]
转发 22 端口数据至另一个 ip 的相同端口上
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100
转发 22 端口数据至另一 ip 的 2055 端口上
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100
6.3、详细规则说明
# 新增
firewall-cmd [--zone=<zone>] --add-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
# 移除
firewall-cmd [--zone=<zone>] --remove-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
# 查询
firewall-cmd [--zone=<zone>] --query-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
7、防火墙配置文件
# vi /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="dhcpv6-client"/>
<service name="ssh"/>
<rule family="ipv4">
<source address="192.168.0.4/24"/>
<service name="http"/>
<accept/>
</rule>
</zone>