linux 限制(禁止) IP 通过 ssh 远程登录
这两天远程登录客户服务器,登录成功后,突然看到提示的信息有点不对。有很多失败的远程登录请求,且次数达到了3万多。感觉像是在被强行登录攻击。虽然这些请求都没有成功,但谁知道它什么时候就能强行破解密码进入呢。这时要么设置一个极其复杂的登录密码,要么就是限制这些IP远程登录。
Last failed login: Mon Dec 17 14:51:13 CST 2018 from 222.90.204.67 on ssh:notty
There were 31710 failed login attempts since the last successful login.
Last login: Mon Oct 15 15:20:23 2018 from 49.75.84.62
密码已经是随机生成的了,不存在什么问题,那么主要的工作就是拒绝这些ip远程登录了。
/var/log/wtmp
日志文件永久记录每个用户登录、注销及系统的启动、停机的事件,可以查看这个文件检查是否有可疑登录。
last -f /var/log/wtmp
/var/log/secure
日志文件记录与安全相关的信息,包括系统登录,可以查看到所有的登录请求信息。可以通过这个文件筛选出一些请求频次较高的ip(怎么筛选?手动。。)。
tail -f /var/log/secure
以下是IP登录限制部分,主要通过设置hosts请求白名单和黑名单来实现:
1.白名单形式
要求: 只允许 192.168.0.1
和 192.168.0.10
登陆 其他全部禁止
实现:
(1) vim /etc/hosts.allow
//增加如下内容
sshd: 192.168.0.1, 192.168.0.10
或者设置一个网段:
//允许1.0和0.0网段内的所有用户登录
sshd:192.168.1.,192.168.0.:allow
(2)vim /etc/hosts.deny
//增加如下内容
sshd: ALL
2.黑名单形式
要求: 只限制192.168.0.1登陆上来,其他全部放行
实现: vim /etc/hosts.deny
//增加如下内容
sshd: 192.168.0.1
保存配置文件后就成功了。
多个ip或网段之间用英文逗号,
分隔
我们可以这样理解这两个文件工作原理: 当客户端的IP登陆服务器的时候,先去匹配hosts.allow
, 如果这里面有这个IP,则直接放行,如果没有这个IP,则看hosts.deny
, 如果这里面有该IP(ALL包括一切IP)则拒绝,如果deny中也没有匹配,则也会放行。也就是说,如果这两个文件中都没有限定的IP,则会放行!
3.特殊:如果两个文件中都是 :sshd: ALL
会出现什么情况?
由于先去匹配hosts.allow
,所以全部允许。
针对root:
(1)让root账户不能使用密码只能使用密钥远程登陆:
打开sshd配置文件 vim /etc/ssh/sshd_config
在最后面增加一行 :
PermitRootLogin without-password
保存配置文件后重启sshd服务 service sshd restart
(2)不允许root账户远程登陆,而普通账户可以:
有时为了特殊需求,只允许普通账户登陆Linux,而不允许root账户登陆,而普通账户登陆后,然后再su 到root下是可以的。打开sshd的配置文件 vim /etc/ssh/sshd_config
加入一行
PermitRootLogin no
重启sshd服务: service sshd restart