«如何让你的 Linux 服务器拥有最基础的安全»
by pluvet on Dec 6, 2019

环境为 CentOS 7.7

启用新端口

yum install policycoreutils-python -y
semanage port -a -t ssh_port_t -p tcp 23333
semanage port -m -t ssh_port_t -p tcp 23333

firewall-cmd --permanent --zone=public --add-port=23333/tcp
firewall-cmd --reload

vi /etc/ssh/sshd_config
Port 23333
service sshd restart
reboot

对于 iptable 防火墙(注意,千万不要从 ssh 执行,否则你就连不上了):

iptables -A INPUT -p tcp --dport 23333 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 23333 -j ACCEPT
iptables-save

用新的端口连接

此时原来的 22 端口实际上已经无法连接了。不过即使这样,保护作用也非常有限,因为随便一个端口扫描的软件,都能发现我们的真实 ssh 端口。

关闭密码登录

首先新建一个用户

useradd pluvet

passwd pluvet

设置这个新用户为 sudoer

chmod 740 /etc/sudoers

vi /etc/sudoers

pluvet ALL=(ALL) ALL

image-20191206132645299.png

chmod 440 /etc/sudoers

vi /etc/ssh/sshd_config

取消 PermitRootLogin yes 的注释,改成

PermitRootLogin no

service sshd restart

这个时候用 ssh 客户端登录,可以发现 root 登录不了了。

禁止密码登录

执行

ssh-keygen -t rsa

生成密钥

cd ~/.ssh

mv id_rsa.pub authorized_keys

注意,现在我们是 pluvet 的用户身份,不要把 key 复制到 root 用户那里。

如果 authorized_keys 已存在,且有内容,那么你把 id_rsa.pub 里的东西追加到 authorized_keys 的最后一行即可。

把 id_rsa 中的内容保存本地。

image-20191206133807311.png

sudo vi /etc/ssh/sshd_config

进行如下修改

PasswordAuthentication no

PubkeyAuthentication yes
service sshd restart

这个时候我们再用刚刚创建的用户pluvet 登录,会有提示:

image-20191206133928755.png

这说明已经不能用密码登录了。安全性大大增强。

在本地用私钥登录:

image-20191206134105598.png

登录成功:

image-20191206134503891.png

sudo yum install epel-release
sudo yum install mosh
sudo firewall-cmd --permanent --zone=public --add-port=23334/udp
sudo firewall-cmd --zone=public --permanent --add-port=60000-61000/udp
sudo firewall-cmd --reload

在 mosh 中使用:

image-20191206135034241.png

添加新评论