Firewalld学习手记

CentOS 7中,引入了一个新的服务,Firewalld,下面一张图,让大家明确的了解Firewalliptables之间的关系与区别。

firewall stack

安装它,只需
1
# yum install firewalld

如果需要图形界面的话,则再安装

1
# yum install firewall-config

一、介绍

防火墙守护firewalld服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持ipv4ipv6,并支持网桥,采用firewall-cmd (command)firewall-config (gui)来动态的管理kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。

zone

Firewall 能将不同的网络连接归类到不同的信任级别,Zone 提供了以下几个级别:

drop: 丢弃所有进入的包,而不给出任何响应
block: 拒绝所有外部发起的连接,允许内部发起的连接
public: 允许指定的进入连接
external: 同上,对伪装的进入连接,一般用于路由转发
dmz: 允许受限制的进入连接
work: 允许受信任的计算机被限制的进入连接,类似 workgroup
home: 同上,类似 homegroup
internal: 同上,范围针对所有互联网用户
trusted: 信任所有连接

过滤规则

source: 根据源地址过滤
interface: 根据网卡过滤
service: 根据服务名过滤
port: 根据端口过滤
icmp-block: icmp 报文过滤,按照 icmp 类型配置
masquerade: ip 地址伪装
forward-port: 端口转发
rule: 自定义规则

其中,过滤规则的优先级遵循如下顺序:

source
interface
firewalld.conf

二、使用方法

1
2
3
4
5
# systemctl start firewalld # 启动,
# systemctl enable firewalld # 开机启动
# systemctl stop firewalld # 关闭
# systemctl disable firewalld # 取消开机启动
# systemctl status firewalld # 查看状态,或使用命令firewall-cmd --state

0. 配置firewalld

1
2
$ firewall-cmd –version # 查看版本
$ firewall-cmd –help # 查看帮助

查看设置

1
2
3
4
5
6
$ firewall-cmd –state # 显示状态
$ firewall-cmd –get-active-zones # 查看区域信息
$ firewall-cmd –get-zone-of-interface=eth0 # 查看指定接口所属区域
# firewall-cmd –panic-on # 拒绝所有包
# firewall-cmd –panic-off # 取消拒绝状态
$ firewall-cmd –query-panic # 查看是否拒绝

具体的规则管理,可以使用firewall-cmd,具体的使用方法可以

1
2
3
4
5
$ firewall-cmd --help
--zone=NAME # 指定 zone
--permanent # 永久修改,--reload 后生效
--timeout=seconds # 持续效果,到期后自动移除,用于调试,不能与 --permanent 同时使用

1. 查看规则

查看运行状态

1
$ firewall-cmd --state

查看已被激活的Zone信息

1
2
3
$ firewall-cmd --get-active-zones
public
interfaces: eth0 eth1

查看指定接口的Zone信息

1
2
$ firewall-cmd --get-zone-of-interface=eth0
public

查看指定级别的接口

1
2
$ firewall-cmd --zone=public --list-interfaces
eth0

查看指定级别的所有信息,譬如public

1
2
3
4
5
6
7
8
9
10
$ firewall-cmd --zone=public --list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client http ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

查看所有级别被允许的信息

1
$ firewall-cmd --get-service

查看重启后所有Zones级别中被允许的服务,即永久放行的服务

1
$ firewall-cmd --get-service --permanent

2. 管理规则

1
2
3
4
5
# firewall-cmd --panic-on # 丢弃
# firewall-cmd --panic-off # 取消丢弃
# firewall-cmd --query-panic # 查看丢弃状态
# firewall-cmd --reload # 更新规则,不重启服务
# firewall-cmd --complete-reload # 更新规则,重启服务

添加某接口至某信任等级,譬如添加eth0public,永久修改

1
# firewall-cmd --zone=public --add-interface=eth0 --permanent

设置public为默认的信任级别

1
# firewall-cmd --set-default-zone=public

a. 管理端口

列出dmz级别的被允许的进入端口

1
# firewall-cmd --zone=dmz --list-ports

允许tcp端口8080dmz级别

1
# firewall-cmd --zone=dmz --add-port=8080/tcp

允许某范围的udp端口至public级别,并永久生效

1
# firewall-cmd --zone=public --add-port=5060-5059/udp --permanent

b. 网卡接口

列出public zone所有网卡

1
# firewall-cmd --zone=public --list-interfaces

eth0添加至public zone永久

1
# firewall-cmd --zone=public --permanent --add-interface=eth0

eth0存在与public zone,将该网卡添加至work zone,并将之从public zone中删除

1
# firewall-cmd --zone=work --permanent --change-interface=eth0

删除public zone中的eth0永久

1
# firewall-cmd --zone=public --permanent --remove-interface=eth0

c. 管理服务

添加smtp服务至work zone

1
# firewall-cmd --zone=work --add-service=smtp

移除work zone中的smtp服务

1
# firewall-cmd --zone=work --remove-service=smtp

d. 配置external zone中的ip地址伪装

查看

1
# firewall-cmd --zone=external --query-masquerade

打开伪装

1
# firewall-cmd --zone=external --add-masquerade

关闭伪装

1
# firewall-cmd --zone=external --remove-masquerade

e. 配置public zone的端口转发

要打开端口转发,则需要先

1
# firewall-cmd --zone=public --add-masquerade

然后转发tcp 22端口至3753

1
# firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=3753

转发22端口数据至另一个ip192.168.1.100的相同端口上

1
# firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100

转发22端口数据至ip192.168.1.1002055端口上

1
# firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100

f. 配置public zoneicmp

查看所有支持的icmp类型

1
2
# firewall-cmd --get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded

列出

1
# firewall-cmd --zone=public --list-icmp-blocks

添加echo-request屏蔽

1
# firewall-cmd --zone=public --add-icmp-block=echo-request [--timeout=seconds]

移除echo-reply屏蔽

1
# firewall-cmd --zone=public --remove-icmp-block=echo-reply

g.IP封禁

1
# firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='222.222.222.222' reject"

以上都是一些常用方法,更多高级方法,请参考:


转载自:https://havee.me/linux/2015-01/using-firewalls-on-centos-7.html

文章目录
  1. 1. 一、介绍
    1. 1.1. zone
    2. 1.2. 过滤规则
  2. 2. 二、使用方法
    1. 2.1. 0. 配置firewalld
    2. 2.2. 1. 查看规则
    3. 2.3. 2. 管理规则
      1. 2.3.1. a. 管理端口
      2. 2.3.2. b. 网卡接口
      3. 2.3.3. c. 管理服务
      4. 2.3.4. d. 配置external zone中的ip地址伪装
      5. 2.3.5. e. 配置public zone的端口转发
      6. 2.3.6. f. 配置public zone的icmp
      7. 2.3.7. g.IP封禁