# SSH-Security **Repository Path**: Leorizon/ssh-security ## Basic Information - **Project Name**: SSH-Security - **Description**: Linux SSH安全防护小工具 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/Leorizon/ssh-security - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-09-20 - **Last Updated**: 2024-01-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: SSH, Security ## README # SSH-Security #### 介绍 SSH-Security 是一个用于 Linux SSH安全防护的小工具 #### 软件架构 软件工具为了更好的进行集群化使用,做成了C/S架构,数据存储使用Sqlite ##### Server: Server端负责数据记录存储,主要记录agent上报的攻击记录,以及存储白名单IP或网段,同时还负责将agent上报的数据注册为Prometheus指标,可以用Prometheus来抓取登录的指标数据 ##### Agent: Agent端负责读取ssh登录数据和iptables规则数据,再根据server端的黑白名单数据进行处理,对暴力破解的IP添加iptables规则进行拦截,对于在白名单中的IP则进行iptables规则删除,进行解封 ```sequence title: SSH-Security 运行流程 participant Server as node participant ss_agent as agent participant ss_server as server participant SQLite as sql agent -> node: 读取ssh登录失败信息 node --> agent: 返回btmp记录数据 agent -> node: 读取已被禁止的IP node --> agent: 返回INPUT链中被drop的IP agent -> server: 请求白名单IP记录表 server -> sql: 查询数据库中白名单记录 sql --> agent: 返回白名单IP数据 agent -> server: 请求黑名单IP记录表 server -> sql: 查询数据库中黑名单记录 sql --> agent: 返回黑名单IP数据 agent -> agent: 对ssh登录失败IP进行比对处理 agent -> node: 根据比对结果增删对应的防火墙规则 agent --> server: 有新IP攻击时上报新黑名单IP server -> sql: 写入数据保存记录 agent -> server: 上报所在节点的所有ssh登录失败统计数据 ``` #### 安装教程 项目运行需要有Linux golang开发环境: `golang >= 1.19.12` 将项目克隆到本地后,分别进入server和agent目录进行编译 agent端直接使用go编译即可 ``` go build ss-agent.go ``` server端需要先拉取一下依赖 ``` go get //拉取依赖 go build ss-server.go ``` ##### 运行 编译出可执行文件后,运行可执行文件后会输出需要设置是参数选项 ``` Usage: ./ss-server [options] Options: -auth-token string Server API Auth Token (default "SSH-Security@12") -server-port string Se-Monitor Server Address (default "127.0.0.1:9109") ``` 运行se-server时,需要指定两个参数 ``` --auth-token 是用于设定ss-agent端请求时的认证密钥,默认是: SSH-Security@12 --server-port 用于设定ss-server的运行时监听的ip端口,默认是: 127.0.0.1:9109 ``` 运行se-agent时,需要指定两个参数 ``` Usage: ./ss-agent [options] Options: -auth-token string Server API Auth Token (default "SSH-Security@12") -server-api string Se-Monitor Server API (default "127.0.0.1:9109") --auth-token 指定与ss-server端通信请求时的认证密钥,需要与ss-server端设置的一致,默认是: SSH-Security@12 --server-api 指定ss-server监听的IP端口 ``` #### 使用说明 在使用时建议在ss-server启动后,使用curl调用api接口向数据库中先添加白名单IP或在IP网段 ``` curl --request POST \ --url http://127.0.0.1:9109/report_whitelist_ip \ --header 'Content-Type: application/json' \ --header 'Authorization: SSH-Security@12' \ --data '{"ip":"192.168.1.1/24"}' ```