linux入门系列10--firewalld防火墙管理

上一篇文章学习了用户及文件相关权限,本篇继续学习防火墙技术。

防火墙作为公网与内网之间的保护屏障,对系统至关重要。防火墙又分为硬件防火墙和软件防火墙,主要功能都是依据设置的策略对穿越防火墙的流量进行过滤。本篇主要讲解Centos7系统自带的软件防火墙。

由于在初学阶段为了避免干扰很多时候我们都是直接关闭防火墙,但在生产环境这样做是很不安全的,因此我们需要掌握防火墙的相关配置方法。

一、Linux防火墙概述

Linux系统包含两个层面的防火墙,一种是基于TCP/IP的流量过滤工具,另外一种是TCP Wrappers服务。前者包括iptables、firewalld等防火墙,后者是能允许或禁止Linux系统提供服务的防火墙,在更高层面保护系统的安全。

在RHEL7系统中,firewalld取代了之前版本的iptables防火墙,成为默认的防火墙。二者有很大区别,iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。

严格意义上说,iptables和firewalld都不是真正的防火墙,只是用来定义防火墙策略的防火墙管理工具而已,他们都是一种服务。

防火墙管理工具主要是为了方便运维管理人员对防火墙策略进行配置和管理,这类工具思路大同小异,只要掌握一个即可,本文主要讲解firewalld这款防火墙管理工具。

二、firewalld防火墙管理工具

Centos7中集成了多款防火墙工具,其中默认的是firewalld,全称为:Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器。它用于命令行界面CLI或图形用户界面GUI两种管理方式,下文将分别进行介绍。

firewalld相比之前传统的防火墙管理配置工具,它支持动态更新技术并加入了区域(zone)的概念。简单说就是事先定义几套防火墙策略模板,用户根据实际场景进行选择,从而实现策略之间的快速切换。比如设置好home和work区域的策略后,在家就选择home区域,在公司就选择work策略,极大提升了防火墙策略的应用效率。

firewalld中蝉蛹的区域名称和策略规则如下:

区域 默认策略规则
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

2.1 firewall-cmd

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 命令。

2.1.1 防火墙状态管理

如果安装本系列教程逐步操作的话,系统以及是默认安装了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
2.1.2 防火墙配置文件

配置文件说明: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。

2.1.3 常用配置命令及案例
  • 查看当前使用的区域
[root@heimatengyun ~]# firewall-cmd --get-default-zone 
public
  • 查看当前使用的区域是否允许请求ssh和https协议的流量
[root@heimatengyun ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@heimatengyun ~]# firewall-cmd --zone=public --query-service=https
no
  • 设置https协议流量为永久允许并立即生效
[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
  • 允许8080和8081端口流量,仅限当前生效
[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

2.2 firewall-config

firewall-config是 firewalld 防火墙配置管理工具的 GUI(图形用户界面)版本,几 乎可以实现所有以命令行来执行的操作。即使没有扎实的 Linux 命令基 础,也完全可以通过它来妥善配置 RHEL 7 中的防火墙策略。

2.2.1 主界面

输入命令后,将打开主界面

[root@heimatengyun ~]# firewall-config 
file

顶部的Configuration对应选择是运行模式还是永久模式。

左边Zones选项卡对应的是不同的区域。

2.2.2 配置案例

在使用 firewall-config 工具配置完防火墙策略之后,无须进行二次确认,因为只要有修改内容,它就自动进行保存。

  • 配置允许当前区域中http服务流量且仅限当前有效
file
  • 试添加一条防火墙策略规则,使其放行访问 8080~8088 端口(TCP 协议)的流量, 并将其设置为永久生效
file

添加规则后,还需要reload让配置的策略立即生效。

file

三、TCP Wrappers服务

TCP Wrappers是RHEL7系统中默认启用的一款流量监控程序,它能够根据来访主机的地址与本机的目标服务程序作出允许或拒绝的操作。

前文已提到firewalld是基于TCP/IP 协议的流量过滤工具,而 TCP Wrappers 服务则是能允许或 禁止 Linux 系统提供服务的防火墙,从而在更高层面保护了 Linux 系统的安全运行。

TCP Wrappers 服务的防火墙策略由两个控制列表文件所控制,用户可以编辑允许控制列表文 件来放行对服务的请求流量,也可以编辑拒绝控制列表文件来阻止对服务的请求流量。

控制列表 文件修改后会立即生效,系统将会先检查允许控制列表文件(/etc/hosts.allow),如果匹配到相应 的允许策略则放行流量;如果没有匹配,则去进一步匹配拒绝控制列表文件(/etc/hosts.deny),若 找到匹配项则拒绝该流量。如果这两个文件全都没有匹配到,则默认放行流量。

3.1 配置原则
  • 编写拒绝策略规则时,填写的是服务名称,而非协议名称;

  • 建议先编写拒绝策略规则,再编写允许策略规则。

3.2 常用配置参数

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或* 所有主机全部包括在内
3.3 案例
  • 配置指定ip能远程登录到服务器

编辑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。

然后再次用远程连接工具,发现可以连接上了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容