做网络等级保护的时候经常会遇到这样的场景,要求限制访问服务器的主机IP,通过问度娘,经常会给出这种解决方案
可以结合使用hosts.allow和hosts.deny来进行限制。
通过编辑 /etc/hosts.allow添加允许放行SSH的IP地址
cat /etc/hosts.allow
sshd:IP1
sshd:IP2
编辑 /etc/hosts.deny添加禁止的SSH主机为所有
cat /etc/hosts.deny
sshd:ALL
这样做的好处是对业务影响最小。比如你要通过firewalld或iptables来限制SSH访问源IP的话,你需要知道业务要开放哪些端口,需要与应用的厂商进行协调,当然很多情况他们也说不清。
但是按openssh网站的说法从6.7以后开始tcpwrappers/libwrap己经移除,正常来说无法使用hosts.allow和hosts.deny来进行限制
openssh的网站说明:
但是默认centos/rhel7的系统里还是能调用,因为在openssh8.0以前还可以通过编译的时候加载该功能,使该功能生效。
比如我们查看sshd文件,显示如下表示启用。
[root@CentOS7]# ldd /usr/sbin/sshd | grep libwrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fa84e1a0000)
但是在openssh8.0以后的版本,这个功能彻底无法使用了
同时红帽官方己经表明TCP Wrappers 在 RHEL/CentOS 8 已不可使用,官方建议使用 Firewalld 作为 TCP Wrappers 的替代方案。
如果是新部署的系统,没有上业务也可以用下面的命令来一键修改,使用防火墙默认的zone进行配置:
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.100.1" port protocol="tcp" port="22" accept" && firewall-cmd --permanent --remove-service=ssh && firewall-cmd --reload
其中source address="<你要放行的IP>"
还有一种替换方法就是使用sshd_config里添加参数的方式:
允许特定用户登录(白名单):
在/etc/ssh/sshd_config配置文件中设置AllowUsers选项,(配置完成需要重启 SSHD 服务)格式如下:
AllowUsers root@192.168.1.1
仅允许root从 192.168.1.1通过SSH 登录系统,如IP地址不匹配或用户名不匹配都无法登录
拒绝指定用户进行登录(黑名单):
在/etc/ssh/sshd_config配置文件中设置DenyUsers选项,(配置完成需要重启SSHD服务)格式如下:
DenyUsers oracle grid #Linux系统账户
拒绝 oracle、grid帐户通过 SSH 登录系统
如果需要root用户允许多IP登录allowusers root@IP,IP,IP
示例:
echo "allowusers root@192.168.100.1" >> /etc/ssh/sshd_config
systemctl restart sshd
配置之后,我再通过192.168.100.3的主机使用root去登录这个LINUX就会报如下错误
己经提示拒绝。
也欢迎关注我的公众号【徐sir的IT之路】,一起学习!
————————————————————————————
公众号:徐sir的IT之路
CSDN :徐sir(徐慧阳)_数据库记录,系统集成-CSDN博客
墨天轮:徐sir的个人主页 - 墨天轮
PGFANS:PGFans问答社区:全球唯一的PostgreSQL中文技术交流社区
————————————————————————————