SSH(Secure Shell)常用来用来远程访问主机(比如树莓派),安全问题十分重要。下面总结了一些SSH安全防护措施。
禁止root登陆
使用root
登陆是不必要、有风险的,因此有必要禁止root
登陆。有两种方法:
-
禁用
root
用户sudo passwd -l root
-
只禁止通过ssh登陆
root
编辑
/etc/ssh/sshd_config
PermitRootLogin no
更改ssh使用的端口
ssh默认使用端口22,很容易被端口扫描软件发现,可以改成其他端口。编辑/etc/ssh/sshd_config
Port 12138
只允许指定的IP登陆ssh
有两种方法
-
修改
/etc/hosts.allow
和/etc/hosts.deny
/etc/hosts.allow
的内容sshd:192.168.12.2,192.168.12.3,129.168.1.1:allow
/etc/hosts.deny
的内容sshd:ALL
-
用
iptables
制定防火墙规则sudo iptables -A INPUT -p tcp -s 192.168.12.2 --dport 12138 -j ACCEPT sudo iptables -A INPUT -p tcp -s 192.168.12.3 --dport 12138 -j ACCEPT sudo iptables -A INPUT -p tcp -s 192.168.1.1 --dport 12138 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 12138 -j DROP
可以编写systemd service文件开机自动执行这些命令。编辑
/usr/lib/systemd/system/ssh-firewall.service
,写入以下内容[Unit] Description=SSH Firewall After=network.target Wants=network.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/bin/iptables -A INPUT -p tcp -s 192.168.12.2 --dport 12138 -j ACCEPT ExecStart=/usr/bin/iptables -A INPUT -p tcp -s 192.168.12.3 --dport 12138 -j ACCEPT ExecStart=/usr/bin/iptables -A INPUT -p tcp -s 192.168.1.1 --dport 12138 -j ACCEPT ExecStart=/usr/bin/iptables -A INPUT -p tcp --dport 12138 -j DROP ExecStop=/usr/bin/iptables -D INPUT -p tcp -s 192.168.12.2 --dport 12138 -j ACCEPT ExecStop=/usr/bin/iptables -D INPUT -p tcp -s 192.168.12.3 --dport 12138 -j ACCEPT ExecStop=/usr/bin/iptables -D INPUT -p tcp -s 192.168.1.1 --dport 12138 -j ACCEPT ExecStop=/usr/bin/iptables -D INPUT -p tcp --dport 12138 -j DROP [Install] WantedBy=multi-user.target
执行
sudo systemctl enable ssh-firewall.service
使用SSH密钥登陆
使用密码来登陆ssh不仅麻烦,而且不安全,SSH密钥可以解决这个问题。
生成SSH密钥
SSH密钥总是成对的,包括一个私钥,一个公钥。在电脑上使用下面的命令来生成一对密钥
mkdir ~/.ssh
ssh-keygen -f ~/.ssh/id_rsa
生成的公钥为~/.ssh/id_rsa.pub
,私钥为~/.ssh/id_rsa
,私钥务必要保密,公钥可以公开。
把公钥复制到树莓派中
将公钥复制到树莓派的/home/pi/.ssh/authorized_keys
scp -P 12138 ~/.ssh/id_rsa.pub pi@192.168.12.1:/home/pi/.ssh/authorized_keys
之后就可以免密码登入ssh了。
禁止使用密码登陆
确定可以通过SSH密钥登陆后,可以禁止密码登陆,加强安全性。编辑/etc/ssh/sshd_config
PasswordAuthentication no
PermitEmptyPasswords no
防止公钥被意外修改
sudo chattr +i ~/.ssh/autorized_keys
sudo chattr +i ~/.ssh