在CentOS 7
中,引入了一个新的服务,Firewalld
,下面一张图,让大家明确的了解Firewall
与iptables
之间的关系与区别。
1 | # yum install firewalld |
1 | # yum install firewall-config |
一、介绍
防火墙守护firewalld
服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持ipv4
与ipv6
,并支持网桥,采用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 | # systemctl start firewalld # 启动, |
0. 配置firewalld
1 | $ firewall-cmd –version # 查看版本 |
查看设置
1 | $ firewall-cmd –state # 显示状态 |
具体的规则管理,可以使用firewall-cmd
,具体的使用方法可以
1 | $ firewall-cmd --help |
1. 查看规则
查看运行状态
1 | $ firewall-cmd --state |
查看已被激活的Zone
信息
1 | $ firewall-cmd --get-active-zones |
查看指定接口的Zone
信息
1 | $ firewall-cmd --get-zone-of-interface=eth0 |
查看指定级别的接口
1 | $ firewall-cmd --zone=public --list-interfaces |
查看指定级别的所有信息,譬如public
1 | $ firewall-cmd --zone=public --list-all |
查看所有级别被允许的信息
1 | $ firewall-cmd --get-service |
查看重启后所有Zones
级别中被允许的服务,即永久放行的服务
1 | $ firewall-cmd --get-service --permanent |
2. 管理规则
1 | # firewall-cmd --panic-on # 丢弃 |
添加某接口至某信任等级,譬如添加eth0
至public
,永久修改
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
端口8080
至dmz
级别
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.100
的2055
端口上
1 | # firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100 |
f. 配置public zone
的icmp
查看所有支持的icmp
类型
1 | # firewall-cmd --get-icmptypes |
列出
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://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html
- Fedora社区:https://fedoraproject.org/wiki/FirewallD
转载自:https://havee.me/linux/2015-01/using-firewalls-on-centos-7.html