利用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机器上登录,而在我个人电脑上登录却失败,如图:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/135542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

211. 添加与搜索单词 - 数据结构设计

211. 添加与搜索单词 - 数据结构设计 题目-中等难度示例1. 题目-中等难度 请你设计一个数据结构&#xff0c;支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。 实现词典类 WordDictionary &#xff1a; WordDictionary() 初始化词典对象void addWord(word) 将…

杂货铺 | citespace的使用

安装教程 【CiteSpace保姆级教程1】文献综述怎么写&#xff1f; &#x1f4da;数据下载 1. 新建文件夹 2. 数据下载 知网高级检索 数据选中导出 &#xff1a;一次500 导出后重命名为download_xxx.txt&#xff0c;放到input文件里 3. 数据转换 把output里的数据复制到data里…

jenkins插件迁移

将Jenkins插件迁移至不同的Jenkins实例或更新插件版本是一项常见的任务。以下是迁移Jenkins插件的一般步骤&#xff1a; 备份现有插件&#xff1a; 在开始迁移之前&#xff0c;首先备份你当前的Jenkins实例以及所有相关的插件。这可以通过复制Jenkins的JENKINS_HOME目录来实现…

Qt实现自定义多选下拉列表

目录 前言1、 功能描述2、代码实现总结 前言 本文记录了一种通过继承 QComboBox 实现下拉列表多选功能的方法。效果如下图所示&#xff1a; 1、 功能描述 普通的下拉列表只支持选择一个选项&#xff0c;在软件开发过程中&#xff0c;经常会遇到下拉列表支持选择多个选项的需…

Mybatis-Plus同时使用逻辑删除和唯一索引的问题及解决办法

1 问题背景 在开发中&#xff0c;我们经常会有逻辑删除和唯一索引同时使用的情况。但当使用mybatis plus时&#xff0c;如果同时使用逻辑删除和唯一索引&#xff0c;会报数据重复Duplicate entry的问题。 举例来说&#xff0c;有表user&#xff0c;建立唯一索引&#xff08;u…

centos 7部署Mysql8.0主从

Mysql官网中关于部署主从的网址 环境准备&#xff1a; 搭建虚拟机和安装Mysql之前的文章中已经涉及&#xff0c;在此不再赘述。 主从IPMysql账号密码主192.168.213.4root/Root1234!从192.168.213.5root/Root1234! 1、主数据库设置 配置my.cnf 一般存放于/etc/。 主从配…

uniapp h5实现Excel、Word、PDF文件在线预览,而不是跳转下载,也不需要下载

实现方案 word&#xff0c;微软 Office Web Viewer const url https://view.officeapps.live.com/op/view.aspx?src${encodeURIComponent(https://501351981.github.io/vue-office/examples/dist/static/test-files/test.docx)} window.open(url) //新建窗口打开链接预览 /…

idea使用git删除本地提交(未推送)

1、找到reset head 2、打开弹窗&#xff0c;在HEAD后面输入^ 结果为HEAD^ 注释&#xff1a; Reset Type 有三种&#xff1a; Mixed&#xff08;默认方式&#xff09;&#xff0c;保留本地源码&#xff0c;回退 commit 和 index 信息&#xff0c;最常用的方式Soft 回退到某个版本…

用于图像处理的高斯滤波器 (LoG) 拉普拉斯

一、说明 欢迎来到拉普拉斯和高斯滤波器的拉普拉斯的故事。LoG是先进行高斯处理&#xff0c;继而进行拉普拉斯算子的图像处理算法。用拉普拉斯具有过零功能&#xff0c;实现边缘岭脊提取。 二、LoG算法简述 在这篇博客中&#xff0c;让我们看看拉普拉斯滤波器和高斯滤波器的拉普…

STM32_project:led_beep

代码&#xff1a; 主要部分&#xff1a; #include "stm32f10x.h" // Device header #include "delay.h"// 给蜂鸣器IO口输出低电平&#xff0c;响&#xff0c;高&#xff0c;不向。 //int main (void) //{ // // 开启时钟 // RC…

Git 行结束符:LF will be replaced by CRLF the next time Git touches it问题解决指南

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

怎么学编程效率高,编程练习网站编程软件下载,中文编程开发语言工具下载

怎么学编程效率高&#xff0c;编程练习网站编程软件下载&#xff0c;中文编程开发语言工具下载 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的…

Qt6,使用 UI 界面完成命令执行自动化的设计

一、需要完成的功能 在子对话框&#xff08;CmdChildQt&#xff09;中&#xff0c;点击 “执行” 按钮&#xff0c;将多个命令行指令&#xff0c;依次输入到父对话框&#xff08;CmdQt&#xff09;的编辑框中并且执行&#xff0c;要求如下&#xff1a; 在前一个命令执行完成后&…

MySQL的默认引擎为什么是InnoDB

MySQL支持InnoDB、MyISAM、MEMORY、CSV等多个存储引擎&#xff0c;那为什么选InnoDB作为默认引擎呢&#xff1f; 主要原因有几点&#xff1a; 事务 事务主要用于保持数据一致性&#xff0c;是一组操作的集合&#xff0c;要么全部成功&#xff0c;要么全部失败。InnoDB引擎提供…

Pytorch 里面torch.no_grad 和model.eval(), model.train() 的作用

torch.no_grad: 影响模型的自微分器&#xff0c;使得其停止工作&#xff1b;这样的话&#xff0c;数据计算的数据就会变快&#xff0c;内存占用也会变小&#xff0c;因为没有了反向梯度计算&#xff0c;当然&#xff0c;我哦们也无法做反向传播。 model.eval() 和model.train()…

Android Studio(Json)

创建json文件 /main >> 右键new >> Folder >> Assets Folder json对象和数组 json对象&#xff1a;{key1:value1,key2:value2,...} json数组&#xff1a;[{key1:value1,...},{key11:value11,...}] 读取解析 // 两种方式&#xff1a;org.json&#xff1a;And…

【动手学深度学习】课程笔记 05-07 线性代数、矩阵计算和自动求导

05 线性代数 1. 基础知识补充 向量相关 矩阵相关 简单来说&#xff0c;范数是用来衡量矩阵&#xff08;张量&#xff09;大小的值&#xff0c;范数的值有不同的规定。 2. 代码实现 仅记录一些我比较陌生的知识。 张量的克隆 A torch.arange(20, dtypetorch.float32).resh…

【C++】继承详解

本篇要分享的内容是关于继承的内容哼哼哼啊啊啊啊啊啊啊啊啊啊啊啊啊啊 以下为本篇目录 目录 1.简单了解继承 2.继承的简单定义 3.继承简单使用 4.继承方式 4.1基类的privat 4.2基类的protected 4.3不可见与private的区别 5.父子类对象赋值转换 6.继承的作用域 7.子…

Java8.0 lambda表达式练习

1、HJ34 图片整理 图片整理_牛客题霸_牛客网 描述 Lily上课时使用字母数字图片教小朋友们学习英语单词&#xff0c;每次都需要把这些图片按照大小&#xff08;ASCII码值从小到大&#xff09;排列收好。请大家给Lily帮忙&#xff0c;通过代码解决。 Lily使用的图片使用字符&…

threejs CSS3DRenderer添加标签并设置朝向摄像机

一.由于CSS3DRenderer 是附加组件&#xff0c;必须显式导入 import { CSS3DRenderer, CSS3DObject } from three/examples/jsm/renderers/CSS3DRenderer.js;二.CSS3DRenderer特点 CSS3D不面向摄像机&#xff0c;会跟随场景缩放&#xff0c;不被模型遮挡&#xff0c;通过DOM事…