加固你的服务器,防止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 条评论
登录 后参与评论

相关文章

来自专栏网络

CobaltStrike团体服务器部署并后台运行

大家好,我是你们的老朋友Alex。Cobaltstrike的部署安装很简单,但是在实际使用中出现了问题。我把团队服务器放在ECS上,出现了两个问题:1.客户端无...

36160
来自专栏L宝宝聊IT

MFS搭建分布式文件系统

20360
来自专栏云计算教程系列

如何在服务器上安装LAMP

在本教程中,我们将在Ubuntu上安装LAMP。Ubuntu将满足我们的第一个要求:Linux操作系统。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免...

56120
来自专栏云计算D1net

Docker发布集群工具SwarmKit

最近Docker公司开源了Docker集群管理和容器编排工具SwarmKit,其主要功能包括节点发现、基于raft算法的一致性和任务调度等。基本概念服务器上运行...

37660
来自专栏黑白安全

常规web渗透测试漏洞描述及修复建议

apache一些样例文件没有删除,可能存在cookie、session伪造,进行后台登录操作

47140
来自专栏linux运维学习

linux学习第二十九篇:linux网络相关,防火墙:firewalld和netfilter,netfilter5表5链介绍,iptables语法

linux网络相关 查看网卡ip //安装包:yum install -y net-tools ifconfig -a:当网卡没有IP的时候不会显示 打...

23270
来自专栏木可大大

XSS攻击与防范

XSS攻击,又称为CSS(Cross Site Scripting),由于CSS已经被用作层叠样式表,为了避免这个冲突,我们将Cross缩写成X。XSS攻击的中...

9710
来自专栏流柯技术学院

Visual GC提示"不受此JVM支持“解决方案(配置jstatd)

Visual GC提示"不受此JVM支持“,如果想使用这个插件,就需要配置jstatd连接方式,下面来看jstatd的配置;

42410
来自专栏运维小白

Linux基础(day38)

10.32/10.33 rsync通过服务同步 rsync 通过服务的方式同步 要编辑配置文件/etc/rsyncd.conf 启动服务rsync --daem...

21260
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Pydio托管文件共享服务器

随着云的采用增加,越来越多的数据被远程存储。从音乐到图片再到个人文档,很多人都将文件上传到他们不管理的服务器上。如果您希望将文件保存在您控制的服务器上,则可以使...

40600

扫码关注云+社区

领取腾讯云代金券