防火墙工具 - firewalld
# 防火墙
防火墙是一种位于内部网络与外部网络之间的网络安全系统。一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙通常工作在网络层,也即IPv4或IPv6的IP包上。
是否允许包通过防火墙,取决于防火墙配置的规则。这些规则既可以是内建的,也可以是用户自定义的。每一个包要进出防火墙,均需要满足防火墙配置的规则。
每一条规则均有一个目标动作,具有相同动作的规则可以分组在一起。对于Linux系统,最常用的防火墙有:FirewallD或iptables。Linux的发行版种类极多,但是公认的仍然是这两种。
# 什么是FirewallD
防火墙守护 firewalld(Dynamic Firewall Manager of Linux systems
) 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。
# 什么是iptables
iptables是另一种服务,它可以决定是否允许、删除或返回IP数据包。iptables服务管理IPv4数据包,而ip6tables则管理IPv6数据包。此服务管理了一堆规则表,其中每个表分别用于维护不同的目的,比如过滤表(filter table)为防火墙规则,NAT表供新连接查询使用,mangle表用于数据包的转换等。
更进一步,每个表还具有规则链,规则链可以是内建的或是用户自定义的,它表示适用于一个数据包的规则集合,从而决定数据包应该执行哪些目标动作,比如允许ALLOWED、阻塞BLOCKED或返回RETURNED。iptables服务在RHEL/CentOS 6/5、Fedora、ArchLinux、Ubuntu等Linux发行版中是系统默认的服务。
func | desc |
---|---|
Firewall | 能将不同的网络连接归类到不同的信任级别,Zone 提供了以下几个级别 |
drop | 丢弃所有进入的包,而不给出任何响应 |
block | 拒绝所有外部发起的连接,允许内部发起的连接 |
public | 允许指定的进入连接 |
external | 同上,对伪装的进入连接,一般用于路由转发 |
dmz | 允许受限制的进入连接 |
work | 允许受信任的计算机被限制的进入连接,类似 workgroup |
home | 同上,类似 homegroup |
internal | 同上,范围针对所有互联网用户 |
trusted | 信任所有连接 |
# firewalld的基本使用
启动: systemctl start firewalld
查看状态: systemctl status firewalld
或者 firewall-cmd --state
停止: systemctl disable firewalld
禁用: systemctl stop firewalld
# firewalld端口管理
# 查看端口情况
firewall-cmd --zone= public --query-port=80/tcp
# 删除端口
firewall-cmd --zone=public --remove-port=3306/tcp --permanent
# 添加端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
出现success表明添加成功,重启firewald
服务或配置重新载入。
# 命令含义
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
2
3
# firewalld配置重新载入
firewall-cmd --reload
# 配置firewalld-cmd
查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: 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
# 端口转发
firewall-cmd --zone=external --add-masquerade
# 端口转发至其他IP其他Port
转发 22 端口数据至另一 ip 的 2055 端口上
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100
# 端口转发至其他Port
然后转发 tcp 22 端口至 3753
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=3753
# 端口转发至其他IP
转发 22 端口数据至另一个 ip 的相同端口上
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100
# 内网白名单
把一个源地址加入白名单,以便允许来自这个源地址的所有连接
这个在集群中使用常见
设置后利用firewall-cmd --reload更新防火墙规则
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.1.215" accept' --permanent
firewall-cmd --reload
# iptables服务的基本操作
在RHEL/CentOS 6/5/4系统和Fedora 12-18系统中,iptables是默认的防火墙,如果服务不存在,可以这样安装:
> yum install iptables-services
然后就可以对iptables服务进行启动、停止、重启等操作了。
# 启动iptables服务
systemctl start iptables
or service iptables start
# 停止iptables服务
systemctl stop iptables
or service iptables stop
# 禁用iptables服务
systemctl disable iptables
or service iptables save
or service iptables stop
# 启用iptables服务
systemctl enable iptables
or service iptables start
# 检查iptables服务的状态
systemctl status iptables
or service iptables status
# 理解网络区
在CentOS/RHEL 7系统中,基于用户对网络中设备和通信所给与的信任程度,防火墙可用于将网络划分成不同的区域,区域类型如下:
# drop(丢弃)
任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
# block(限制)
任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。
# public(公共)
在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。
# external(外部)
特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算机,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。
# dmz(非军事区)
用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。
# work(工作)
用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。
# home(家庭)
用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
# internal(内部)
用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。
# trusted(信任)
可接受所有的网络连接。
对于区域的修改,可使用网络管理器NetworkManager搞定。
# 理解直接接口
FirewallD包含了一个名为直接接口(direct interface)的概念,意思是可以直接通过iptables、ip6tables和ebtables的规则。直接接口适用于应用程序,不适用于用户。如果不熟悉iptables,那么使用直接接口是很危险的,因为可能会导致防火墙被入侵。
FirewallD保持对所增加规则项的追踪,所以能质询FirewallD,发现由使用直接端口模式的程序造成的更改。要使用直接端口,增加–direct选项到firewall-cmd命令来使用。
# 参考资料
-CentOS7使用firewalld命令 (opens new window) -CentOS7 防火墙firewall开放3306端口(顺带科普firewall命令) (opens new window)