Endlessh系统调用过滤终极指南:使用AppArmor限制程序权限的完整教程
Endlessh是一个巧妙的SSH tarpit工具,它通过缓慢发送无尽的SSH横幅来困住恶意SSH客户端,保护你的真实SSH服务器免受攻击。在这篇完整的AppArmor配置指南中,我将向你展示如何使用Linux的安全模块来限制Endlessh的系统调用权限,增强系统的整体安全性。🔒
什么是Endlessh SSH tarpit?
Endlessh是一个轻量级的C程序,专门设计用来捕获和拖延SSH攻击者。它监听一个端口(默认为2222),当有客户端连接时,它会非常缓慢地发送随机的SSH横幅内容,让攻击者客户端一直等待响应,从而消耗他们的时间和资源。
Endlessh的核心功能特点:
- 单线程设计 - 使用
poll()系统调用同时处理多个客户端 - 无加密依赖 - 在加密交换之前工作,不需要任何加密库
- 配置灵活 - 支持配置文件和各种命令行参数
- 轻量高效 - 占用资源极少,适合长期运行
为什么需要AppArmor系统调用过滤?
尽管Endlessh本身设计简单安全,但在生产环境中,任何网络服务都应该运行在最小的必要权限下。AppArmor作为Linux的安全模块,能够:
- 限制文件系统访问 - 只允许访问必要的文件和目录
- 控制网络操作 - 限制网络接口和端口的访问
- 管理系统调用 - 只允许执行必要的系统调用
- 防止权限提升 - 即使程序被利用,攻击者也无法获得额外权限
完整的AppArmor配置文件创建步骤
步骤1:安装必要的工具
首先确保你的系统已安装AppArmor工具:
sudo apt-get install apparmor-utils # Ubuntu/Debian
步骤2:创建Endlessh的AppArmor配置文件
在/etc/apparmor.d/目录下创建usr.bin.endlessh文件:
#include <tunables/global>
/usr/local/bin/endlessh {
#include <abstractions/base>
#include <abstractions/nameservice>
# 允许必要的网络操作
network inet stream,
network inet6 stream,
# 允许绑定到指定端口
capability net_bind_service,
# 允许读取配置文件
/etc/endlessh/config r,
# 允许写入日志文件
/var/log/endlessh.log w,
/var/log/endlessh.err w,
# 允许必要的系统调用
deny @{PROC}/[0-9]*/attr/ rw,
deny @{PROC}/[0-9]*/oom_adj rw,
# 允许使用syslog
/dev/log w,
}
步骤3:配置Endlessh的启动参数
编辑Endlessh的systemd服务文件util/endlessh.service,添加安全配置:
[Service]
ExecStart=/usr/local/bin/endlessh -v -f /etc/endlessh/config
AppArmorProfile=usr.bin.endlessh
步骤4:激活和测试AppArmor配置
# 加载AppArmor配置文件
sudo apparmor_parser -r /etc/apparmor.d/usr.bin.endlessh
# 检查配置状态
sudo aa-status | grep endlessh
# 重启Endlessh服务
sudo systemctl restart endlessh
高级系统调用过滤技巧
1. 限制文件创建位置
在AppArmor配置中添加文件路径限制:
# 只允许在特定目录创建文件
deny /tmp/** w,
deny /var/tmp/** w,
2. 控制进程间通信
# 限制进程间通信
deny ipc,
deny capability ipc_owner,
3. 网络访问精细化控制
# 只允许监听指定端口
network inet tcp bind port=2222,
实用配置示例和最佳实践
生产环境推荐配置
在util/endlessh.service基础上,结合AppArmor提供完整的服务配置方案。关键配置文件包括:
- 主程序:endlessh.c
- 服务配置:util/endlessh.service
- AppArmor配置:
/etc/apparmor.d/usr.bin.endlessh
监控和日志分析
启用详细日志记录来监控AppArmor的执行情况:
# 查看AppArmor拒绝日志
sudo journalctl -u apparmor -f
# 检查Endlessh运行状态
sudo systemctl status endlessh
常见问题解决方案
问题1:AppArmor阻止Endlessh启动
解决方案:检查AppArmor日志,调整配置文件中的权限设置,确保允许必要的文件访问和网络操作。
问题2:性能影响评估
解决方案:AppArmor对性能的影响微乎其微,但建议在启用前进行负载测试。
总结
通过使用AppArmor对Endlessh进行系统调用过滤,你可以显著提升系统的安全性,同时保持Endlessh的正常功能。这种深度防御策略是保护SSH服务的有效方法,特别适合在公网环境中部署。🚀
记住,安全是一个持续的过程。定期审查和更新你的AppArmor配置,确保它始终符合当前的安全需求。现在就开始实施这些最佳实践,让你的SSH防护更加坚固!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



