SSH 安全防护

日期: 04 月 27日, 2014
标签:

SSH(Secure Shell)常用来用来远程访问主机(比如树莓派),安全问题十分重要。下面总结了一些SSH安全防护措施。

禁止root登陆

使用root登陆是不必要、有风险的,因此有必要禁止root登陆。有两种方法:

  1. 禁用root用户

     sudo passwd -l root
    
  2. 只禁止通过ssh登陆root

    编辑/etc/ssh/sshd_config

     PermitRootLogin no
    

更改ssh使用的端口

ssh默认使用端口22,很容易被端口扫描软件发现,可以改成其他端口。编辑/etc/ssh/sshd_config

Port 12138

只允许指定的IP登陆ssh

有两种方法

  1. 修改/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
    
  2. 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