如何在 Ubuntu 16.04 上使用 PyFilter 阻止不受欢迎的 SSH 登录尝试

作者选择了 Code.org以作为 Write for Donations计划的一部分接收捐款。

介绍

Secure Shell(SSH)是一种用于安全操作网络服务的加密网络协议,通常用于远程控制计算机系统或传输文件。当SSH暴露于公共互联网时,它会成为一个安全问题。

PyFilter旨在过滤所有非法登录请求到您的服务器并阻止它们如果发送过多。它通过读取日志文件并检查未成功的请求是否来自相同的IP地址在用户可配置的时间内。

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

前提条件

要完成本教程,您将需要:

第1步:下载和配置 PyFilter

我们将通过从Github克隆其存储库来下载PyFilter。

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

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

1sudo mv PyFilter /usr/local/PyFilter

然后更改到 /usr/local/PyFilter 目录:

1cd /usr/local/PyFilter

接下来,我们需要创建一个配置文件。PyFilter配有位于Config/config.default.json的默认配置文件。我们将复制并编辑复制的版本,而不是直接编辑默认文件。

复制默认配置文件:

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

您可以使用命令查看配置文件的内容:

1less Config/config.json

默认设置要求请求在最后一个请求的5秒内发生,这需要发生5次,它们足够好,让我们运行PyFilter并确保事情工作。

第2步:运行PyFilter

PyFilter 下载包含一个名为run.sh的脚本,您应该使用它来启动 PyFilter。

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

1sudo chmod +x run.sh

一旦授予权限,运行脚本来启动 PyFilter:

1./run.sh

PyFilter 会开始观看日志,你会看到事件发生时的输出:

1[secondary_label Output]
2No file to check within rule: Mysql
3No file to check within rule: Apache
4No file to check within rule: Nginx
5Checking Ssh logs

默认情况下,PyFilter 禁止在上次失败请求 5 秒内发生的 5 个或更多失败请求的 IP 地址,您可以在 PyFilter 配置文件中更改此功能。

这些结果也被登录到 /usr/local/PyFilter/Log 目录。

当 IP 达到允许禁令的限度时,您将看到类似于以下的输出:

1[secondary_label Output]
22018-03-22 14:18:18 Found IP: 203.0.113.13 from server: your_server_name.

<$>[注意] 注意 :如果你意外地锁定自己出你的Droplet,因为你已经禁止自己,你可以遵循教程(https://andsky.com/tech/tutorials/how-to-use-the-digitalocean-console-to-access-your-droplet) 重新进入,然后按照步骤在 [步骤 6](# 步骤-6%E2%80%94-un-banning-ip-addresses)删除被禁止的IP地址。

要关闭 PyFilter,请按CTRL+C

现在让我们将 PyFilter 作为一个服务安装,以便它自动运行。

步骤 3 — 创建 PyFilter 的服务

现在你知道PyFilter工作了,让我们将其配置为运行作为服务,以便每次我们重新启动服务器时启动。

PyFilter目录中,有一个名为install.sh的脚本,它为PyFilter创建了一个服务,并允许它在系统启动时运行。

更改脚本以便您可以执行它:

1sudo chmod +x install.sh

然后启动剧本:

1./install.sh

您将看到此输出,表示安装成功:

1[secondary_label Output]
2Service created and enabled, check the status of it by using "sudo systemctl status PyFilter"

因此,让我们这样做,以确保一切正常运行:

1sudo systemctl status PyFilter

您将看到此输出,显示该服务是活跃:

1[secondary_label Output]
2 PyFilter.service - PyFilter
3   Loaded: loaded (/etc/systemd/system/PyFilter.service; enabled; vendor preset: enabled)
4   Active: active^> (running) since Wed 2018-03-21 18:55:35 UTC; 12s ago
5 Main PID: 8383 (bash)
6   CGroup: /system.slice/PyFilter.service
7           ├─8383 bash /usr/local/PyFilter/run.sh
8           ├─8384 sudo python3 run.py
9           └─8387 python3 run.py

如果您看到错误,请再次检查安装步骤。

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

步骤 4 — 配置 PyFilter 用于跨服务器禁令同步(可选)

跨服务器禁令同步允许被禁止的IP地址与所有其他服务器使用PyFilter同步,以保护它们,并禁止该地址,即使它没有达到被禁止的资格。

如前提所述,您需要安装和配置 Redis。

您还需要重置 Python 模块,您可以使用pip来安装:

1pip3 install redis

然后编辑配置文件以使用Redis而不是SQLite。在文本编辑器中打开Config/config.json文件:

1nano Config/config.json

查找下列线:

1[label Config/config.json]
2"database": "sqlite"

sqlite更改为redis:

1[label Config/config.json]
2"database": "redis"

接下来,更改 Redis 连接信息. 查找此文件的部分:

 1[label Config/config.json]
 2  "redis": {
 3    "host": "127.0.0.1",
 4    "password": null,
 5    "database": 0,
 6    "sync_bans": {
 7      "active": true,
 8      "name": "your_hostname",
 9      "check_time": 600
10    }
11  },

更改此部分,以便包含您的 Redis 服务器的连接详细信息。然后,在sync_bans部分中,将名称更改为您的主机名称。

保存文件并离开编辑器,然后重新启动 PyFilter 以应用这些更改:

1sudo systemctl restart PyFilter

PyFilter 已安装并运行。

步骤5 — 配置 PyFilter 收集有关 IP 地址的位置数据(可选)

PyFilter 可以获取关于被禁止的 IP 的位置数据,以便提供有关大多数攻击来源的统计信息。

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

1pip3 install geoip2

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

1sudo systemctl restart PyFilter

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

1[secondary_label Output]
22018-03-22 14:18:18 Found IP: 203.0.113.13 from server: your_server_name. The IP was from United Kingdom.

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

最后,让我们看看如何解禁一个地址。

第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 地址的示例:

 1[label /usr/local/PyFilter/Config/blacklist.v4]
 2# Generated by iptables-save v1.6.0 on Thu Mar 22 19:53:04 2018
 3*filter
 4:INPUT ACCEPT [217:30580]
 5:FORWARD ACCEPT [0:0]
 6:OUTPUT ACCEPT [249:30796]
 7-A INPUT -s 203.0.113.13/32 -j DROP
 8-A INPUT -s 203.0.113.14/32 -j DROP
 9-A INPUT -s 203.0.113.15/32 -j DROP
10COMMIT
11# Completed on Thu Mar 22 19:53:04 2018

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

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

從檔案中移除相關的 iptables 規則. 在這種情況下,我們已從檔案中移除 `203.0.113.13:

 1[label /usr/local/PyFilter/Config/blacklist.v4]
 2# Generated by iptables-save v1.6.0 on Thu Mar 22 19:53:04 2018
 3*filter
 4:INPUT ACCEPT [217:30580]
 5:FORWARD ACCEPT [0:0]
 6:OUTPUT ACCEPT [249:30796]
 7-A INPUT -s 203.0.113.14/32 -j DROP
 8-A INPUT -s 203.0.113.15/32 -j DROP
 9COMMIT
10# Completed on Thu Mar 22 19:53:04 2018

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

请参阅(https://andsky.com/tech/tutorials/how-to-list-and-delete-iptables-firewall-rules)有关管理规则的更多信息。

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

结论

您现在已经安装了 PyFilter 并监控您的 SSH 连接。

要了解有关配置文件的每个部分的更多信息,以及如何为其他服务(如MySQL和Apache)配置监控,请访问PyFilter网站(http://pyfilter.co.uk)。

Published At
Categories with 技术
comments powered by Disqus