SSH的登录限制

1、ip限制
从网络来的数据包首先要经过iptables,所以可以在iptables上面加上规则来限制ip的访问
打算用
/etc/hosts.deny
/etc/hosts.allow
比如只限制3个外网,1个内网IP连接
怎么写哦?
解决办法:
直接在/etc/hosts.deny里面加一行
sshd: ALL EXCEPT xxx.xxx.xxx.xxx(允许的ip或网段)
sshd: ALL EXCEPT xxx.xxx.xxx.xxx/255.255.255.0(允许的网段) 就可以了.
要注意网段的书写格式
上面是TCP Wrappers的过滤机制,它由tcpd程序控制,有点类似TCP包的检验程序,这个程序的主要参数文件在/etc/hosts.allow及 /etc/hosts/hosts.deny两个文件中,必须要某个软件支持tcpd(TCP Wrappers)的功能才能接受TCP Wrappers的校验。
数据包的校验顺序首先是/etc/hosts.allow,然后才是/etc/hosts/hosts.deny。所以我们通常的设置方法是:在 /etc/hosts/hosts.allow里针对某些服务与数据包来源开启它们的使用权限;在/etc/hosts/hosts.deny里将该服务 的其它来源过滤掉。
注意:如果您在/etc/hosts/hosts.allow里没有设置,那么TCP Wrappers默认的动作是allow(通过校验并进入主机)。
简单的语法如下:

<服务名称>:
特别注意:其中“服务名称”其实就是程序文件名,比如telnet程序的服务名称是“in.etlnetd”、ssh的是“sshd”;network可以使用192.168.0.0/255.255.255.0,但不可以使用192.168.0.0/24。
针对楼主的需求,我认为/etc/hosts.allow应该这样写:
sshd: 192.168.0.0/255.255.255.0,202.101.73.0/255.255.255.0,202.101.74.0/255.255.255.0,202.101.75.0/255.255.255.0
在/etc/hosts.deny里写上:
sshd: ALL
PS:上面的IP是我假想而来,第一个代表内网,后面3个代表外网,应用时,换成你的实际IP即可。
最后还有点补充的是,个人认为数据包进入主机的第一道关卡应该是iptables,第二道才是TCP Wrappers,如果已经越过iptables,说明已登入你的主机了,下一步只是通过TCP Wrappers来进行TCP包校验,那么如果这个支持TCP Wrappers功能的程序有漏洞,结果是什么不用我说了吧。所以而是先从iptables进行限制,把TCP Wrappers作为个补充应该更安全些。
2、限制用户登录

vi /etc/sshd_config
在最后一行加入一行,me 为指定的用户
AllowUsers me
重启SSH
如果是多个用户的话:AllowUsers A B C
注意中间是空格,而不是分号


3、指定尝试密码次数
vi /etc/sshd_config
修必
MaxAuthTries  3
将默认的值改掉即可 Fedora 默认可以允许做3次尝试
重启SSH


防止ssh登录后闲置时间过长而断开连接

因为工作环境就是在linux下,需要登录到服务器上,而当键盘、鼠标闲置时间过长的时候往往会被服务器给自动断开,前面做的一些事情就被打断了,这样就很麻烦,所以得想办法来防止被服务器给踢出来。

一种方法是修改服务器段,在/etc/ssh/sshd_config里配置ClientAliveCountMax,以分为单位,默认是3分钟,即闲置3分钟就会被自动断开,可以修改时间长一点,比如30分钟:
ClientAliveCountMax=30

另一种方法比较通用,原理就是模拟键盘动作,在闲置时间之内模拟地给个键盘响应,如下:
工具:expect
代码如下:

#!/usr/bin/expect

set timeout 60
spawn ssh user@host�0�2�0�2 interact {
        timeout 300 {send "\x20"}

}
保存为文本文件xxx,然后用expect执行:
expect xxx
接着按提示输入密码就可以了,这样每隔300秒就会自动打一个空格(\x20),具体的时间间隔可以根据具体情况设置。
用这个还能解决乱码问题,比如服务器是用GB18030编码的,那只要把
spawn ssh user@host
换成
spawn luit -encoding GB18030 ssh user@host
其他的还有包括自动登录什么的,感兴趣的可以自己研究一下。

另外,如果是在windows下,则secureCRT就自带了反空闲的功能,打开选项->会话选项->终端,如图:

在发送字串的地方打个空格就可以了。

你可能感兴趣的:(ssh)