Firewalld(Dynamic Firewall Manager of Linux systems)
防火墙存在的作用
- 切割被信任(如子域)与不被信任(如Internet)的网段.
- 划分出可提供Internet的服务与必须受保护的服务.
- 分析出可接受与不可接受的数据包状态.
Linux上防火墙的主要类别
基本上可以将防火墙分为网络型与单一主机型,在单一主机型管理方面,主要有数据过滤型的Netfilter与依据服务软件程序作为分析的TCP Wrappers两种.网络型的话,防火墙都是充当路由器角色,因此防火墙类型主要有数据包过滤的Netfilter与利用代理服务器(Proxy Server)进行访问代理的方式.
1.Netfilter(数据包过滤机制)
所谓的数据包过滤,也就是分析进入主机的网络数据包,将数据包的头部数据提取出来进行分析,以决定该连接为放行或抵挡的机制,由于这种方式可以直接分析数据包头部数据,所以包括硬件地址(Mac)、软件地址(IP)、TCP、UDP、ICMP等数据包的信息都可以进行过滤分析(主要分析的是OSI七层协议的2、3、4层).
在Linux上面使用内核内建了Netfilter这个机制,而Netfilter提供了iptables这个软件来作为防火墙数据包过滤的命令.由于Netfilter是内核内建的功能,所以效率非常高,非常适合一般小型环境设置,Netfilter利用一些数据包过滤的规则设置,来定义什么数据接收,什么数据拒绝,以达到保护主机的目的.
2.TCP Wrappers(程序管理)
另一种抵挡数据包进入的方法,是通过服务器程序的外挂(tcpd)来处置的,与数据过滤不同,这种机制主要是分析谁对某程序进行访问,然后通过规则去分析该服务器程序谁能够连接,谁不能连接,由于主要通过分析服务器程序来管理,因此与启动的端口无关,只与程序的名称有关.
3.Proxy(代理服务器)
代理服务器是一种网络服务,它可以代理用户的需求,代为前往服务器取得相关的数据.
防火墙的使用限制
Linux的Netfilter进行的分析工作有:
- 拒绝让Internet的数据包进入主机的某些端口
- 拒绝让某些来源的IP的数据包进入
- 拒绝让带有某些特殊标志(flag)的数据包进入
- 分析硬件地址(MAC)来决定连接与否
虽然Netfilter防火墙已经可以做很多事,但并不一定就很安全:
- 防火墙并不能有效阻挡病毒或木马程序
- 防火墙对于来自内部LAN的攻击无能为力
firewalld与iptables的异同
相同点:
firewalld 与 iptables 都是 linux 中防火墙的管理程序,但其实其角色主要为对于防火墙策略的管理,真正的防火墙执行者是位于内核中的Netfilter
不同点:
1. iptables 仅能通过命令行进行配置;而 firewalld 提供了图形接口,类似windows防火墙的操作方式
2. iptables 每一个单独更改意味着清除所有旧的规则,并从 /etc/sysconfig/iptables 中读取所有新的规则;而 firewalld 在有规则变动后,可以仅仅运行规则中的不同之处,即在 firewalld 运行时间内,改变设置时可以不丢失现行链接
3. iptables 的配置文件在 /etc/sysconfig/iptables 中;而 firewalld 的配置文件在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件中
4. iptables 没有守护进程,并不能算是真正意义上的服务;而 firewalld 有守护进程
5. iptables 通过控制端口来控制服务,而 firewalld 则是通过控制协议来控制端口
firewalld中常用的区域名称及策略规则
区域 | 默认策略规则 |
---|
trusted | 允许所有的数据包 |
home | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量 |
internal | 等同于home区域 |
work | 拒绝流入的流量,除非与流出的流量数相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量 |
public | 拒绝流入的流量,除非与流出的流量相关;而如果流量与shh、dhcpv6-client服务相关,则允许流量 |
external | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
dmz | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
block | 拒绝流入的流量,除非与流出的流量相关 |
drop | 拒绝流入的流量,除非与流出的流量相关 |
firewall-cmd命令中使用的参数以及作用
参数 | 作用 |
---|
–get-default-zone | 查询默认的区域名称 |
–set-default-zone=<区域名称> | 设置默认的区域,使其永久生效 |
–get-zones | 显示可用的区域 |
–get-services | 显示预先定义的服务 |
–get-active-zones | 显示当前正在使用的区域与网卡名称 |
–add-source= | 将源自此IP或子网的流量导向指定的区域 |
–remove-source= | 不再将源自此IP或子网的流量导向某个指定区域 |
–add-interface=<网卡名称> | 将源自该网卡的所有流量都导向某个指定区域 |
–change-interface=<网卡名称> | 将某个网卡与区域进行关联 |
–list-all | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
–list-all-zones | 显示所有区域的网卡配置参数、资源、端口以及服务等信息 |
–add-service=<服务名> | 设置默认区域允许该服务的流量 |
–add-port=<端口号/协议> | 设置某人区域允许该端口的流量 |
–remove-service=<服务名> | 设置默认区域不再允许该服务的流量 |
–remove-port=<端口号/协议> | 设置默认区域不再允许该端口的流量 |
–reload | 让"永久生效"的配置规则立即生效,并覆盖当前的配置规则 |
–panic-on | 开启应急状况模式 |
–panic-off | 关闭应急状况模式 |
查看firewalld服务当前所使用的区域:
$ firewall-cmd --get-default-zone
查询eno网卡在firewalld服务中的区域:
$ firewall-cmd --get-zone-of-interface=eno
把firewalld服务中eno网卡的默认区域修改为external,并在系统重启后生效,分别查看当前与永久模式下的区域名称:
$ firewall-cmd --permanent --zone=external --change-interface=eno
$ firewall-cmd --get-zone-of-interface=eno
$ firewall-cmd --permanent --get-zone-of-interface=eno
把firewalld服务的当前默认区域设置为public:
$ firewall-cmd --set-default-zone=public
$ firewall-cmd --get-default-zone
启动/关闭firewalld防火墙服务的应急状况,阻断一切网络连接(远程控制服务器慎用)
$ firewall-cmd --panic-on
$ firewall-cmd --panic-off
查询public区域是否允许请求ssh和https协议的流量:
$ firewall-cmd --zone=public --query-service=ssh
$ firewall-cmd --zone=public --query-service=https
把firewalld服务中请求https协议的流量设置为永久允许,立即生效:
$ firewall-cmd --zone=public --add-service=https
$ firewall-cmd --permanent --zone=public --add-service=https
$ firewall-cmd --reload
把firewalld服务中请求http协议的流量设置为永久拒绝,立即生效:
$ firewall-cmd --permanent --zone=public --remove-service=http
$ firewall-cmd --reload
把在firewalld服务中访问8080和8081端口的流量策略设置为允许,但仅限当前生效:
$ firewall-cmd --zone=public --add-port=8080-8081/tcp
$ firewall-cmd --zone=public --list-ports
把原本访问本机888端口的流量转发到22端口
$ firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10
$ firewall-cmd --reload