Skip to main content

A Python tool for managing SSH login restrictions and IP-based access control on Linux systems

Project description

SSH Login Manager

一个专注于SSH登录限制和IP访问控制的Python工具,用于管理Linux系统的SSH登录安全。

功能特性

  • 🔐 用户-IP绑定: 限制用户只能从指定IP登录SSH
  • 🌐 IP访问控制: 基于IP地址的访问限制管理
  • 📊 登录监控: 实时监控SSH登录失败记录
  • 🚫 IP封锁: 自动封锁恶意IP地址
  • 🛡️ Fail2Ban集成: 集成Fail2Ban进行动态防护
  • 💾 自动备份: 修改前自动备份配置文件
  • 🖥️ 交互界面: 友好的命令行交互界面

安装

从源码安装

# 克隆仓库
git clone https://gitee.com/liumou_site/ssh-pam-management.git
cd ssh-pam-management

# 安装到系统
pip3 install .

# 或者使用开发模式
pip3 install -e .

从PyPI安装(未来版本)

pip3 install ssh-login-manager

使用方法

交互式界面

# 启动交互式界面
ssh-login-manager

主要功能菜单

启动工具后,您将看到以下功能菜单:

  1. 查看当前SSH配置 - 显示当前SSH配置文件内容
  2. 添加用户-IP限制 - 限制用户只能从指定IP登录
  3. 移除用户-IP限制 - 移除用户的IP登录限制
  4. 添加IP白名单 - 添加允许访问的IP地址
  5. 查看登录失败记录 - 查看最近的SSH登录失败记录
  6. 封锁恶意IP - 使用iptables封锁恶意IP
  7. 解除IP封锁 - 解除已封锁的IP地址
  8. 设置Fail2Ban保护 - 配置Fail2Ban进行动态防护
  9. 退出 - 退出程序

权限要求

由于需要修改系统配置文件,建议使用root权限运行:

sudo ssh-login-manager

项目结构

ssh-login-manager/
├── src/
│   └── ssh_login_manager/
│       ├── __init__.py              # 包初始化
│       ├── main.py                  # 主入口点
│       ├── ssh_config_manager.py    # SSH配置管理器
│       ├── ip_access_manager.py     # IP访问控制管理器
│       ├── login_monitor.py         # 登录监控器
│       └── ssh_cli_interface.py     # SSH命令行交互界面
├── pyproject.toml                   # 现代打包配置
├── setup.py                        # 兼容性打包配置
├── README.md                       # 项目文档
└── LICENSE                         # 许可证文件

模块说明

ssh_config_manager.py

  • SSHConfigManager类: 负责管理SSH配置文件
  • 读取和修改SSH配置文件(/etc/ssh/sshd_config)
  • 支持用户-IP绑定配置管理
  • 自动备份机制确保操作安全

ip_access_manager.py

  • IPAccessManager类: 核心IP访问控制功能
  • 管理基于pam_access.so的IP访问限制
  • 支持IP白名单和黑名单管理
  • 处理access.conf配置文件

login_monitor.py

  • LoginMonitor类: 登录失败监控功能
  • 实时监控SSH登录失败记录
  • 统计IP登录失败次数
  • 集成iptables进行IP封锁

ssh_cli_interface.py

  • SSHCLIInterface类: 用户交互界面
  • 提供菜单驱动的命令行操作
  • 集成所有SSH登录管理功能

技术实现

用户-IP绑定

通过修改SSH配置文件实现用户与特定IP的绑定:

# 在/etc/ssh/sshd_config中添加
Match User username Address 192.168.1.100
    PasswordAuthentication yes

IP访问控制

使用pam_access.so模块进行IP级别的访问控制:

# 在/etc/security/access.conf中添加
+ : username : 192.168.1.100
- : ALL : ALL

登录失败监控

通过解析系统日志文件监控SSH登录失败:

# 监控/var/log/auth.log中的失败记录
Failed password for username from 192.168.1.100

IP封锁

使用iptables封锁恶意IP:

# 添加iptables规则封锁IP
iptables -A INPUT -s 192.168.1.100 -j DROP

开发

设置开发环境

# 克隆项目
git clone https://gitee.com/liumou_site/ssh-pam-management.git
cd ssh-pam-management

# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 安装开发依赖
pip install -e .

运行测试

# 运行基本功能测试
python -m pytest tests/

# 运行代码风格检查
flake8 src/

# 运行类型检查
mypy src/

贡献

欢迎提交Issue和Pull Request来改进这个项目。

许可证

本项目采用MIT许可证。详见LICENSE文件。

免责声明

此工具用于系统管理目的。在使用前请确保:

  1. 理解SSH配置和IP访问控制的工作原理
  2. 在测试环境中验证配置更改
  3. 备份重要的系统配置文件(/etc/ssh/sshd_config, /etc/security/access.conf等)
  4. 了解修改SSH配置和防火墙规则可能带来的安全影响
  5. 确保有备用的SSH访问方式,以防配置错误导致无法登录

作者对使用此工具造成的任何系统问题不承担责任。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ssh_login_manager-1.0.0.tar.gz (17.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ssh_login_manager-1.0.0-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

File details

Details for the file ssh_login_manager-1.0.0.tar.gz.

File metadata

  • Download URL: ssh_login_manager-1.0.0.tar.gz
  • Upload date:
  • Size: 17.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.2

File hashes

Hashes for ssh_login_manager-1.0.0.tar.gz
Algorithm Hash digest
SHA256 e8a4364cf53ee694152bb7a8aec4897f2a2ee34b3591f8bc4f8b168071e20abb
MD5 4eb7f932f75c3aead2eec08fa00ac60f
BLAKE2b-256 96f73c25063c1c4c62cf8d99227175a0e85e3d79445c0d64a653e7f84c4dabf9

See more details on using hashes here.

File details

Details for the file ssh_login_manager-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ssh_login_manager-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 761cb055f26d7039655521968e189eef014c9fcd62c1e5b60425afbbd22a8d44
MD5 ae0c091b1c80b3c72b57e428a3862a39
BLAKE2b-256 b84dde0dbb852279cd1146877789acfe776822ebb3e6e583092294f42d4d4c8a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page