Centos ssh优化

1. 采用难猜想的口令/用户名称

若是你所营运的 ssh 是对外的,你首先会发现的事情,极可能就是骇客尝试猜想用户名称/口令的记录。骇客通常会扫描端口 22(ssh 缺省聆听的端口)来找寻执行 ssh 的机器,而后尝试强行攻击它。借着使用难猜想的口令,咱们但愿任何攻击在成功前会被记录底及被留意到。 html

盼望你已经采用了难猜想的口令。要否则,请尝试选拥有如下特征的口令: linux

  • 最少有 8 个字符
  • 同时有大写和小写字母
  • 同时有字母和数目字
  • 有非英数的字符(例如 ! " £ $ % ^ 等特别字符)

使用难测口令的好处并不止于 ssh,它更会影响到系统安全的各个范畴。有关口令的更多信息能够在 CentOS 的文档内找到: centos

http://www.centos.org/docs/4/html/rhel-sg-en-4/s1-wstation-pass.html 安全

若是你彻底无法阻止你的用户选用易猜想的口令,请考虑以随机产生或难猜想的符串做为用户名称。若是坏人不能猜想用户名称,他们便不能强加猜想口令。然而,这只是隐晦信息来换取安全,因此要留心用户名称经过用户发送的电邮等途径而被泄漏。 服务器

2. 停用 root 登陆

SSH 服务器的设置都存储在 /etc/ssh/sshd_confg 这个文件。要停用 root 登陆,请肯定你有如下一行: ssh

# 阻止 root 登陆: PermitRootLogin no

而后请从新引导 sshd 服务: tcp

service sshd restart 

你果你须要 root 的权限,请登陆为通常用户,而后使用 su 这个指令。 加密

3. 限制用户登陆

SSH 登陆能够局限给某些须要远程访问的用户。若是你的系统有不少用户,一个合理的作法就是局限远程访问给那真正有须要的用户,藉以减低其它用户采用易测口令的影响。在 /etc/ssh/sshd_config 内加入 AllowUsers 一行,以空格隔开用户名称。例如: spa

AllowUsers alice bob

接着请从新引导 sshd 服务。 命令行

4. 停用第 1 类协议

SSH 能够采用两款协议:第 1 类及第 2 类协议。较旧的第 1 类协议的安全性较低,所以它应该被停用,除非你知道你必需要使用它。请在 /etc/ssh/sshd_config 档内找寻如下一行,解除注释,并做出以下修改:

# Protocol 2,1 Protocol 2 

而后请从新引导 sshd 服务。

5. 采用非标准的端口

根据缺省值,ssh 在端口 22 聆听进入的链接。一个骇客若是要判定 ssh 是否在你的机器上运行,他最大可能就是扫描端口 22。一个有效混淆他的方法就是在非标准的端口上运行 ssh。任何未被使用的端口均可行,但首选的是 1024 以上的。不少人选用 2222 做为替换的端口(它很易记),正如 8080 常常被用做 HTTP 的替换端口。正正因为这个缘由令它不是个好的选择,由于任何扫描端口 22 的骇客亦不会放过端口 2222。随机地选用一个未被使用的高位端口会比较合宜。要进行改动,请在你的/etc/ssh/sshd_config 档内加入如下一行:

# 在非标准的端口上执行 ssh: Port 2345  #修改我

而后从新引导 sshd 服务。请勿忘记在你的路由器及相关的防火墙规则里做出任何须要的改动。譬如在 CentOS 7 你须要更改 firewalld:

$ firewall-cmd --add-port 2345/tcp $ firewall-cmd --add-port 2345/tcp –permanent

在 CentOS 6 及以上版本,你亦须要更新 selinux,并正确地标签所选用的端口,不然 sshd 便不能访问它。举个例说:

$ semanage port -a -t ssh_port_t -p tcp 2345 #请更改这处

由于 ssh 再也不在标准的端口上聆听链接,你需要告诉客户端要链接到哪一个端口。在命令行上执行 ssh 客户端时,你能够用 -p 选项来指定端口:

$ ssh -p 2345 myserver

又或者若是你使用 konqueror 的 fish 协议,你可用:

fish://myserver:2345/remote/dir

若是你以为每次链接时都要指定端口彷佛很痛苦,你只需在你我的的 ~/.ssh/config 文件里加入一个指定端口的记录:

# 客户端 ~/.ssh/config Host myserver HostName 72.232.194.162  User bob  Port 2345 

~/.ssh/config 必须有如下访问权:

$ chmod 600 ~/.ssh/config 

6. 在防火墙过滤 SSH

若是你只须由一个 IP 地址进行远程访问(例如由办工室进入家中的服务器),请考虑在你的路由器或 iptables 内加入一条防火墙的规则,将端口 22 的访问权限制到特定的 IP 地址,藉此对链接进行过滤。举个例说,在 iptables 内你能够用这类型的规则达至这个目的:

iptables -A INPUT -p tcp -s 72.232.194.162 --dport 22 -j ACCEPT

SSH 亦对 TCP 包装函式有内置支持,所以 ssh 服务的访问权亦可同时用 host.allow 及 hosts.deny 来进行管制。

若是你不能限制来源地的 IP 地址,而必须公开 ssh 端口,那么 iptables 依然能够经过记录及拦截来自同一 IP 地址的重复登陆尝试,帮助你阻止强行的攻击。例如:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name ssh --rsource iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent ! --rcheck --seconds 60 --hitcount 4 --name ssh --rsource -j ACCEPT 

第一条规则利用 recent 模块来记录每一个访问端口 22 的新尝试。第二条规则检查这个 IP 地址在过去 60 移内有否尝试 4 次或以上的链接,若然没有更接纳封包。注意这个规则需要输入链采用 DROP 的缺省政策。

若是你在非标准的端口上执行 ssh,请不要忘记对端口做出相应修改。状况许可的话,利用防火墙进行过滤是一个很是有效的方法来保卫 ssh 服务器。

7. 采用公钥/私钥来验证

采用加密金钥来验证提供两大好处。首先,若是你应用公钥/私钥,是方便,由于你不用再输入口令(除非你用口令来保护你的金钥)。第二,当服务器能进行金钥对的验证,你即可以彻底停用口令验证,意即访问时靠赖受权的金钥 —— 所以再也不有猜想口令的尝试。

建立及在你的 ssh 服务器上安装金钥对是个相对地简单的过程。

首先,在你会用来链接到服务器的客户端上建立一对金钥(你需要在每台用来链接的机器上这样作):

$ ssh-keygen -t rsa

这样作会在你的(隐藏了的)~/.ssh 目录内置立两个文件,名叫:id_rsa 及 id_rsa.pub。第一个文件:id_rsa 是你的私钥,而另外一个:id_rsa.pub 是你的公钥。

若是你不想每次链接时都被问及密码(它是用来解开特定的公钥),在建立金钥对的时候,你只须按 enter 做为密码。建立金钥对时,是否以密码加密纯粹是你的决定。如何你不将金钥加密,任何人夺得你的本地机器后,便自动拥有远程服务器的 ssh 访问权。此外,本地机器上的 root 可以访问你的金钥:但倘若你不能信任 root(或者 root 已被攻占),你已经大祸临头。将金钥加密舍弃了不用密码的 ssh 服务器,来换取额外的安全,得来的就是输入密码来使用这条金钥。你可利用 ssh_agent 这个程序进一步简化这个程序。

如今为你的私钥设置权限:

$ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/id_rsa

请将公钥(id_rsa.pub)复制到服务器上,而后安装它在 authorized_keys 清单内:

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

注:一旦你输入了公钥,你能够在服务器上删除它。

最后,设置服务器上的文件权限:

$ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys

若是 /etc/ssh/sshd_config 内的 StrictModes 被启用(缺省值),以上的权限是必须的

请确保你已设置正确的 SELinux 脉络:

$ restorecon -Rv ~/.ssh

如今当你登陆服务器的时候,你便不用再输入口令(除非你在建立金钥对的时候输入了一个口令)。ssh 缺省是会先利用金钥进行验证。如何它找不到金钥,或验证失败,ssh 会回落到日常的口令验证。

一旦你检查过能够用金钥对来登陆服务器,你能够在你的 /etc/ssh/sshd_conf 档内加入如下设置来停用口令验证:

# 停用口令验证,强制使用金钥 PasswordAuthentication no
相关文章
相关标签/搜索