惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
A
About on SuperTechFans
The Last Watchdog
The Last Watchdog
A
Arctic Wolf
S
Schneier on Security
Cisco Talos Blog
Cisco Talos Blog
K
Kaspersky official blog
Spread Privacy
Spread Privacy
The Hacker News
The Hacker News
P
Proofpoint News Feed
Attack and Defense Labs
Attack and Defense Labs
NISL@THU
NISL@THU
AWS News Blog
AWS News Blog
Schneier on Security
Schneier on Security
TaoSecurity Blog
TaoSecurity Blog
H
Hacker News: Front Page
L
LangChain Blog
Y
Y Combinator Blog
T
Tenable Blog
Microsoft Security Blog
Microsoft Security Blog
L
Lohrmann on Cybersecurity
量子位
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
W
WeLiveSecurity
Martin Fowler
Martin Fowler
Cloudbric
Cloudbric
S
SegmentFault 最新的问题
Project Zero
Project Zero
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - 叶小钗
V
Vulnerabilities – Threatpost
小众软件
小众软件
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
腾讯CDC
博客园 - 聂微东
F
Full Disclosure
WordPress大学
WordPress大学
PCI Perspectives
PCI Perspectives
P
Privacy International News Feed
M
MIT News - Artificial intelligence
Forbes - Security
Forbes - Security
Blog — PlanetScale
Blog — PlanetScale
T
The Blog of Author Tim Ferriss
Webroot Blog
Webroot Blog
S
Security @ Cisco Blogs
Last Week in AI
Last Week in AI

atpX

自建 S3 兼容对象存储服务 Garage 听风的歌 偶尔是深夜就好了 新玩具 AirPods Pro 3 公交车上的时间 从 WHOIS 到 RDAP 通过 WireGuard 访问 NFS 共享文件 自建音乐串流服务探索 我停止了探索 Fediverse 互联网背景噪音 我的数字生活降级 小城与确定性的墙 一只特立独行的猪 Fediverse 与社交 承认的勇气 mediaX - 轻量书影音记录管理工具 我的博客写作流程 网站新增 Misc 页面 擅长对线的鲍勃 在 Chroot 环境下使用 Rsync 同步 再见 JavaScript 当我玩博客时我在玩什么 为什么我的博客没有友链页面 小熊猫与大熊猫 (HDR 照片测试) 是时候为网站开启 HTTP/3 支持了吗 使用 AdGuard Home 搭建自用 DoH 服务 谈谈读书与消遣 2023 年终总结 西安两日游 从 AirPods「升级」到 EarPods Docker 搭建去中心化的微博客平台 Mastodon 聊聊 iPhone 15 Pro 使用感受 能否将 TOTP 二次验证存放在密码管理器里 认识史蒂夫·乔布斯 与“锤哥”克里斯·海姆斯沃斯一起养生 逃离爆炸的信息 你想活出怎样的人生 重温《龙珠》动画 为什么关闭评论 从域名注册商到 DNS 服务,找到自己的组合 如何提高用户网页阅读体验 从 Typecho 迁移到 Hugo 个人博客的最终归宿是静态网站吗 我选择了放弃 jQuery 关于我的小破站折腾速度优化这件事 记一次家庭网络折腾 贴一些 SmokePing 记录 我的域名邮箱选择 不存在的语录 Typecho 评论验证插件 CaptchaPlus 谈谈写字这件事 新的网站 Logo 探索 曲线解决 Typecho 图片占位抖动问题 自建 vaultwarden / bitwarden_rs 密码管理器 使用 Plausible 自建网站流量统计分析工具 如何优雅地徒手剥开火腿肠 简单的集中隔离生活记录 新玩具 M2 MacBook Air 使用 acme.sh 申请 Google 公共证书 Docker 搭建去中心化的微博客平台 Misskey 搭建 Lsky Pro 兰空图床 折腾树莓派系统的一天 我的吉卜力之旅 使用 Uptime Kuma 自建服务器/网站在线率监控 Spartan Host Review - Best Hosting & Service Support Debian 下 Nginx 配合 Fail2Ban 减少恶意扫描和攻击 升级 Typecho 到最新开发版本 v1.2.0 Linux rm 命令详解 Debian 系统安装 Docker 教程 BandwagonHost - Reliable Blog and Business VPS Hosting 使用 Isso 为 Hugo/Hexo 等静态网站添加评论功能 推荐 5 款免费开源的网站流量分析统计工具 搭建 Shynet 网站流量统计分析工具 聊聊 DDoS 攻击那些事 Hugo 使用 Fancybox 实现图片灯箱/放大功能 从 Debian 10 升级到 Debian 11 教程 使用 Umami 自建网站流量统计分析工具 Linux 一次执行多个命令的 3 种方式 Typecho 修改永久链接后旧链接 301 跳转到新链接 从不同需求推荐几家稳定可靠的 VPS 服务商 Build EchoIP service with Docker 浅谈一下这些年折腾过的 VPS 单线复用解决一根网线同时 IPTV 和宽带问题 不完全吃灰的树莓派 开发一个自己的 Telegram Bot 使用 Nginx 实现 TCP 四层反向代理 画画真难 我读村上春树 使用 acme.sh 自动签发和更新证书 卡拉马佐夫式悲剧 安装 File Browser 轻量网盘工具 新玩具树莓派到手 Linux 定时自动备份数据到 OneDrive/Google Drive 记一次服务器崩溃 使用 rsync 同步文件 短信的消失 幻灭的艺术家 新玩具戴尔 S2721DGF 开箱 蝴蝶 用 Docker 整合 SeafilePro 搭建私人云盘
修改 SSH 端口使用密钥登录并配置防火墙
ATP · 2020-03-12 · via atpX

每隔一段时间,VPS 的日志里就会有几千次登录尝试,他们一般都是扫描默认的 22 端口,然后用密码字典破解登录,如果不幸中招,就会被用来挖矿或者其它非法操作,速度变慢不说,还可能会被你的 VPS 服务商因为滥用资源被禁掉机器。🐒

因此,拿到服务器的第一件事自然是看 ip 是否正常,然后修改 SSH 端口并制作密钥登录,然后修改防火墙规则,珍爱小鸡,防止暴力破解。

基于安全原因,其实不建议开放 root 用户的远程登录权限,但这里为了演示方便默认都为使用 root 用户操作。

修改默认的 SSH 端口

1. 编辑 ssh 配置文件

vim /etc/ssh/sshd_config

将 #Port 22 修改为想要的端口号:0~65535,选择数值较大的比较好。

然后保存,重启 ssh 服务:

systemctl restart sshd.service

2. 增加 SElinux 端口

如果你使用的 CentOS 系统需要设置,其它系统则不用。

查看 SElinux 状态:

/usr/sbin/sestatus -v
semanage port -a -t ssh_port_t -p tcp [端口号]

查看当前 SElinux 允许的 ssh 端口:

semanage port -l | grep ssh

制作密钥登录

然后,要是你被盯上了( ̄▽ ̄"),该端口+设置复杂密码也不安心,这是就要设置用密钥登录,公钥加上唯一对应的私钥就稳当不少。

使用 XShell 制作密钥

打开 Xshell

Xshell 新建用户密钥生成向导
Xshell 新建用户密钥生成向导。

看情况下一步即可,将公钥保存为文件,改名为 authorized_keys 记得最好备份密钥,用户密钥管理者-导出即可。将公钥上传到 /root/.ssh 文件夹并赋予权限

chmod 600 /root/.ssh/authorized_keys

使用 ssh-keygen 工具

目前有四种常见的 SSH Key 类型:

  • DSA 已被认为是一个不安全的算法,不建议使用,由于存在安全性缺陷,OpenSSH 7.0 已停止支援 DSA 演算法。
  • ECDSA 在 OpenSSH 5.7 开始支持 ECDSA,有 256/384/521 位三种长度可选,如果指定不是这三种长度,会发生错误。但 ECDSA 所使用的椭圆曲线是由 NIST 所选择的,有被 NSA 植入后门的可能,另外由于规格复杂,技术上不容易被完全正确操作,因此不推荐使用。
  • RSA 兼容性最好的算法,也是目前 ssh-keygen 默认使用的算法。安全性强度取决于密钥的长度,可以用 -b 参数指定,预设,可设定长度范围从 1024 ~ 16384 位。其中 1024 位已被证明安全性强度不足,而使用默认的 2048 位已足够安全,但还是建议使用更长的 3072 或者 4096 位。
  • ED25519 使用 SHA-512/256 的 EdDSA 签名方案,并选用 Curve25519 这组椭圆曲线的算法。长度固定为 256 位,不需要调整长度,在 OpenSSH 6.5 后才支持。是目前综合安全性和性能最好的算法,推荐使用。

而生成密钥,这里有两种思路:

1. 直接在服务器上生成,然后将私钥下载到本地:

# 生成 RSA 密钥:
ssh-keygen -t rsa -b 4096
# 生成 ECDSA 密钥(推荐):
ssh-keygen -t ed25519

命令执行完成后,会生成密钥对 id_rsa(id_ed25519) 和 id_rsa.pub(id_ed25519.pub),其中 id_rsa 为私钥,做好保存,id_rsa.pub 为公钥,将公钥复制到 /root/.ssh/ 目录重命名为 authorized_keys 并修改权限。

chmod 600 /root/.ssh/authorized_keys

2. 在本地使用 ssh-keygen 生成,手动拷贝或者使用 ssh-copy-id 命令,该命令可以把本地的 ssh 公钥文件复制到远程主机对应的账户下的 authorized_keys 文件中:

ssh-copy-id -i /root/.ssh/id_rsa.pub root@x.x.x.x -p [端口号]
  • -i 参数后面是指定本地公钥文件的路径

之后根据提示输入密码即可,成功会有如下提示:

Now try logging into the machine, with:   "ssh 'root@x.x.x.x'"
and check to make sure that only the key(s) you wanted were added.

如果是手动拷贝的记得设置以下权限:

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

最后两种方式都最好编辑登录方式,禁止密码登录:

vim /etc/ssh/sshd_config  

#PubkeyAuthentication no 改为 PubkeyAuthentication yes
#PasswordAuthentication yes 改为 PasswordAuthentication no

重启ssh服务:

systemctl restart sshd.service

记得将私钥文件保管好!

配置防火墙

CentOS (firewalld)

首先查看防火墙状态:

firewall-cmd --state

若没有启用,需要启用:

systemctl start firewalld
systemctl enable firewalld

开放 ssh 端口,使用:

firewall-cmd --permanent --zone=public --add-port=[端口号]/tcp

或者修改 /etc/firewalld/zones/public.xml 添加:

<port protocol="tcp" port="3306"/><!--MySQL数据库-->

防火墙重载:

firewall-cmd --reload

查看已暴露端口:

firewall-cmd --permanent --list-port

或者查看添加端口是否成功:

firewall-cmd --zone=public --query-port=[端口号]/tcp

先不要关闭窗口,测试能连接后再下一步,防止与小鸡失联😐

Debian (ufw)

安装 ufw 后首先设置默认策略:

ufw default deny incoming
ufw default allow outgoing

允许指定端口连接:

ufw allow [端口号]

允许指定端口范围连接:

ufw allow 6660:6670/tcp

启用 ufw:

ufw enable

允许指定的 ip 访问:

ufw allow from 192.168.1.0
# 允许指定子网访问
ufw allow from 192.168.1.0/24
# 允许指定 ip 访问指定端口
ufw allow from 192.168.1.0 to any port 22
# 允许指定 ip 访问指定端口的指定协议
ufw allow from 192.168.1.0 to any port 22 proto tcp

禁止指定 ip 访问:

ufw deny from 192.168.1.0
# 禁止指定 ip 访问指定端口
ufw deny from 192.168.1.0 to any port 22

这里需要注意的是,ufw 的默认匹配顺序是:按照从上到下的顺序一旦规则匹配,其他规则将不会被匹配。因此需要将特定规则放在第一位,将通用规则放在第二位。如果需要插入规则,可以使用插入命令:

ufw status numbered
ufw insert 1 allow from 192.168.1.0

禁止 ping,只需要将 /etc/ufw/before.rules 文件中下列行的 ACCEPT 改为 DROP

# ok icmp codes for input
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

然后重载 ufw:

ufw reload

删除指定规则:

ufw delete allow [端口号]

或者通过编号,然后删除指定序号:

ufw status numbered
ufw delete [序号]

查看 ufw 状态:

ufw status

关闭 ufw:

ufw disable

重置 ufw:

ufw reset

配置好以上操作后可以避免绝大多数的恶意破解,当然还有其它进阶操作,但已经足够,毕竟要是真有大佬搞你,只有关机报平安咯🍺