Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。它通常用于远程控制计算机系统或传输文件。当SSH暴露给公网时,它会有安全隐患。您会发现一些恶意程序试图破解您的密码。
PyFilter软件目的是过滤掉您服务器的所有非法登录请求,。它的工作原理是读取防火墙日志文件,并在用户可配置的时间内检查请求是否来自同一IP地址。如果它捕获了太多失败的尝试,则会向防火墙添加规则,从而拒绝其连接到服务器。
在本教程中,您将安装并配置PyFilter以阻止SSH请求。然后,您将安装PyFilter作为服务,并可选择配置跨服务器同步禁止IP数据,该功能允许多个服务器共享禁止的IP地址列表,并启用PyFilter来记录有关IP地址的位置数据。
要完成本教程,您需要:
sudo apt-get install python python3-pip
命令进行安装。我们将通过从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包含一个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
目录中,使用脚本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地址。
服务器禁止IP地址列表同步:将禁止的IP地址与使用PyFilter保护它们的所有其他服务器同步,并禁止这些地址。
如先决条件中所述,您需要安装和配置Redis。
您还需要redis
的Python模块,您可以使用pip
安装:
pip3 install redis
在文本编辑器中打开Config/config.json
文件:
nano Config/config.json
找到以下行:
"database": "sqlite"
更改sqlite
到redis
:
"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的日志中。
要使用此功能,首先需要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》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。