DAILY DOCDAILY DOC
Rust
Node
Notes
Ubuntu
Leetcode
  • it-tools
  • excalidraw
  • linux-command
Rust
Node
Notes
Ubuntu
Leetcode
  • it-tools
  • excalidraw
  • linux-command
  • linux
  • bash alias
  • chmod
  • linux useful command
  • date
  • extract translation from git diff
  • fail2ban
  • globbing
  • localhost
  • mail
  • memo 内存测试
  • nohup(no hang up)
  • setup env
  • ssh

    • ssh 教程
    • github clone
    • ssh.localhost.run 端口转发
    • ssh 安全
  • systemd service
  • 分析ubuntu系统登录日志文件
  • vpn

    • vpn 教程
    • Algo
    • clashX
    • firezone
    • lantern
    • pac 代理配置
    • Setup vpn
    • shadowsocks
    • VPN
    • VPN 速度优化
    • wireguard cron
    • 修改wireguard端口
  • webhook

ssh 安全

入侵检测

检查history 日志

 history # 查看操作日志

检查成功登陆用户

1️⃣ 查看密码登陆成功用户

cat /var/log/secure | grep "Accepted password for"

2️⃣ last 查看登陆信息

last  #  who /var/log/wtmp 

检查是否存在免密登陆

1️⃣ 查看账户.ssh目录下是否存在authorized_keys文件

ls -l /home/test/.ssh/ # 登陆账户

ls -l /root/.ssh/ # root 账户

cat /root/.ssh/authorized_keys 

2️⃣ 查看系统账户

cat /etc/passwd # 

3️⃣ 检查ssh日志

cat /var/log/secure | grep "Invalid user"  # 无效用户
cat /var/log/secure | grep "Failed password" # 失败的记录
cat /var/log/secure | grep "Failed password" | wc | l # 失败的条数

wc /var/log/secure -l # 有多少条日志 
ls -lh /var/log/secure # 查看日志文件多少M 是否有大规模爆破行为

4️⃣ 检查定时任务是否存在异常情况

crontab -l # 查看当前用户的定时任务信息
sudo crontab -u root -l  # 查看root账户的定时任务信息

🛠️ 修复方案

1️⃣ 修改密码强度

passwd root #设置新密码

2️⃣ 删除keys

rm -rf .ssh/authorized_keys

3️⃣ ssh校验次数限制 禁用密码登陆 修改 sshd_config

vim /etc/ssh/sshd_config
# MaxAuthTries 3
# PasswordAuthentication no

4️⃣ 锁定用户 编辑/etc/pam.d/sshd /etc/pam.d/login

auth required pam_tally2.so deny=3 unlock_time=86400 even_deny_root root_unlock_time=86400 # 24 hours

查看锁定用户

sudo pam_tally2 --user

解除锁定

sudo pam_tally2 --user test --reset

5️⃣ 限制只允许特定ip地址访问ssh

vim  /etc/hosts.allow
# sshd:192.168.1.1:allow

vim /etc/hosts.deny
# sshd:ALL

6️⃣ 限制特定用户访问 /etc/ssh/ssh_config

AllowUsers      root@192.168.1.1 
DenyUsers       admin

7️⃣ 修改ssh 端口号/etc/ssh/ssh_config

port 22
port 5432 # 增加另外一个ssh端口号避免修改失败连接不上主机了

8️⃣ 配置防火墙

firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports  # 查看开放端口

监控流量,封禁IP

nethogs

apt-get install nethogs 
# nethogs <interface>
ip link show
nethogs 
nethogs np1s0  # check np1s0 

fail2ban

apt-get install fail2ban

修改配置文件

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

修改配置

# 新增如下配置 
maxretry = 3
bantime = 1d

启动 systemctl enable fail2ban

查看状态 fail2ban-client status 查看jail下被禁ip fail2ban-client status sshd 解除封禁ip fail2ban-client set sshd unbanip 192.168.1.1

配置参考

details
# /etc/fail2ban/jail.d/sshd.conf

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
banaction = iptables-multiport
banaction_allports = iptables-allports
findtime = 1d
bantime = 1d
  • [sshd]:这是jail名称,应与日志文件的名称(例如/var/log/auth.log)匹配。
  • enabled:如果为true,则启用jail;如果为false,则禁用。
  • port:指定监视的端口或服务名称。在这种情况下,我们监视SSH服务的端口。
  • logpath:指定日志文件的位置。
  • backend :指定Fail2ban应该使用的后端。如果您不确定,请使用默认值。在这种情况下,我们使用sshd进程作为后端。
  • maxretry :定义允许尝试的最大失败登录次数。在这种情况下,如果尝试3次失败,则攻击者的IP将被禁止。
  • banaction :指定要采取的动作以禁止攻击者的IP。在这种情况下,我们使用iptables-multiport。
  • banaction_allports :在多个端口上禁止攻击者的IP时使用的操作,如果不需要,则可以省略此选项。
  • findtime :指定尝试登录的时间范围。在这种情况下,我们设置为1天。
  • bantime :指定封禁攻击者IP的时间。在这种情况下,我们也设置为1天。
Last Updated:
Contributors: rosendo
Prev
ssh.localhost.run 端口转发