新购VPS SSH安全措施备忘

年前买了个VPS,一个月不到就被d了,换IP,没到两天又挂,遂放弃,换了家毛子的。无论美国还是俄罗斯的VPS,都发现暴力破解root密码的信息,如果不是黑客猖獗想找肉鸡,就是可能我用的某些脚本有后门。总之,服务器的ssh安全配置必须得做。

MOTD上的非法尝试登录提示:

There were 120 failed login attempts since the last successful login

tips:配置SSH一定要谨慎,最好VPS买完就改,这样万一出错,重置服务器也不心疼。另外运营商或许会提供网页版的控制台(VNC),如果出错,可以试试在那边恢复。

1. 修改SSH默认端口

改ssh默认的22端口本来是很简单的,但由于ssh登录涉及系统安全,所以要把SELinux(Centos7内置的安全子系统)和Firewalld(Centos7的防火墙)的ssh端口都改一下。其实你也可以选择关闭SElinuxFirewalld来改端口,不过既然本文是为了加强VPS安全性,这种本末倒置的操作就不提了。

下面以22端口改为2200端口为例,讲下操作。

=== 查看SELinux是否运行 ===
[root@localhost ~]# getenforce

=== 如未启用(返回Disable),启用SELinux ===
[root@localhost ~]# nano /etc/selinux/config
# 配置SELINUX项为enforcing,然后重启
SELINUX = enforcing
[root@localhost ~]# reboot

=== 安装SElinux管理器 ===
[root@localhost ~]# yum -y install policycoreutils-python

=== 为SELinux添加ssh的2200端口 ===
[root@localhost ~]# semanage port -a -t ssh_port_t -p tcp 2200

=== 查查看SElinux修改好没  ===
[root@localhost ~]# semanage port -l | grep ssh

=== 测试是否开启了防火墙(running/not runing)===
[root@localhost ~]# firewall-cmd --state

=== 如未开启,开启firewalld ===
[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# systemctl enable firewalld

=== 查看firewalld运行状态 ===
[root@localhost ~]# systemctl status firewalld

=== 开启防火墙的2200端口 ===
[root@localhost ~]# firewall-cmd --zone=public --add-port=2200/tcp --permanent

=== 更新防火墙 ===
[root@localhost ~]# firewall-cmd --reload

=== 列出防火墙端口,看是否有ports: 2200/tcp ===
[root@localhost ~]# firewall-cmd --list-all

=== 修改ssh配置文件,===
[root@localhost ~]# nano /etc/ssh/sshd_config
# 找到Port 22,取消注释并改成Port 2200
Port 2200

=== 尝试重启SSH服务 ===
[root@localhost ~]# systemctl restart sshd

=== 查看SSH运行状态 ===
[root@localhost ~]# systemctl status sshd

返回 active (running)表示成功,不成功的话检查配置然后重试。

PS:还有优雅一点的开防火墙方法(修改ssh服务)

===开放ssh服务,添加2200端口===
[root@localhost ~]# firewall-cmd --add-service=ssh --permanent 
[root@localhost ~]# firewall-cmd --service=ssh --add-port=2200/tcp --permanent
[root@localhost ~]# firewall-cmd --reload

2. 禁止root登录

  • 关闭普通用户的su功能
=== 添加新用户foo,并设定密码 ===
[root@localhost ~]# adduser foo
[root@localhost ~]# passwd foo

=== 禁止非wheel组用户使用su命令 ===
[root@localhost ~]# nano /etc/pam.d/su
# 去下面这行的注释(#),注意不是有trust那行 
auth required pam_wheel.so use_uid

=== 切换到foo用户 ===
[root@localhost ~]# su foo

=== 测试foo用户权限 ===
[foo@localhost ~]$ su
su: Permission denied
[foo@localhost ~]$ sudo nano XXX
foo is not in the sudoers file.  This incident will be reported.
  • 开启foo用户su到root的功能
=== 退出foo用户,回到root用户 ===
[foo@localhost ~]$ exit 
[root@localhost ~]# 

=== 将foo用户加入wheel组 ===
[root@localhost ~]# usermod -G wheel foo

=== 再次测试foo用户权限 ===
[root@localhost ~]# su foo
[foo@localhost ~]$ su 
[foo@localhost ~]$ sudo nano XXX 
[foo@localhost ~]$ exit
  • 确定foo用户可以密码登录以后,禁止root用户登录
=== 禁止root用户登录 ===
[root@localhost ~]# nano /etc/ssh/sshd_config

=== 去掉PermitRootLogin注释,并将yes改成no ===
PermitRootLogin no

=== 重启ssh ===
[root@localhost ~]# systemctl restart sshd
[root@localhost ~]# systemctl status sshd

3. 设置免密登录

  • Mac/linux(以下操作,除非说明均指本地机)
== 生成一对密钥(假设名字为key.vps) ===
ssh-keygen -t rsa -f key.vps

=== 将公钥发送到服务器 ===
ssh-copy-id -i ./key.vps.pub -p 2200 foo@host_ip

=== 设置快捷登录 ===
nano ~/.ssh/config
# 指定服务器登录方式和使用的私钥
host VPS_NAME
Hostname host_ip
Port 2200
User foo
IdentityFile ~/.ssh/key.vps

=== 无密码登录服务器 ===
ssh VPS_NAME
  • Windows

Windows没有内置ssh,都是用putty之类的ssh终端软件,下面以我常用的Bitvise SSH Client为例子讲讲Windows的SSH免密登录。

  1. 打开Bitvise SSH Client,点击打开Client key manager
Bitvise SSH Clien
  1. 点击Generate New(生成Key)然后Export(导出)
Client key manager
  1. 选择OpenSSH格式,公钥私钥都导出一次
Expor
  1. 打开导出的公钥文件(后缀名为*.pub),复制所有文本
  2. 登录服务器,把文本粘贴到~/.ssh/authorized_keys文件中,如果服务器没有这个文件/文件夹,那就新建出来再粘贴。
=== 创建 ~/.ssh/文件夹和下面的authorized_keys文件 ===
[foo@localhost ~]$ mkdir .ssh
[foo@localhost ~]$ cd .ssh
[foo@localhost .ssh]$ nano authorized_keys

=== 设置正确权限 ===
[foo@localhost ~]$ sudo chmod 700 ~/.ssh
[foo@localhost ~]$ sudo chmod 600 ~/.ssh/authorized_keys
  1. 退出服务器,把登录的Initial method改成publickey,Client Key 下拉菜单选择刚才生产的那个Key(默认叫Profile 1),然后就可以实现免密登录了。
vps4.png

PS:如果拷贝了公钥仍然不能免密登录,请检查SSH配置

[foo@localhost ~]$ sudo nano /etc/ssh/sshd_config
# 下面两项均要为YES
RSAAuthentication yes
PubkeyAuthentication yes

4. 禁止密码登录

当可以成功使用foo用户免密登录以后,设置禁止密码登录

=== 禁止密码登录 ===
[foo@localhost ~]$ sudo nano /etc/ssh/sshd_config

=== 取消PasswordAuthentication注释,并将yes改成no === 
PasswordAuthentication no

=== 重启ssh并查看状态 ===
[foo@localhost ~]$ sudo systemctl restart sshd
[foo@localhost ~]$ sudo systemctl status sshd

-FIN-

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • CA和证书安全协议(SSL/TLS)OpenSSH 一、CA和证书 (一) PKI(Public Key Infr...
    哈喽别样阅读 1,374评论 0 0
  • 1、远程连接服务器 远程连接服务器对于管理员来说,是一个很有用的操作。它使得对服务器的管理更为方便。不过方便归方便...
    Zhang21阅读 39,453评论 0 20
  • SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group...
    shuff1e阅读 1,759评论 1 11
  • 溪海浮云阅读 125评论 0 1