上一篇文章学习了用户及文件相关权限,本篇继续学习防火墙技术。python
防火墙做为公网与内网之间的保护屏障,对系统相当重要。防火墙又分为硬件防火墙和软件防火墙,主要功能都是依据设置的策略对穿越防火墙的流量进行过滤。本篇主要讲解Centos7系统自带的软件防火墙。linux
因为在初学阶段为了不干扰不少时候咱们都是直接关闭防火墙,但在生产环境这样作是很不安全的,所以咱们须要掌握防火墙的相关配置方法。centos
Linux系统包含两个层面的防火墙,一种是基于TCP/IP的流量过滤工具,另一种是TCP Wrappers服务。前者包括iptables、firewalld等防火墙,后者是能容许或禁止Linux系统提供服务的防火墙,在更高层面保护系统的安全。安全
在RHEL7系统中,firewalld取代了以前版本的iptables防火墙,成为默认的防火墙。两者有很大区别,iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。服务器
严格意义上说,iptables和firewalld都不是真正的防火墙,只是用来定义防火墙策略的防火墙管理工具而已,他们都是一种服务。网络
防火墙管理工具主要是为了方便运维管理人员对防火墙策略进行配置和管理,这类工具思路大同小异,只要掌握一个便可,本文主要讲解firewalld这款防火墙管理工具。app
Centos7中集成了多款防火墙工具,其中默认的是firewalld,全称为:Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器。它用于命令行界面CLI或图形用户界面GUI两种管理方式,下文将分别进行介绍。框架
firewalld相比以前传统的防火墙管理配置工具,它支持动态更新技术并加入了区域(zone)的概念。简单说就是事先定义几套防火墙策略模板,用户根据实际场景进行选择,从而实现策略之间的快速切换。好比设置好home和work区域的策略后,在家就选择home区域,在公司就选择work策略,极大提高了防火墙策略的应用效率。运维
firewalld中蝉蛹的区域名称和策略规则以下:ssh
区域 | 默认策略规则 |
---|---|
trusted | 运行全部的数据包 |
home | 拒绝流入的流量,除非与流出的流量相关。若是流量与ssh、mdns、ipp-client、amba-client、dhcpv6-client服务相关则容许流量 |
internal | 同home |
work | 拒绝流入的流量,除非与流出的流量数相关。若是流量与 ssh、ipp-client 与 dhcpv6-client 服务相关,则容许流量 |
public | 拒绝流入的流量,除非与流出的流量相关。若是流量与 ssh、dhcpv6-client 服务 相关,则容许流量 |
external | 拒绝流入的流量,除非与流出的流量相关;而若是流量与 ssh 服务相关,则容许流量 |
dmz | 拒绝流入的流量,除非与流出的流量相关;而若是流量与 ssh 服务相关,则容许流量 |
block | 拒绝流入的流量,除非与流出的流量相关 |
drop | 同block |
firewall-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=<网卡名称> | 将某个网卡与区域进行关联 |
--list-all | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
--list-all-zones | 显示全部区域的网卡配置参数、资源、端口以及服务等信息 |
--add-service=<服务名> | 设置默认区域容许该服务的流量 |
--add-port=<端口号 协议> | 设置默认区域容许该端口的流量 |
--remove-service=<服务名> | 设置默认区域再也不容许该服务的流量 |
--remove-port=<端口号 协议> | 设置默认区域再也不容许该端口的流量 |
--reload | 让“永久生效”的配置规则当即生效,并覆盖当前的配置规则 |
--panic-on | 开启应急情况模式 |
--panic-off | 关闭应急情况模式 |
使用firewall配置策略有两种模式:运行时模式(runtime)、永久模式(permanent)。运行时模式又称为当前生效模式,并且随着系统的重启会失效,它是默认的模式。而若是须要配置永久生效,就须要添加--permanent 参数。
主要注意的是永久模式配置的策略只有重启以后才能自动生效,若是想让配置的策略当即生效,须要手动执行firewall-cmd --reload 命令。
若是安装本系列教程逐步操做的话,系统以及是默认安装了firewalld服务,若是你用的是其余系统或未安装firewalld服务,能够经过命令自行安装便可。安装命令:yum install firewalld firewall-config
[root@heimatengyun ~]# firewall-cmd --state running [root@heimatengyun ~]# systemctl status firewalld firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled) Active: active (running) since Sat 2019-12-21 21:26:53 CST; 1h 31min ago Main PID: 915 (firewalld) CGroup: /system.slice/firewalld.service └─915 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid Dec 21 21:26:53 heimatengyun systemd[1]: Started firewalld - dynamic firewal.... Hint: Some lines were ellipsized, use -l to show in full.
可使用firewall-cmd --state 或systemctl status firewalld查看防火墙状态。
[root@heimatengyun ~]# systemctl restart firewalld.service
注意等同于systemctl restart firewalld,能够省略服务后缀名。
[root@heimatengyun ~]# systemctl stop firewalld [root@heimatengyun ~]# firewall-cmd --state not running
[root@heimatengyun ~]# systemctl start firewalld [root@heimatengyun ~]# firewall-cmd --state running
配置文件说明:firewalld 存放配置文件有两个目录,/usr/lib/firewalld/和/etc/firewalld/。前者存放了一些默认的文件,后者主要是存放用户自定义的数据,因此咱们添加的service或者rule都在后者下面进行。
[root@heimatengyun ~]# ls /usr/lib/firewalld/ icmptypes services zones [root@heimatengyun ~]# ls /etc/firewalld/ firewalld.conf icmptypes lockdown-whitelist.xml services zones
server:存储服务数据,就是一组定义好的规则。
zones:存储区域规则。
firewalld.conf:默认配置文件,能够设置默认使用的区域,默认区域为 public,对应 zones目录下的public.xml。
[root@heimatengyun ~]# firewall-cmd --get-default-zone public
[root@heimatengyun ~]# firewall-cmd --zone=public --query-service=ssh yes [root@heimatengyun ~]# firewall-cmd --zone=public --query-service=https no
[root@heimatengyun ~]# firewall-cmd --zone=public --add-service=https success [root@heimatengyun ~]# firewall-cmd --zone=public --query-service=https yes [root@heimatengyun ~]# firewall-cmd --permanent --zone=public --add-service=https success [root@heimatengyun ~]# firewall-cmd --reload success
[root@heimatengyun ~]# firewall-cmd --zone=public --list-ports [root@heimatengyun ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp success [root@heimatengyun ~]# firewall-cmd --zone=public --list-ports 8080-8081/tcp
firewall-config是 firewalld 防火墙配置管理工具的 GUI(图形用户界面)版本,几 乎能够实现全部以命令行来执行的操做。即便没有扎实的 Linux 命令基 础,也彻底能够经过它来妥善配置 RHEL 7 中的防火墙策略。
输入命令后,将打开主界面
[root@heimatengyun ~]# firewall-config
顶部的Configuration对应选择是运行模式仍是永久模式。
左边Zones选项卡对应的是不一样的区域。
在使用 firewall-config 工具配置完防火墙策略以后,无须进行二次确认,由于只要有修改内容,它就自动进行保存。
添加规则后,还须要reload让配置的策略当即生效。
TCP Wrappers是RHEL7系统中默认启用的一款流量监控程序,它可以根据来访主机的地址与本机的目标服务程序做出容许或拒绝的操做。
前文已提到firewalld是基于TCP/IP 协议的流量过滤工具,而 TCP Wrappers 服务则是能容许或 禁止 Linux 系统提供服务的防火墙,从而在更高层面保护了 Linux 系统的安全运行。
TCP Wrappers 服务的防火墙策略由两个控制列表文件所控制,用户能够编辑容许控制列表文 件来放行对服务的请求流量,也能够编辑拒绝控制列表文件来阻止对服务的请求流量。
控制列表 文件修改后会当即生效,系统将会先检查容许控制列表文件(/etc/hosts.allow),若是匹配到相应 的容许策略则放行流量;若是没有匹配,则去进一步匹配拒绝控制列表文件(/etc/hosts.deny),若 找到匹配项则拒绝该流量。若是这两个文件全都没有匹配到,则默认放行流量。
编写拒绝策略规则时,填写的是服务名称,而非协议名称;
建议先编写拒绝策略规则,再编写容许策略规则。
TCP Wrappers服务的控制列表文件中经常使用的参数以下表:
客户端类型 | 示例 | 知足条件的客户端列表 |
---|---|---|
单一主机 | 192.168.1.1 | ip地址为192.168.1.1的主机 |
指定网段 | 192.168.1. | ip段为192.168.1.0/24的主机 |
指定网段 | 192.168.10.0/255.255.255.0 | IP 段为 192.168.10.0/24 的主机 |
指定 DNS 后缀 | .heimatengyun.com | 全部后缀为.heimatengyun.com的主机 |
指定主机名称 | www.heimatengyun.com | 主机名称为www.heimatengyun.com的主机 |
指定全部客户端 | ALL或* | 全部主机所有包括在内 |
编辑hosts.deny文件
[root@heimatengyun ~]# vi /etc/hosts.deny
添加:sshd:* 保存并退出。
此时退出远程链接工具,再次远程链接,将没法链接进去。
直接登陆虚拟机,并编辑/etc/hosts.allow文件,容许本地电脑的ip能远程链接服务器。
[root@heimatengyun ~]# vi /etc/hosts.allow
添加:sshd:192.168.78. 保存并退出
> 注意此处的192.168.78. 为你将访问linux的ip地址,根据实际状况进行设置。本文演示的环境中取的是VMnet8的ip地址,而不是宿主机的ip。
而后再次用远程链接工具,发现能够链接上了。
</端口号></服务名></端口号></服务名></网卡名称></网卡名称></区域名称>