Linux防火墙 firewall

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>