利用Ansible实现批量Linux服务器安全配置
1.摘要
在上一篇<<初步利用Ansible实现批量服务器自动化管理>>文章中, 我初步实现了通过编写清单和剧本来实现多台服务器的自动化管理,在本章节中, 我将利用Ansible的剧本来实现更实用、更复杂一点的功能, 主要功能包括三个:1.同时在三台服务器中增加IP访问控制,只允许192.168.201.202的IP登录,其它IP禁止其通过SSH登录。2.修改SSH服务的默认22端口,修改为2222。3.启动防火墙,只允许2222端口访问, 不允许其它端口访问。
2.编写剧本
如果只讲原理,没有实践, 学习起来会比较枯燥, 所以我会在编写剧本的过程中边实践边讲解剧本的语法。
在上篇文章中, 我们已经知道剧本是一个YAML格式文件, 在开头,我们要加载所有的远程管理hosts,语法如下:
- hosts: all
还记得在上一章编写的清单文件inventory.yaml吗,看看里面的内容:

hosts: all默认会加载这里的所有IP地址, 紧随其后的命令是:
become: yes
该命令在Ansible中表示提权执行。
默认情况下,Ansible是以普通用户身份通过SSH连接到远程主机的。但有些任务需要 root 或 sudo 权限,比如服务的重启,文件权限的修改等。这时就需要使用become模块提权, 加上become:yes表示这个剧本中的所有任务都需要提权执行。Ansible会在执行任务时自动切换到root身份或目标用户身份,然后执行指定的任务。
become模块非常强大,可以精细控制在剧本中的提权行为,包括:
- 以哪个身份提权(默认root,可以指定其他用户)
- 提权使用的方法(sudo、su等)
- 提权的密码
- 仅在某些任务中提权
紧接着就是编写我们的任务了, 为了方便介绍, 我先给出一个完整的服务剧本,如下:
- hosts: allbecome: yes
tasks:- name: 修改SSH端口lineinfile:path: /etc/ssh/sshd_configregexp: '^Port'line: 'Port 2222'- name: 默认开启防火墙ufw:state: enabled- name: 在防火墙中开启2222端口ufw:rule: allowport: '2222'- name: 防火墙拒绝其它端口连接ufw:rule: denydirection: indelete: yes- name: 允许指定的IP访问ufw:rule: allowsrc: 192.168.201.202- name: 拒绝所有其它IP访问ufw:rule: denysrc: 0.0.0.0/0- name: 重启ufw防火墙service:name: ufwstate: restarted- name: 重启SSH服务service:name: sshdstate: restarted
可以看出, 任务tasks标签下面有8个子项, 每个子项都有一个name, 这个name表示每个子任务的名字, 方便我们区分子任务。
子任务1: 修改SSH端口
该任务使用了lineinfile模块, 目的是在路径/etc/ssh/sshd_config文件中按行搜索, 通过正则regexp匹配Port, 然后将其修改为2222端口。
我们可以打开/etc/ssh/sshd_config文件看一下, 查找到该项:

在ubuntu系统中, Port一般在ssd_config文件的最后一行。
子任务2:默认开启防火墙
对于ubuntu系统来说,防火墙使用的是ufw, 这里将状态state始终置为:enabled, 因为大部分刚装完的系统默认没有开启ufw,因此这里需要提前设置状态, 否则会导致后面操作ufw不成功。
子任务3: 在防火墙中开启2222端口
在该任务中,我们将之前修改的SSH服务的2222端口添加到防火墙中, 允许外界通过2222端口访问本机。
子任务4:防火墙拒绝其它端口连接
在该任务中, 我们主要设置了拒绝规则, 在防火墙中,除了2222端口之外的其它所有端口全部删除屏蔽掉。
子任务5:允许指定的IP访问
与上面的端口相同,这里设置只允许某一个IP访问本机,这里是只允许192.168.201.202服务器访问。
子任务6:拒绝所有其它IP访问
同上面端口的拒绝规则, 拒绝除192.168.201.202的其它IP地址访问。
子任务7:重启ufw防火墙
这里主要使用restarted重启ufo防火墙,注意,这里不能用reload, 可能会导致防火墙重启失败, 用restart比较稳妥。
子任务8:重启SSH服务
通过设置restarted状态重启SSH服务
3.多任务同步执行
编写完剧本内容之后, 输入以下命令执行即可:
# ansible-playbook -i inventory.yaml playbook.yaml
如果不出意外, 会看到以下执行结果:

如果在执行过程中出现错误, 会看到很醒目的提示,并给出执行状态, 如图:

4.结果验证
首先我们看一下端口修改情况, 发现已经全部将SSH端口修改为2222端口,并可以全部以2222端口登录, 如图:

接着我们看一下IP限制情况, 上面登录的全部是在192.168.201.202机器上登录,而在我个人电脑上登录却失败,如图:

我们登录到三台机器上看一下防火墙规则, 已经按照剧本要求添加了对应规则,如图:

相关文章:
利用Ansible实现批量Linux服务器安全配置
1.摘要 在上一篇<<初步利用Ansible实现批量服务器自动化管理>>文章中, 我初步实现了通过编写清单和剧本来实现多台服务器的自动化管理,在本章节中, 我将利用Ansible的剧本来实现更实用、更复杂一点的功能, 主要功能包括三个:1.同时在三台服务器中增加IP访问控制,只…...
读书笔记:彼得·德鲁克《认识管理》第8章 战略规划:企业家技能
一、章节内容概述 战略规划帮助做好当前的业务以迎接未来。战略规划需要思考业务应该是什么,当前必须做什么才能赢得未来。战略规划需要进行风险决策,需要有组织地抛弃过去的业务,要求清晰界定和明确安排为实现理想的未来而开展的工作。战略…...
HarmonyOS应用开发-视频播放器与弹窗
Viedo组件 在手机、平板或是智慧屏这些终端设备上,媒体功能可以算作是我们最常用的场景之一。无论是实现音频的播放、录制、采集,还是视频的播放、切换、循环,亦或是相机的预览、拍照等功能,媒体组件都是必不可少的。以视频功能为…...
java中对象的引用是什么?
引用和指向 例如: new Student(); 代表创建了一个Student对象,但是也仅仅是创建了一个对象,没有办法访问它。 为了访问这个对象,会使用引用来代表这个对象 Student s new Student(); s这个变量是Student类型,又叫做引…...
jenkins插件迁移
将Jenkins插件迁移至不同的Jenkins实例或更新插件版本是一项常见的任务。以下是迁移Jenkins插件的一般步骤: 备份现有插件: 在开始迁移之前,首先备份你当前的Jenkins实例以及所有相关的插件。这可以通过复制Jenkins的JENKINS_HOME目录来实现…...
RK356X Android13.0 HDMI和喇叭同时出声音
补丁适用范围:RK356X Android13.0 Android默认音频输出逻辑,不接HDMI默认喇叭音频输出,若检测到HDMI接入后,关闭喇叭输出,开启HDMI音频输出,但是BOX产品的使用场景需要插入HDMI后,喇叭仍然输出,可加入此补丁 $ vim frameworks/base/services/core/java/com/android/s…...
vue sass-loader,webpack安装卸载操作命令
检查 node-sass 的可用版本:运行下面的命令,查看 node-sass 的可用版本列表。 查看 npm view node-sass versions卸载 npm uninstall node-sass安装指定版本 npm install node-sass4.14.1安装最新版本 npm install sass-loaderlatest如果没有指定特定…...
nacos应用——占用内存过多问题解决(JVM调优初步)
问题描述 最近搞了一台1年的阿里云服务器,安装了一下常用的MySQL,Redis,rabbitmq,minio,然后有安装了一下nacos,结果一启动nacos内存占用就很高,就比较限制我继续安装其他镜像或者启动别的服务…...
大漠插件(二、Qt使用插件时注意事项)
本章目的 在上篇已经注册完毕大漠,那么怎么使用大漠来制作脚本,我选择了我最熟悉的Qt来开发,毕竟只是小软件,用脚本或者c都差不了多少。本章就是开发途中的一些坑。 本人开发环境是 win11 64、Qt 5.15.2安装了5.10.0的msvc2015 32…...
CSS 浮动
目标target✓ 能够说出来为什么需要浮动能够说出来浮动的排列特性能够说出来三种最常见的布局方式能够说出来为什么需要清除浮动,能够至少写出两种清楚浮动的方法能够利用Photoshop实现基本的切图能够利用Photoshop插件实现切图能够完成学成在线的页面布 传统网页布局的三种模…...
基于STM32+华为云IOT设计的火灾感知系统
一、设计需求 【1】 项目背景 随着城市化进程的加快和人们生活水平的提高,火灾事故频繁发生,给人们的生命财产安全带来巨大威胁。因此,开发一种可靠的火灾感知系统对于预防和减少火灾事故具有重要意义。近年来,随着物联网技术的发展,基于物联网的火灾感知系统逐渐成为研…...
算法通关村第八关|白银|二叉树的深度和高度问题【持续更新】
1.最大深度问题(后序遍历) 只需要一直递归,维护一个最大值。每一层只要有一个子节点,这个最大值就可以增加。 public int maxDepth(TreeNode root) {if (root null) {return 0;}int leftHeight maxDepth(root.left);int right…...
cmake 之add_definitions使用误区
需求 需要实现,在cmake中定义宏定义,可以:1) 在code中可以使用;2) 在cmake中可以识别是否已定义 问题 宏定义,cmake有add_definitions函数,直观的实现方法如下。 cmake_minimum…...
Leetcode—515.在每个树行中找最大值【中等】
2023每日刷题(二十三) Leetcode—515.在每个树行中找最大值 DFS实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Note: The returned arra…...
安防监控系统EasyCVR平台设备通道绑定AI算法的功能设计与开发实现
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、…...
element 弹窗浏览器后退-遮照层还存在问题 以及跟vue keep-alive冲突
问题:element 弹窗浏览器后退-遮照层还存在问题 查询官网可以设置 modal-append-to-body“false” 可以全局设置 ElementUI.Dialog.props.modalAppendToBody.default false 后续 基本到这能解决问题,不过本项目比较特殊,使用了 keep-alive…...
C++(Qt)软件调试---自动注册AeDebug(17)
C(Qt)软件调试—自动注册AeDebug(17) 文章目录 C(Qt)软件调试---自动注册AeDebug(17)1、什么是AeDebug2、使用调试工具3、WinDbg注册到AeDebug4、ProcDump注册到AeDebug5、Dr.MinGW注册到AeDebug6、Visual Studio 注册到AeDebug 1…...
云原生周刊:Gateway API 1.0.0 发布 | 2023.11.6
开源项目推荐 Kueue Kueue 是一套用于作业队列的 API 和控制器。它是作业级管理器,可决定何时允许作业启动(如创建 pod),何时停止作业(如删除活动 pod)。 Reloader 一个 Kubernetes 控制器,…...
Java2 - 数据结构
5 数据类型 5.1 整数类型 在Java中,数据类型用于定义变量或表达式可以存储的数据的类型。Java的数据类型可分为两大类:基本数据类型和引用数据类型。 byte,字节 【1字节】表示范围:-128 ~ 127 即:-2^7 ~ 2^7 -1 sho…...
精解括号匹配问题与极致栈设计:揭开最大栈和最小栈的奥秘
目录 括号匹配问题最小栈最大栈 最大栈和最小栈是极致栈的两个重要变种。最大栈用于存储当前匹配的最大值,而最小栈用于存储当前匹配的最小值。 括号匹配问题 这个问题我们来看力扣20题的描述: 给定一个只包括 ‘(’,‘)’,‘{’…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
