前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >加固你的服务器,防止SSH攻击

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

原创
作者头像
苏子晨
发布2018-07-25 15:40:41
2K0
发布2018-07-25 15:40:41
举报
文章被收录于专栏:云计算教程系列

介绍

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。切换到您的主目录并克隆存储库:

代码语言:javascript
复制
cd ~
git clone https://github.com/Jason2605/PyFilter.git

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

代码语言:javascript
复制
sudo mv PyFilter /usr/local/PyFilter

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

代码语言:javascript
复制
cd /usr/local/PyFilter

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

备份默认配置文件:

代码语言:javascript
复制
sudo cp Config/config.default.json Config/config.json

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

代码语言:javascript
复制
cd /usr/local/PyFilter

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

第二步、运行PyFilter

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

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

代码语言:javascript
复制
sudo chmod +x run.sh

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

代码语言:javascript
复制
./run.sh

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

代码语言:javascript
复制
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达到了禁止的限制时,您将看到类似于下面的输出:

代码语言:javascript
复制
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创建服务并使其在系统启动时运行。

修改脚本的执行权限:

代码语言:javascript
复制
sudo chmod +x install.sh

然后启动脚本:

代码语言:javascript
复制
./install.sh

安装成功的显示如下:

代码语言:javascript
复制
Service created and enabled, check the status of it by using "sudo systemctl status PyFilter"

确保一切正常运行:

代码语言:javascript
复制
sudo systemctl status PyFilter

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

代码语言:javascript
复制
● 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安装:

代码语言:javascript
复制
pip3 install redis

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

代码语言:javascript
复制
nano Config/config.json

找到以下行:

代码语言:javascript
复制
"database": "sqlite"

更改sqliteredis

代码语言:javascript
复制
"database": "redis"

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

代码语言:javascript
复制
  "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以应用这些更改:

代码语言:javascript
复制
sudo systemctl restart PyFilter

PyFilter现已安装并正在运行。

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

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

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

代码语言:javascript
复制
pip3 install geoip2

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

代码语言:javascript
复制
sudo systemctl restart PyFilter

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

代码语言:javascript
复制
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地址的示例:

代码语言:javascript
复制
# 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地址,请在文本编辑器中打开相关的黑名单文件:

代码语言:javascript
复制
sudo nano /usr/local/PyFilter/Config/blacklist.v4

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

代码语言:javascript
复制
# 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》

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步、下载和配置PyFilter
  • 第二步、运行PyFilter
  • 第三步、为PyFilter创建服务
  • 第四步、为跨服务器禁用同步配置PyFilter(可选)
  • 第五步、配置PyFilter以收集关于IP地址的地理数据(可选)
  • 结论
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档