上一篇学习了用户和文件相关的权限。本文继续学习防火墙技术。防火墙作为公网和内网之间的一道保护屏障,对系统来说至关重要。防火墙分为硬件防火墙和软件防火墙。主要功能是根据设定的策略对通过防火墙的流量进行过滤。本文主要讲解Centos7系统自带的软件防火墙。为了避免初期的干扰,我们经常直接关闭防火墙,但是在生产环境中这样做是非常不安全的,所以需要掌握防火墙的相关配置方法。一、Linux防火墙概述Linux系统包括两层防火墙,一层是基于TCP/IP的流量过滤工具,另一层是TCPWrappers服务。前者包括iptables、firewalld等防火墙,后者是允许或禁止Linux系统提供服务的防火墙,在更高层次上保护系统安全。在RHEL7系统中,firewalld取代了之前版本的iptables防火墙,成为了默认的防火墙。两者之间有很大的区别。iptables的防火墙策略在内核级别由netfilter网络过滤器处理,而firewalld在内核级别由nftables包过滤框架处理。严格来说,iptables和firewalld都不是真正的防火墙,而是用来定义防火墙策略的防火墙管理工具。它们都是一种服务。防火墙管理工具主要是为了方便运维人员对防火墙策略进行配置和管理。这些工具的思路大同小异,只要掌握一个即可,本文主要讲解防火墙管理工具firewalld。2.firewalld防火墙管理工具Centos7集成了多种防火墙工具,其中默认的是firewalld,全称:DynamicFirewallManagerofLinuxsystems,Linux系统的动态防火墙管理器。它使用命令行界面CLI或图形用户界面GUI两种管理方式,下面分别介绍。与以往传统的防火墙管理和配置工具相比,firewalld支持动态更新技术,并增加了zone的概念。简单来说就是预先定义了几套防火墙策略模板,用户可以根据实际场景进行选择,实现策略之间的快速切换。例如,在设置好家庭和工作区域的策略后,在家里选择家庭区域,为公司选择工作策略,大大提高了防火墙策略的应用效率。firewalld中蝉蛹的区域名称和策略规则如下:区域默认策略规则trusted将所有数据包跑回家,拒绝传入流量,除非与传出流量相关。如果流量与ssh、mdns、ipp-client、amba-client、dhcpv6-client服务相关,allowtrafficinternal和homeworkdenyincomingtraffic,除非与outgoingtraffic数量相关。如果流量与ssh、ipp-client和dhcpv6-client服务相关,则允许流量public拒绝传入流量,除非与传出流量相关。如果流量与ssh、dhcpv6-client服务相关,allowtrafficexternal拒绝传入流量,除非与传出流量相关;如果流量与ssh服务相关,则允许流量dmz拒绝传入流量,除非与传出流量相关;如果流量与ssh服务相关,则允许流量块拒绝传入流量,除非它与传出流量相关。drop同block2.1firewall-cmdfirewall-cmd是firewalld防火墙配置管理工具的CLI(命令行界面)版本。它的参数一般以“长格式”提供。它的参数比较多,但是由于centos7已经支持了这个命令的参数补全,所以需要更多的使用tab键。下表列出了常用的参数及其作用,更多参数可以通过man命令查看。参数功能--get-default-zone查询默认区域名称--set-default-zone=设置默认区域使其成为永久区域--get-zones显示可用区域--get-active-zones显示当前使用的区域和网卡名称--get-services显示预定义的服务--add-source=将流量从这个IP或子网定向到指定区域--remove-source=不再从这个来源定向流量IP或子网到指定区域--add-interface=将来自该网卡的所有流量定向到指定区域--change-interface=定向特定区域将NIC与区域相关联--list-all显示当前区域的网卡配置参数、资源、端口、服务等信息--list-all-zones显示所有区域的网卡配置参数、资源、端口、服务等信息--add-service=<服务名称>设置默认区域以允许该服务的流量--add-port=<端口号/协议>设置默认区域以允许该端口的流量--remove-service=<服务name>设置默认区域不再允许该服务的流量--remove-port=<端口号/协议>设置默认区域并且不再允许该端口的流量--reload使“永久”配置规则采取立即生效并覆盖当前配置规则--panic-on开启紧急模式--panic-off关闭紧急模式使用防火墙配置策略有两种模式:运行时模式(runtime)和永久模式(permanent)。运行时模式也称为当前有效模式,随着系统重启而失效。这是默认模式。而如果需要配置永久生效,需要加上--permanent参数。主要需要注意的是永久模式配置的策略只有重启后才能自动生效。如果想让配置的策略立即生效,需要手动执行firewall-cmd--reload命令。2.1.1防火墙状态管理如果您安装本系列教程并按部就班地操作,则默认安装了系统和firewalld服务。如果你使用其他系统或者没有安装firewalld服务,可以通过命令自行安装。安装命令:yuminstallfirewalldfirewall-config查看防火墙状态[root@heimatengyun~]#firewall-cmd--staterunning[root@heimatengyun~]#systemctlstatusfirewalldfirewalld.service-firewalld-dynamicfirewalldaemonLoaded:loaded(/usr/lib/systemd/system/firewalld.service;已启用)活动:活动(运行)自星期六2019-12-2121:26:53CST;1小时31分钟前主PID:915(firewalld)CGroup:/system.slice/firewalld.service└─915/usr/bin/python-Es/usr/sbin/firewalld--nofork--nopidDec2121:26:53heimatengyunsystemd[1]:Startedfirewalld-dynamicfirewall....提示:有些行被省略了,使用-l来完整显示。您可以使用firewall-cmd--state或systemctlstatusfirewalld查看防火墙状态。重启防火墙服务[root@heimatengyun~]#systemctlrestartfirewalld.service注意相当于systemctlrestartfirewalld,服务后缀名可以省略。停止防火墙服务[root@heimatengyun~]#systemctlstopfirewalld[root@heimatengyun~]#firewall-cmd--statenotrunning启动防火墙服务[root@heimatengyun~]#systemctlstartfirewalld[root@heimatengyun~]#firewall-cmd--staterunning2.1.2防火墙配置文件配置文件说明:firewalld有两个存放配置文件的目录,/usr/lib/firewalld/和/etc/firewalld/。前者存放一些默认文件,后者主要存放用户自定义的数据,所以我们添加的服务或规则都是在后者下执行的。[root@heimatengyun~]#ls/usr/lib/firewalld/icmptypesserviceszones[root@heimatengyun~]#ls/etc/firewalld/firewalld.conficmptypeslockdown-whitelist.xmlserviceszoneserver:存放服务数据,是一个组明确定义的规则。zones:存储区规则。firewalld.conf:默认配置文件,可以设置默认区域,默认区域为public,对应zones目录下的public.xml。2.1.3常用配置命令及案例查看当前使用的区域[root@heimatengyun~]#firewall-cmd--get-default-zonepublic查看当前使用的区域是否允许ssh和https协议的流量请求[root@heimatengyun~]#firewall-cmd--zone=public--query-service=sshyes[root@heimatengyun~]#firewall-cmd--zone=public--query-service=httpsno设置https协议流量为永久权限并生效立即[root@heimatengyun~]#firewall-cmd--zone=public--add-service=httpssuccess[root@heimatengyun~]#firewall-cmd--zone=public--query-service=httpsyes[root@heimatengyun~]#firewall-cmd--permanent--zone=public--add-service=httpssuccess[root@heimatengyun~]#firewall-cmd--reloadsuccess允许8080和8081端口流量,目前只有效[root@heimatengyun~]#firewall-cmd--zone=public--list-ports[root@heimatengyun~]#firewall-cmd--zone=public--add-port=8080-8081/tcpsuccess[root@heimatengyun~]#firewall-cmd--zone=public--list-ports8080-8081/tcp2.2firewall-configfirewall-config是firewalld防火墙配置管理工具的GUI(图形用户界面)版本,几乎可以实现所有命令行操作。即使你没有扎实的Linux命令基础,也可以使用它在RHEL7中正确配置防火墙策略。2.2.1主界面输入命令后,主界面会打开[root@heimatengyun~]#firewall-config最上面的Configuration对应选择运行模式还是永久模式。左侧的Zones选项卡对应不同的区域。2.2.2配置示例使用firewall-config工具配置防火墙策略后,无需再次确认,因为只要有任何修改,都会自动保存。该配置允许当前区域的http服务流量,仅当前有效。尝试添加防火墙策略规则,允许流量访问8080-8088端口(TCP协议),并设置为永久生效。添加规则后,需要重新加载。配置的策略立即生效。3、TCPWrappers服务TCPWrappers是RHEL7系统默认启用的流量监控程序。它可以根据访问主机的地址和本机的目标服务程序来允许或拒绝操作。前面提到过,firewalld是一个基于TCP/IP协议的流量过滤工具,而TCPWrappers服务是一个允许或禁止Linux系统提供服务的防火墙,从而在更高层次上保护Linux系统的安全运行.TCPWrappers服务的防火墙策略由两个控制列表文件控制。用户可以编辑允许控制列表文件以允许对服务的请求流量,并编辑拒绝控制列表文件以阻止服务请求流量。控制列表文件的修改将立即生效。系统会先检查允许控制列表文件(/etc/hosts.allow),如果符合相应的允许策略,则放行流量;如果没有匹配,它会进一步匹配拒绝控制列表文件(/etc/hosts.deny),如果找到匹配则拒绝流量。如果两个文件都不匹配,默认情况下将允许流量。3.1配置原则编写拒绝策略规则时,填写服务名,不要填写协议名;建议先写deny策略规则,再写allow策略规则。3.2常用配置参数TCPWrappers服务控制列表文件中常用参数如下:客户端类型示例满足条件的客户端列表单台主机192.168.1.1ip地址为192.168.1.1的主机指定网段192.168.1.ipsegment为192.168.1.0/24的主机指定网段192.168.10.0/255.255.255.0为IP段为192.168.10.0/24的主机指定DNS后缀.heimatengyun.com指定主机名www.heimatengyun为后缀为.heimatengyun.com的所有主机.com主机名称为www.heimatengyun.com指定所有客户端ALL或*所有主机都包含3.3案例配置指定ip可以远程登录服务器进行访问编辑hosts.deny文件[root@heimatengyun~]#vi/etc/hosts.denyadd:sshd:*保存退出。此时退出远程连接工具,重新远程连接,会连不上。直接登录虚拟机,编辑/etc/hosts.allow文件,允许本机ip远程连接到服务器。[root@heimatengyun~]#vi/etc/hosts.allow添加:sshd:192.168.78。保存退出注意这里的192.168.78是你访问linux的ip地址,根据实际情况设置。在本文演示的环境中,取的是VMnet8的ip地址,而不是宿主机的ip。然后再次使用远程连接工具,发现可以连接了。