专栏首页云计算教程系列加固你的服务器,防止SSH攻击
原创

加固你的服务器,防止SSH攻击

介绍

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。它通常用于远程控制计算机系统或传输文件。当SSH暴露给公网时,它会有安全隐患。您会发现一些恶意程序试图破解您的密码。

PyFilter软件目的是过滤掉您服务器的所有非法登录请求,。它的工作原理是读取防火墙日志文件,并在用户可配置的时间内检查请求是否来自同一IP地址。如果它捕获了太多失败的尝试,则会向防火墙添加规则,从而拒绝其连接到服务器。

在本教程中,您将安装并配置PyFilter以阻止SSH请求。然后,您将安装PyFilter作为服务,并可选择配置跨服务器同步禁止IP数据,该功能允许多个服务器共享禁止的IP地址列表,并启用PyFilter来记录有关IP地址的位置数据。

准备

要完成本教程,您需要:

  • 一个Ubuntu 16.04服务器,没有服务器的同学可以在这个页面购买。 或使用腾讯云免费开发者专属在线实验平台进行试验。
  • 您需要安装Python 3和PIP,可以使用sudo apt-get install python python3-pip命令进行安装。
  • 如果您希望在第四步中配置PyFilter的配置跨服务器同步禁止IP数据功能,请安装Redis。

第一步、下载和配置PyFilter

我们将通过从Github克隆其存储库来下载PyFilter。切换到您的主目录并克隆存储库:

cd ~
git clone https://github.com/Jason2605/PyFilter.git

这将创建一个名为PyFilter的目录。将此目录移动到/usr/local文件夹:

sudo mv PyFilter /usr/local/PyFilter

然后切换到/usr/local/PyFilter目录:

cd /usr/local/PyFilter

接下来,我们需要创建一个配置文件。PyFilter附带一个默认配置文件Config/config.default.json

备份默认配置文件:

sudo cp Config/config.default.json Config/config.json

使用less命令查看配置文件的内容:

cd /usr/local/PyFilter

接下来,让我们运行PyFilter并确保其工作正常。

第二步、运行PyFilter

PyFilter包含一个run.sh用于启动PyFilter的脚本。

首先,更改脚本的权限以使其可执行。

sudo chmod +x run.sh

授予权限后,运行脚本以启动PyFilter:

./run.sh

PyFilter将开始审查系统日志,当事件发生时您将看到如下输出:

No file to check within rule: Mysql
No file to check within rule: Apache
No file to check within rule: Nginx
Checking Ssh logs

默认情况下,PyFilter会禁止在上一次失败请求的5秒内发生的五个及五个以上失败请求的IP。您可以在PyFilter配置文件中更改此设置。

这些结果也会记录到/usr/local/PyFilter/Log目录中。

当IP达到了禁止的限制时,您将看到类似于下面的输出:

2018-03-22 14:18:18 Found IP: 203.0.113.13 from server: your_server_name.

要关闭PyFilter,请按CTRL+C。现在让我们将PyFilter安装为系统服务,以便它可以自动运行。

第三步、为PyFilter创建服务

既然您知道PyFilter可以工作,那么让我们将其配置为作为系统服务运行,以便每次重启服务器时它都会启动。

PyFilter目录中,使用脚本install.sh为PyFilter创建服务并使其在系统启动时运行。

修改脚本的执行权限:

sudo chmod +x install.sh

然后启动脚本:

./install.sh

安装成功的显示如下:

Service created and enabled, check the status of it by using "sudo systemctl status PyFilter"

确保一切正常运行:

sudo systemctl status PyFilter

您将看到此输出,显示该服务是active

● PyFilter.service - PyFilter
   Loaded: loaded (/etc/systemd/system/PyFilter.service; enabled; vendor preset: enabled)
   Active: <^>active^> (running) since Wed 2018-03-21 18:55:35 UTC; 12s ago
 Main PID: 8383 (bash)
   CGroup: /system.slice/PyFilter.service
           ├─8383 bash /usr/local/PyFilter/run.sh
           ├─8384 sudo python3 run.py
           └─8387 python3 run.py

如果有错误提示,请再次查看安装步骤。

接下来,让我们看看如何配置PyFilter与其他服务器共享禁止的IP地址。

第四步、为跨服务器禁用同步配置PyFilter(可选)

服务器禁止IP地址列表同步:将禁止的IP地址与使用PyFilter保护它们的所有其他服务器同步,并禁止这些地址。

如先决条件中所述,您需要安装和配置Redis。

您还需要redis的Python模块,您可以使用pip安装:

pip3 install redis

在文本编辑器中打开Config/config.json文件:

nano Config/config.json

找到以下行:

"database": "sqlite"

更改sqliteredis

"database": "redis"

接下来,更改Redis连接信息。找到文件的这一部分:

  "redis": {
    "host": "127.0.0.1",
    "password": null,
    "database": 0,
    "sync_bans": {
      "active": true,
      "name": "your_hostname",
      "check_time": 600
    }
  },

修改此部分,使其包含Redis服务器的连接信息。然后,在该sync_bans部分中,将name更改为您的主机名。对于使用相同Redis服务器运行PyFilter的每个系统,此名称必须是唯一的,以便跨服务器禁止同步正常工作。

保存文件并退出编辑器。然后重新启动PyFilter以应用这些更改:

sudo systemctl restart PyFilter

PyFilter现已安装并正在运行。

第五步、配置PyFilter以收集关于IP地址的地理数据(可选)

PyFilter可以检索有关被禁IP的地理数据,以便提供有关攻击地址的统计信息。此可选模块将此信息附加到PyFilter的日志中。

要使用此功能,首先需要geoip2的Python模块,您可以使用pip安装它:

pip3 install geoip2

安装此模块后,重新启动PyFilter以识别新模块:

sudo systemctl restart PyFilter

现在,当您看到禁止的IP地址时,您将看到有关IP的其他信息:

2018-03-22 14:18:18 Found IP: 203.0.113.13 from server: your_server_name. The IP was from United Kingdom.

PyFilter现在成功记录了请求来自哪个国家/地区。

最后,让我们来看看如何取消禁止的IP地址。

第6步 - 取消禁止IP地址

PyFilter纯粹是一种通过创建iptables规则来禁止IP地址的方法。当禁止的IP,它会更新防火墙规则,然后保存规则到/usr/local/PyFilter/Config/blacklist.v4/usr/local/PyFilter/Config/blacklist.v6文件下。

以下是/usr/local/PyFilter/Config/blacklist.v4上几个被禁用的IPv4地址的示例:

# Generated by iptables-save v1.6.0 on Thu Mar 22 19:53:04 2018
*filter
:INPUT ACCEPT [217:30580]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [249:30796]
-A INPUT -s 203.0.113.13/32 -j DROP
-A INPUT -s 203.0.113.14/32 -j DROP
-A INPUT -s 203.0.113.15/32 -j DROP
COMMIT
# Completed on Thu Mar 22 19:53:04 2018

要取消禁用此IP地址,请在文本编辑器中打开相关的黑名单文件:

sudo nano /usr/local/PyFilter/Config/blacklist.v4

从文件中删除关联的iptables规则。在这种情况下,我们已从文件中删除203.0.113.13

# Generated by iptables-save v1.6.0 on Thu Mar 22 19:53:04 2018
*filter
:INPUT ACCEPT [217:30580]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [249:30796]
-A INPUT -s 203.0.113.14/32 -j DROP
-A INPUT -s 203.0.113.15/32 -j DROP
COMMIT
# Completed on Thu Mar 22 19:53:04 2018

然后保存文件并关闭编辑器。使用sudo systemctl restart PyFilter重新启动。PyFilter将使用此文件更新防火墙规则。

您还可以通过将IP添加到/usr/local/PyFilter/Config/config.json文件中的白名单部分来告诉PyFilter忽略哪些IP地址。

结论

您现在已安装PyFilter并监控SSH连接。要了解有关配置文件的每个部分以及如何配置其他服务,建议您查看PyFilter的官网。谢谢您的阅读,更多Linux安全知识请登录腾讯云+社区查看。


参考文献:《How to Block Unwanted SSH Login Attempts with PyFilter on Ubuntu 16.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用GNU Screen管理持久终端会话

    GNU Screen是一种与终端会话配合使用的工具,允许用户在断开连接后恢复会话。Screen可防止会话“超时”或断开SSH连接或本地终端仿真器。单个Scree...

    苏子晨
  • 如何在Ubuntu上加密你的信息:Vault入门教程

    Vault是一个开源工具,提供安全,可靠的方式来存储分发API密钥,访问令牌和密码等加密信息。在部署需要使用加密或敏感数据的应用程序时,您就应该试试Vault。

    苏子晨
  • 如何在Debian 9上安装MariaDB

    MariaDB是一个开源数据库管理系统,通常作为流行的LAMP(Linux,Apache,MySQL,PHP / Python / Perl)堆栈的一部分代替M...

    苏子晨
  • Java每日一练(2017/6/7)

    Java基础 | 数据库 | Android | 学习视频 | 学习资料下载 课前导读 ●回复"每日一练"获取以前的题目! ●答案公布时间:为每期发布题目的第二...

    Java学习
  • Silverlight中的三维效果和3D动画

    本文是参考MSDN对Silverlight中的透视转换做的一个小结(官方MSDN中文版的翻译个人觉得其中有些小问题)。

    卡尔曼和玻尔兹曼谁曼
  • 美海军建立远程数据中心,参与空军的F135发动机测试

    据thebaynet网站8月4日报道,经过1年的发展,美国海军成功的在马里兰州海军航空兵站的推进系统评估中心(Propulsion Systems Evalua...

    数据猿
  • 大数据+体育 全副武装的高科技运动员正在诞生

    【数据猿导读】 未来,大数据在体育行业中一定会发挥更大的作用。 记者 | 大文 官网 | www.datayuan.cn 微信公众号ID | datayuanc...

    数据猿
  • 铢宝益做客 《宝玉石周刊》直播间,探寻“珠宝行业模式创新的路径”|腾讯SaaS加速器·学员动态

    ? 来源 |  腾讯SaaS加速器首期项目-铢宝益 ---- 2020年10月10日下午,《宝玉石周刊》“总编峰会”第2期在深圳水贝壹号举行,铢宝益科技总经理...

    腾讯SaaS加速器
  • ParseInt的两个参数

    当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

    我不是费圆
  • 2.4.2、Google Analytics高级应用——行为流报告

    GA 里面有一个用户流报告,还有一个行为流报告,如果不去细看,第一感觉会是这两个报告不是一样的吗,长得那么像。下面就要介绍一下用户流报告和行为流报告的异同点:

    GA小站

扫码关注云+社区

领取腾讯云代金券