折腾 Linux 机器时经常遇到烦人且偏僻的问题,解决起来比较麻烦,在此记录。

1. 配置 SSH 白名单

第一种方法

在 ssh 设置中修改。修改/etc/ssh/sshd_config文件,在末尾加入

allowusers root@192.168.1.1

(其中192.168.1.1换为客户端ip)

也可将放行的 ip 换为任意的 cidr 块,如下

allowusers root@192.168.1.0/24  # 放行 192.168.1.*
allowusers root@172.16.0.0/12   # 放行 172.16.0.1 - 172.31.255.254

最后重启 ssh 服务:systemctl restart sshd.service

更多的 cidr 块转换,可使用 cidr计算器

很好用的 cidr 计算工具

第二种方法

修改host.allowhost.deny。按照如下方法:

# /etc/hosts.allow
sshd:192.168.1.1

# /etc/hosts.deny
sshd:all

最后重启 ssh 服务:systemctl restart sshd.service

此种方法可能不支持部分 cidr 段,会在 ssh 服务重启后报错,以自身使用情况为准。

host.allow和host.deny不生效

参考

在部分机器上设置此种端口限制后不生效,非白名单内 ip 仍能通过 ssh 连接,解决方法如下:

hosts.allow和hosts.deny属于tcp_Wrappers防火墙的配置文件,而用tcp_Wrappers防火墙控制某一服务访问策略的前提是,该服务支持tcp_Wrappers防火墙,即该服务应用了libwrapped库文件。

查看某服务(如ssh)是否应用了libwrapped库文件的方法是:

ldd /usr/sbin/sshd |grep libwrap.so.0

没有显示,表示此服务器上安装的SSH没有应用libwrapped库文件,也就不能用tcp_Wrappers防火墙控制访问策略。(一般情况下服务器默认安装的SSH都是支持libwrapped库文件,这台服务器不清楚为什么不支持)

最终解决方法是重新安装SSH。

yum -y remove openssh

yum -y install openssh

yum -y install openssh-server

安装完成后再次查看是否应用了libwrapped库文件,显示支持。

ldd /usr/sbin/sshd |grep libwrap.so.0

        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f3fb7f09000)

再测试SSH登陆,配置生效。

注意事项

务必看清 ssh 放通的用户是否正确,如放通git用户则需写成git@xxx而非root@xxx,若不慎写错,可能得花许多时间找这个问题…