Linux Firewalld防火墙

  • Post author:
  • Post category:linux




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



版权声明:本文为weixin_41489136原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。