首页
学习笔记
经验教程
标杆项目
个人简历
ZDREAM
对抗变化的方法唯有拥抱变化。
累计撰写
35
篇文章
累计创建
3
个标签
累计收到
1
条评论
栏目
首页
学习笔记
经验教程
标杆项目
个人简历
目 录
CONTENT
以下是
Linux
相关的文章
2024-09-06
Hfish蜜罐部署体验
近来工作繁杂,但对于技术的探索欲丝毫未减。在维护现有平台稳定运行的间隙,总想尝试一些新的东西,既是学习,也算是一种调剂。最近对网络安全领域的一些实践很感兴趣,特别是蜜罐技术。作为一种主动防御手段,它通过模拟易受攻击的服务来诱捕攻击者,记录其行为,从而达到威胁感知和溯源的目的。在众多开源蜜罐系统中,HFish因其跨平台、部署简单和社区活跃等特点,成为了本次实践的首选。这篇笔记主要记录一次完整的HFish蜜罐部署、配置和接入远程节点的过程,算是一次学习体验的沉淀。一、 环境准备与部署为了不污染现有服务器环境,同时便于管理,照例基于Portainer去进行Docker部署HFish容器。HFish由管理端(Server)和节点端(Client)组成。管理端负责接收和分析攻击数据,并对节点进行管理;节点端则负责模拟各种服务,是直接面对攻击的“诱饵”。部署步骤大致如下:https://hfish.net/#/README拉取镜像:在Portainer的镜像管理页面,直接从公共仓库拉取HFish的官方镜像。选择一个稳定的版本标签即可。创建容器:version: '3.8' services: hfish: image: hfish:ubuntu335 container_name: hfish ports: - "4433:4433" - "4434:4434" - "22:22" - "135:135" - "139:139" - "1433:1433" - "3306:3306" - "3389:3389" #- "6379:6379" - "9379:6379" - "7879:7879" #- "8080:8080" - "9080:8080" - "8081:8081" - "9000:9000" - "9200:9200" environment: - TZ=Asia/Shanghai volumes: - /zdream/datas/hfish:/usr/share/hfish restart: always networks: - monitor-net networks: monitor-net: external: true二、 创建蜜罐部署完成后,通过浏览器访问 http://<服务器IP>:4433 即可进入HFish的管理后台。首次登录修改密码。HFish内置了丰富的蜜罐服务类型,涵盖了常见的Web服务、数据库服务(如MySQL、Redis)、基础服务(如SSH、Telnet)等,几乎可以“以假乱真”。创建一个蜜罐服务的操作很简单:在“环境管理” -> “服务管理”页面,可以看到所有支持的服务列表。选择一个想要模拟的服务,例如MySQL服务,点击右侧的“操作”按钮进行配置。配置的核心在于端口。默认情况下,HFish会使用服务的标准端口(如MySQL的3306)。如果宿主机的该端口已被占用,可以在部署时映射到其他端口。点击“新建服务”按钮,一个MySQL蜜罐就启动了。此时,任何扫描或尝试连接该端口的行为都将被HFish精准记录下来。为了让蜜罐更具迷惑性,还可以自定义一些服务的Banner信息或返回内容,让它看起来更像一个真实的业务系统。 三、 接入远程蜜罐HFish的强大之处不仅在于单机部署的便捷,更在于其支持分布式部署。这意味着可以在不同的网络区域、不同的服务器上部署多个节点端,并将它们统一接入到一个管理端,形成一个分布式的蜜罐网络。接入远程蜜罐的步骤同样清晰:在管理端生成节点:进入“环境管理” -> “节点管理”页面,点击“添加节点”。系统会自动生成一段安装命令。这段命令包含了连接到当前管理端所需的所有信息。在远程节点服务器上执行命令:准备一台新的、干净的服务器作为远程节点。这台服务器可以是内网的任意一台机器,也可以是位于不同云服务商的VPS。以root权限登录这台服务器,直接粘贴并执行刚才生成的命令。脚本会自动下载并安装节点端程序,并完成与管理端的连接配置。需要注意的是,要确保节点服务器的防火墙允许与管理端4434端口的通信。验证与管理:安装成功后,稍等片刻,就可以在管理端的“节点管理”页面看到新加入的节点。之后,便可以像管理本地节点一样,为这个远程节点开启或关闭各类蜜罐服务,所有攻击数据都会被实时回传到管理端进行统一分析和展示。通过这种方式,可以轻松地将蜜罐的触角延伸到网络的各个角落,极大地扩展了威胁感知的范围。 结语这次HFish的部署体验,从Portainer的容器化安装到分布式节点的接入,整个过程比预想的要平滑得多。它将复杂的蜜罐技术以一种非常易用的方式呈现出来,即便是非专业的安全人员也能快速上手。当然,蜜罐并非万能的“银弹”,它更像是一个网络中的“哨兵”和“摄像头”。通过它,可以更早地发现潜在的威胁,了解攻击者的意图和手段,为后续的安全加固和应急响应提供宝贵的情报。
2024-09-06
7
0
0
Linux
2024-06-24
服务器及容器监控:Cadvisor/Prometheus/Grafana
Cadvisor采集/Prometheus处理/Grafana展示 最初搭建了一个自己的
2024-06-24
12
0
0
Linux
2024-05-04
Linux中的科学上网与代理管理
Mihomo+MetaCubaXB实现Linux上科学上网
2024-05-04
25
0
0
Linux
2023-02-15
服务器基础安全加固
我自己的服务器是ubuntu,目前我们的国产化服务器也是兼容的Ubuntu(也有兼容centos的)。一、修改登录验证方式把密码验证换成秘钥文件验证:生成秘钥windows下使用powershell即可创建秘钥文件#使用Ed25519算法生成秘钥文件 ssh-keygen -t ed25519 -C "your_email@example.com" #或者兼容性强的话,使用RSA算法,4096位生成秘钥 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 设置密码(Passphrase):接下来,系统会提示您输入一个密码来保护您的私钥文件。为秘钥再设置密码,多重保险将公钥上传到Linux服务器添加到~/.ssh/authorized_keys 文件中,上传的话需要授权,手动创建文件编辑保存则不需要修改配置修改验证方式 /etc/ssh/sshd_configPasswordAuthentication no MaxAuthTries 3重启ssh服务 sudo systemctl restart sshd二、安装防火墙第一步:基础防火墙配置 (只需配置一次)在开始屏蔽IP之前,我们需要确保防火墙已正确设置并启用。1. 检查 UFW 状态首先,查看 UFW 是否已经激活。codeBashsudo ufw status如果是 inactive (未激活),请继续以下步骤。如果是 active (激活),请检查现有规则,确保SSH端口已开放,然后再进行后续操作。2. 设置默认规则 (安全基石)我们先设置一个安全的默认策略:拒绝所有进入的连接,允许所有出去的连接。codeBash# 拒绝所有未经允许的入站连接 sudo ufw default deny incoming # 允许所有出站连接 sudo ufw default allow outgoing3. 开放必要端口 (!!! 防止失联 !!!)这是最关键的一步!在启用防火墙之前,必须先允许 SSH 连接,否则您将会被服务器拒之门外。codeBash# 允许默认的 SSH 端口 (22) sudo ufw allow ssh # 如果您的 SSH 端口是自定义的,比如 2222,请使用下面的命令 # sudo ufw allow 2222/tcp同时,根据您的服务开放其他必要端口,例如网站服务:codeBash# 允许 HTTP (80端口) sudo ufw allow http # 允许 HTTPS (443端口) sudo ufw allow https4. 启用 UFW确认 SSH 规则已添加后,可以安全地启用防火墙。codeBashsudo ufw enable系统会提示操作可能中断现有连接,输入 y 并回车。第二步:分析日志并管理 IP 黑名单当服务器配置完成后,我们可以日常监控并屏蔽有恶意行为的 IP。1. 查询 SSH 连接日志这些命令可以帮助我们快速定位可疑 IP。codeBash# 查询近期成功的 SSH 登录记录和来源 IP grep 'sshd' /var/log/auth.log | grep 'Accepted' # 查询近期失败的 SSH 登录记录 grep 'sshd' /var/log/auth.log | grep 'Failed' # 统计每个 IP 的失败登录次数,并排序 grep 'sshd' /var/log/auth.log | grep 'Failed' | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr``` 通过最后一个命令的输出,您可以轻松找到那些频繁尝试登录失败的 IP 地址。 **2. 添加 IP 到黑名单** 假设我们发现 IP `139.162.154.81` 存在恶意行为,使用下面简单的命令即可屏蔽它。 ```bash sudo ufw deny from 139.162.154.813. 检查防火墙状态可以随时查看当前的规则列表,确认 IP 是否已被屏蔽。codeBash# 使用 numbered 参数可以显示规则序号,方便后续删除 sudo ufw status numbered您会在列表中看到一条 DENY 规则针对 139.162.154.81。4. 从黑名单中移除 IP (如果误伤)如果需要解除对某个 IP 的屏蔽,操作同样简单。codeBash# 直接通过规则内容删除 sudo ufw delete deny from 139.162.154.81 # 或者,通过 "ufw status numbered" 看到的规则序号来删除(假设序号是 10) # sudo ufw delete 10三、安装杀毒软件以ClamAV为例:1. 安装 ClamAV 核心组件此命令会安装 clamscan (手动扫描工具) 和 freshclam (病毒库更新工具)。codeBashsudo apt update sudo apt install clamav2. 理解并检查病毒库自动更新安装完成后,系统会自动创建一个名为 clamav-freshclam 的后台服务,该服务会定时自动更新病毒库。这是为什么不应手动执行 freshclam 的原因:因为后台服务在运行时会锁定日志文件,此时如果您在命令行中手动运行 freshclam,就会因无法获取文件锁而报错。正确的检查方法是查看日志文件:codeBash# 查看最新的日志,确认更新状态 (按 Ctrl+C 退出) sudo tail -f /var/log/clamav/freshclam.log如果您在日志中看到 Database is up-to-date 或下载更新的记录,就证明自动更新工作正常。(仅在特殊情况下)如何手动强制更新:如果您确实需要立即强制更新,需要先停掉后台服务。codeBash# 1. 临时停止后台服务 sudo systemctl stop clamav-freshclam # 2. 手动执行更新 sudo freshclam # 3. 重新启动后台服务以恢复自动更新 sudo systemctl start clamav-freshclam第二部分:执行手动扫描 (clamscan)clamscan 是一个按需运行的命令行扫描工具。1. 扫描指定目录 (推荐)扫描单个用户的家目录或网站目录,目标明确,耗时较短。codeBash# -r: 递归扫描子目录 # -i: 只打印被感染的文件 clamscan -r -i /home2. 扫描整个系统 (谨慎使用)警告:此操作会扫描您的整个文件系统,将消耗大量 CPU 和 I/O 资源,并可能需要数小时才能完成。请在服务器负载较低时执行。codeBashclamscan -r /3. 高级扫描示例您可以指定多个路径进行扫描,并使用更多参数。codeBash# 扫描多个指定的、风险较高的目录 clamscan -r --bell -i /root /tmp /var/www /opt--bell: 在发现病毒时发出系统响铃提示。-i: 只显示(打印)被感染文件的详细信息,正常的扫描过程不会显示。第三部分:安装并使用后台扫描服务 (高级)clamav-daemon 是一个后台守护进程 (clamd),它会将病毒库一直加载在内存中,提供更快的扫描性能。它主要用于:为其他需要调用杀毒引擎的应用(如邮件服务器)提供实时扫描接口。执行更快的、由 clamdscan 命令触发的扫描。1. 安装守护进程codeBashsudo apt install clamav-daemon -y2. 启动并设置开机自启安装后,服务可能不会自动启动,需要手动操作。codeBashsudo systemctl start clamav-daemon sudo systemctl enable clamav-daemon # 检查服务状态,确保其 'active (running)' sudo systemctl status clamav-daemon3. 编辑守护进程配置 (可选)守护进程的配置位于 clamd.conf。大多数情况下,默认配置即可工作。codeBashsudo nano /etc/clamav/clamd.conf注意:修改此配置文件只影响 clamav-daemon 服务,不影响手动运行的 clamscan。4. 使用 clamdscan 进行快速扫描当 clamav-daemon 运行时,您应该使用 clamdscan 命令来请求服务进行扫描,而不是 clamscan。因为 clamdscan 只是一个客户端,它将扫描任务发送给已在内存中准备就绪的守护进程,速度会快得多。codeBash# 使用 clamdscan 的语法与 clamscan 基本相同 clamdscan -r /home总结:命令速查目的命令备注安装sudo apt install clamav clamav-daemon一次性安装所有组件检查更新日志sudo tail -f /var/log/clamav/freshclam.log首选的更新检查方式手动扫描clamscan -r -i [目录]适合按需、不频繁的扫描服务控制sudo systemctl [start/stop/status] clamav-daemon管理后台服务快速服务扫描clamdscan -r [目录]当 clamav-daemon 运行时使用四、安装fail2bansudo apt update sudo apt install fail2ban -y #查看启动状态 systemctl status fail2ban #查看ssh封禁状态 fail2ban-client status sshd Status for jail: sshd |- Filter | |- Currently failed: 1 # 当前失败次数(在重置周期内) | |- Total failed: 78 # 自服务启动后,总共记录到的失败尝试次数 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 5 # 当前正处于封禁状态的 IP 地址数量 |- Total banned: 12 # 自服务启动后,总共执行了多少次封禁操作 `- Banned IP list: 1.2.3.4 5.6.7.8 9.10.11.12 13.14.15.16 17.18.19.20Fail2ban 的主配置文件是 /etc/fail2ban/jail.conf。我们永远不要直接修改这个文件,因为它在软件更新时可能会被覆盖。正确的做法是创建一个本地配置文件 jail.local,在这里覆盖默认设置。复制配置文件:codeBashsudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local编辑本地配置文件:codeBashsudo nano /etc/fail2ban/jail.local修改 [DEFAULT] 全局设置:在 jail.local 文件中找到 [DEFAULT] 段落,这里是几个最需要关注的核心参数:codeIni[DEFAULT] # # "bantime" is the number of seconds that a host is banned. # bantime = 10m bantime = 1h # 封禁时长,例如 1小时 (1h), 1天 (1d) # "findtime" is the number of seconds that a host is observed. # findtime = 10m findtime = 10m # 观察时间窗口,例如 10分钟 # "maxretry" is the number of failures before a host get banned. # maxretry = 5 maxretry = 3 # 在观察时间内,允许的最大失败次数简单理解: 如果一个 IP 在 10分钟 (findtime) 内失败了 3次 (maxretry),它就会被封禁 1小时 (bantime)。保存并退出编辑器 (在 nano 中是 Ctrl+X, Y, Enter)。重启 Fail2ban 服务 以应用新的配置:codeBashsudo systemctl restart fail2ban检查服务状态,确保没有错误:codeBashsudo systemctl status fail2ban看到 active (running) 就表示成功了。检查 sshd 监狱是否已激活:codeBashsudo fail2ban-client status你应该能在 Jail list 中看到 sshd。查看 sshd 监狱的详细状态:codeBashsudo fail2ban-client status sshd这里会显示当前被封禁的 IP 列表和统计数据。附一:CentOS防火墙管理查看防火墙状态systemctl status firewalld查看端口放通情况firewall-cmd --list-ports添加放通的端口firewall-cmd --add-port=6379/tcp --permanent重启防火墙应用更改firewall-cmd --reload附二:其他措施了解入侵检测系统(IDS)推荐:Snort:Snort 是一款开源软件,因此是免费的。它可以在通用的硬件上运行,但对于高速网络或大规模部署,可能需要更强大的硬件支持。Suricata:Suricata 也是一款开源软件,免费使用。它需要一定的硬件资源来支持高性能的流量分析,因此在大规模部署时可能需要更强大的硬件支持。Zeek(前身为Bro):Zeek 也是开源软件,免费使用。它需要在通用硬件上运行,并且可以根据需要进行灵活的配置。入侵防御系统(IPS)推荐:Cisco Firepower:Cisco Firepower 是商业产品,需要购买许可证来使用。它通常需要专门的硬件设备,如Cisco Firepower安全设备,以支持其功能和性能。Palo Alto Networks:Palo Alto Networks 提供商业级的入侵防御系统,通常需要购买许可证和专门的硬件设备来支持其功能和性能。Fortinet FortiGate:Fortinet FortiGate 也是商业产品,需要购买许可证来使用。它通常需要专门的硬件设备,如FortiGate安全网关,以支持其功能和性能。
2023-02-15
17
0
0
Linux
2023-02-03
群晖NAS-3种不同的备份方式比较
1 Synology Drive如果系统支持的话,其实Synology Drive体验真的挺好的,不管是windows、Linux、还是移动端。1.1 工作模式服务端(NAS)启用 Synology Drive Server,客户端(Windows/Linux/手机)安装 Synology Drive Client,配置一下备份策略和要同步的文件夹,就完事了,轻松愉快。1.2 个人体验我比较喜欢定
2023-02-03
48
0
0
NAS
Linux
2022-10-29
同一个端口,同时支持http和https访问
1 需求背景有点奇葩的一个需求,出现的原因是平台很久以前上线的时候使用的是“http://ip:port/”,系统运行了两年多,培训材料中写的登录地址、用户保存的书签地址都是这种形式。我接手项目时,为了强化安全(过密评)着手启用https+域名,同时为了保障业务正常不受影响、还得确保市县各部门的老用户正常使用之前收藏的地址打开也不报错。2 解决方案2.1 可选思路-重定向最简单的方法就是直接根据
2022-10-29
4
0
0
Linux
2022-09-29
SSL证书部署
建议优先参考:Nginx 安装 SSL 配置 HTTPS 超详细完整教程全过程-阿里云开发者社区 (aliyun.com) 如何转换证书格式? (aliyun.com) 在CentOS系统Tomcat 8.5或9上部署SSL证书 (aliyun.com) 个人笔记:1.1. 准备SSL证书进入当前Nginx运行目录,创建cert目录存放证书:cd /usr/local/nginx/conf #需确认为实际运行的nginx配置文件夹mkdir cert将证书及秘钥文件复制到该文件夹可用pwd确认当前路径举例: /usr/local/nginx/nginx-1.22.0/conf/cert 1.2. 开通443端口(或指定的其他https端口)设置并保存防火墙配置:iptables -I INPUT -p tcp --dport 443 -j ACCEPTservice iptables save重启防火墙:service iptables restart检查端口开通情况:netstat -tunlp查看占用端口的程序和进程:lsof -i :443杀掉占用端口的进程(须先确认):kill -9 进程id1.3. 修改nginx配置进入当前nginx运行目录下的conf文件夹修改前先备份:cp nginx.conf nginx-bak.conf编辑nginx.conf配置文件vim nginx.conf打开配置文件后按i进入编辑模式: 将所有HTTP请求通过rewrite指令重定向到HTTPS:server { listen 80; server_name yourdomain; #需要将yourdomain替换成证书绑定的域名。 rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。 location / { index index.html index.htm; }}设置https模块配置:server { listen 443 ssl; #配置HTTPS的默认访问端口为443(或根据网络拓扑确认实际应使用的端口)。 #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。 #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。 server_name www.hitagi.cn; root html; index index.html index.htm; ssl_certificate cert/xxx.pem; #替换证书文件名称 ssl_certificate_key cert/xxx.key; #替换秘钥文件名称 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #表示使用的加密套件的类型。 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。 ssl_prefer_server_ciphers on; location / { root html; #Web网站程序存放目录。 proxy_pass http://127.0.0.1:8080; index index.html index.htm; }}编辑完成后按esc退出编辑模式。保存并关闭文件::wq检查当前运行的nginx版本是否包含ssl模块(在nginx的sbin目录下执行如已配置环境变量可忽略):./nginx -V如果返回结果中不包含 “--with-http_ssl_module”则需添加模块并重新编译nginx程序。在运行的nginx下sbin文件夹备份nginx程序:cp nginx nginx-bak在nginx安装包文件夹内使用修改后的配置:./configure --with-http_ssl_module #(需添加原有模块)编译:make请勿使用编译并安装!# make install停止运行中的nginx服务:./nginx -s stop将安装包文件夹中编译后生成的新nginx程序复制到到原运行中的目录替换:cp 安装包目录/sbin/nginx 实际运行目录/sbin/nginx进入运行目录的sbin,测试配置文件是否正确:./nginx -t -c /usr/local/nginx/conf/nginx.conf启动Nginx:./nginx查看是否启动成功ps -ef | grep nginx附:Nginx重载配置并启动命令:./nginx -s reload
2022-09-29
19
0
0
Linux