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