文字转自xaoc的学习笔记,感谢大佬的分享
fail2ban
参考:
如何在 Ubuntu 20.04 上使用 Fail2Ban 保护 Nginx 服务器
注意:
ssh ban ip 是统计一段时间内的错误次数,登录成功不会刷新累计的错误次数
安装
$ sudo apt install fail2ban
# apt 库里的不是最新,可以去 https://github.com/fail2ban/fail2ban/releases 下载最新版 deb 升级成最新版
$ sudo apt install ./fail2ban_1.0.2-1.upstream1_all.deb
配置
$ sudo vim /etc/fail2ban/jail.conf
[DEFAULT]
bantime = -1 # 永久 ban
findtime = 1d # 错误次数保留一天
maxretry = 3 # 最多3次错误
[sshd]
enabled = true
#可选项,可以改成激进模式
mode = aggressive
启动 fail2ban
$ sudo systemctl enable fail2ban
$ sudo systemctl start fail2ban
$ sudo systemctl status fail2ban
检查状态
$ sudo fail2ban-client ping
$ sudo fail2ban-client status # 总的
$ sudo fail2ban-client status sshd # 详细
解除被 ban 的 IP地址
$ sudo fail2ban-client set sshd unbanip 192.168.1.8
$ sudo fail2ban-client set sshd unbanip --all
联合 ufw ban 掉扫描器
https://github.com/asifbacchus/fail2banUFW
https://git.asifbacchus.dev/asif/fail2banUFW/wiki
-
jail.local 修改
bantime = 1w # 一周 findtime = 1d # 一天 action = %(action_)s
-
将 action.d 下的
ufw.conf
替换成原来的,并将blocktype = reject
改为blocktype = deny
-
更改 jail.d 下的
ssh.conf
的端口号 -
更改 jail.d 下
recidivist.conf, ufw-probe.conf
里的maxretry, findtime, bantime
为合适的值# 激进策略,访问一次未开放的端口就 ban ip 一周,两周内再次访问未开放端口 ban 永久 # recidivist.conf maxretry = 1 findtime = 2w bantime = -1 # ufw-probe.conf maxretry = 1 findtime = 5m # 5分钟 bantime = 1w
-
重启服务
sudo systemctl restart fail2ban
ufw
记录
查看 ufw 状态
$ sudo ufw status verbose
重置所有 ufw 规则
$ sudo ufw reset
开启 ufw
# 同时会启动服务,开机自启 ufw
# 开启后不会断掉当前连接,请及时添加 ssh 端口,以免把自己锁在门外
$ sudo ufw enable
添加规则
$ sudo ufw allow 22
$ sudo ufw allow 22/tcp
删除规则
$ sudo ufw delete allow 22
查看日志
# /var/log/ufw.log
IN=此字段显示传入流量的设备。
OUT=此字段显示传出流量的设备。
MAC=此字段显示设备的 MAC 地址。
SRC=此字段显示连接源 IP 地址。
DST=显示连接的目标 IP 地址。
LEN=该字段显示数据包的长度。
TOS= (Type of Service) 此字段用于数据包分类,已弃用。
PREC=该字段显示服务的优先类型。
TTL= 此字段显示生存时间。
ID=此字段显示 IP 数据报的唯一 ID,由同一数据包的片段共享。
PROTO= 此字段显示使用的协议。
SPT 是源端口,DPT 是目标端口
reject 和 deny 区别
ufw reject out smtp
# 禁止访问外部smtp端口,不告知“被防火墙阻止”ufw deny out to 192.168.1.1
# deny,客户端只能最终请求超时。无任何返回。
goaccess
官方文档
https://goaccess.io/man
命令
生成静态 HTML
$ sudo goaccess access.log --log-format=COMBINED -o report.html
生成实时 HTML 输出
$ sudo goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html
ssh 解析服务器上的 log
不好用
$ ssh -n root@server 'tail -f /var/log/nginx/access.log' | goaccess - --log-format=COMBINED -o report.html
netdata状态监控
安装
参见 https://learn.netdata.cloud/docs/get-started
一行脚本安装,可以把每夜版换成稳定版
$ wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel
安装好后默认可以直接通过 ip:19999 访问 web仪表盘
配置
修改监听、默认端口
将默认监听的 *
改为 localhost
,将默认的端口 19999 改成其他,这样就只能本机访问,外部无法通过 ip:port 访问
# 官方推荐用 edit-config 编辑配置
$ sudo /etc/netdata/edit-config netdata.conf
# 添加
[web]
bind to = localhost
default port = 19191
外部通过 SSH 本地转发的方式访问 e.g.
$ ssh -N -L 19999:127.0.0.1:19999 root@example.com
禁用不需要的插件或收集器
如果您知道您不需要整个插件或特定的收集器,您可以禁用它们中的任何一个。请记住,如果插件/收集器无事可做,它只会关闭并且不会消耗系统资源。您只能通过禁用主动收集指标的插件/收集器来提高代理的性能。
降低收集频率(全局)
提高代理资源利用率的最快方法是降低它收集指标的频率。
如果您不需要每秒指标,或者如果 Netdata Agent 使用大量 CPU,即使没有人在查看该节点的 仪表板,将代理配置为不太频繁地收集指标。
打开 netdata.conf
并编辑 update every
环境。 默认是 1
,意味着代理收集指标 每一秒。
如果你把这个改成 2
, Netdata 强制执行最小值 update every
设置为 2 秒,并且每隔 其次,这将有效地将 CPU 利用率减半。 将此设置为 5
或者 10
每 5 或 10 次收集指标 秒,分别。
[global]
update every = 5
禁用日志
如果您的安装工作正常,并且您没有主动审核 Netdata 的日志,请在 netdata.conf
.
[logs]
debug log = none
error log = none
access log = none
通知配置
-
@BotFather 创建机器人 -
在 @BotFather 获取【Bot Token】 -
在 @myidbot 获取【用户ID】 -
修改配置$ sudo /etc/netdata/edit-config health_alarm_notify.conf # CTRL + W 可以搜索 # 这个默认就是 YES SEND_TELEGRAM="YES" # 填入 Bot Token TELEGRAM_BOT_TOKEN="111122223:7OpFlFFRzRBbrUUmIjj5HF9Ox2pYJZy5" # 填入 用户ID DEFAULT_RECIPIENT_TELEGRAM="-100233335555" # 发送警报测试 $ /usr/libexec/netdata/plugins.d/alarm-notify.sh test