方法一:使用hosts.allow和hosts.deny

这两个文件都是在/etc/目录下:

/etc/hosts.allow
/etc/hosts.deny
Bash

hosts.allow和hosts.deny支持哪些服务

hosts.allow和hosts.deny规则的执行者为TCP wrappers,对应守护进程为tcpd,而tcpd执行依赖于程序使用了libwrap库,也就是说:hosts.allow和hosts.deny支持且只支持使用了libwrap库的服务,一般这个是针对守护进程Daemon。

查看程序是否使用libwarp

因为只有使用libwarp的程序才能使用hosts.allow和hosts.deny来控制它的接入,所以我们要知道怎样查看某个程序是否支持libwarp。

方法一: 查看是否有hosts_access字段串

strings /usr/sbin/sshd | grep hosts_access
Bash

输出结果:

hosts_access

方法二: 使用ldd

ldd /usr/sbin/sshd | grep libwrap
Bash

输出结果:

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

ldd可以列出一个程序所需要得动态链接库(.so),ldd并不是一个二进制可执行文件,而是一个脚本,它的路径在/usr/bin/ldd,你可以用vim打开查看它。

语法及选项规则

TCP Wrappers首先会在hosts.allow文件中查找规则匹配,如果找到匹配,那么tcpd会根据规则停下来,批准或拒绝访问。如果在hosts.allow文件中未找到匹配,那么tcpd会读取hosts.deny文件直到找到匹配,如果找到匹配,就拒绝访问,否则批准访问。

所以我们要做的说是在hosts.allow和hosts.deny中写一些规则。

hosts.allow和hosts.deny的语法规则可用以下两个命令查看:

man 5 hosts_options
man 5 hosts_access
Bash

规则基本格式:

daemon, daemon, ...: client, client, ...: option
Bash

daemon:要监控的服务,如:sshd、telnetd、ftpd,多个守护进程可用逗号隔开,可用ALL表示任意守护进程;
client:主机名、IP地址/IP范围、域名,多个client可用逗号隔开,可用ALL表示任意client,另外client值还可以是LOCAL,它会匹配不包含点号(“.”)的主机,不带“.”号表示所有与域不相关的主机;
option:有allow、deny、except三种值,其中except的示例:

ftpd:.mydomain.com except uktrip1.mydomain.com, uktrip2.mydomain.com : allow
Bash

表示允许域名为.mydomain.com结尾的域名访问ftpd,但排除“uktrip1.mydomain.com, uktrip2.mydomain.com”这两个域名(即这两个域名不允许访问ftpd),即except关键字后边的ip/域名是“除外”的意思。

对 hosts.allow 和 hosts.deny 的更改是动态的。只要修改的内容保存了,更改就会马上生效(但无法阻挡已经登录的,这跟iptables不一样)。

根据前面所说,hosts.allow和host.deny这两个文件的基本语法是daemon:client:option,但option可以不写,如果不写option,那么你在hosts.allow中写的规则就表示是允许规则,在hosts.deny中填写的规则就表示是禁止规则。但是,如果你写了option,比如你option写了:allow,则即使你把它写在host.deny中,它也是允许的规则;又比如你option写了:deny,既使你是在hosts.allow中写,那么也是禁止的规则,所以经常有人只在hosts.allow一个文件中写所有规则,因为这样只要查看一个文件就一目了然,不用两个文件去比对。

匹配ip地址段的写法:192.168.10.*192.168.10.192.168.10/24都是等效的,都相当于“192.168.10.1-192.168.10.254”。另外ip段也可以用掩码,比如“218.64.87.0/255.255.255.128”。

允许所有ip为10.37.129.X的客户端登录ssh,除了10.37.129.7之外:

sshd:10.37.129. except 10.37.129.7:allow
sshd:ALL:deny
Bash

据说拒绝连接后,会在/var/adm/messages中保存被拒绝的记录,但我这边实际查看并没有。

注:当hosts.allow和 host.deny相冲突时,以hosts.allow设置为准。

方法二:使用sshd_config

配置格式

sshd_config是sshd的配置文件,它的位置是在/etc/ssh/sshd_config,它有两个关键字AllowUsers(允许指定用户登录ssh,相当于白名单模式)和DenyUsers(禁止指定用户,相当于黑名单模式),两种模式只能选用一种。

配置格式(多个用户空格隔开):

AllowUsers 用户1 用户2 用户3@ip()或域名 用户4@ip()或域名
DenyUsers 用户1 用户2 用户3@ip()或域名 用户4@ip()或域名
Bash

配置后一定要重启sshd才会生效:service sshd restart

实例演示

例:在10.37.129.6服务器的/etc/ssh/sshd_config文件最后添加以下配置:

AllowUsers zhangsan root@10.37.129.5
Bash

该配置表示:
– 允许用户名为zhangsan的用户从任意ip的客户端使用ssh登录该服务器;
– 允许超级用户root从ip为10.37.129.5的客户端使用ssh登录该服务器;
– 不符合以上两个条件的,都不允许登录。比如用户名为lisi的用户就不允许登录,root也不能在ip为10.37.129.7的机器上去登录;
– 配置后一定要重启sshd才会生效:service sshd restart

在10.37.129.7的机器上去用root@10.37.129.6去登录,它会显示输入密码的提示,但输入密码后会显示“Permission denied”:

> root@centos-linux-3 > ssh root@10.37.129.6
root@10.37.129.6's password:
Permission denied, please try again.
root@10.37.129.6's password:
Permission denied, please try again.
root@10.37.129.6's password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Bash

方法三:使用防火墙

使用iptables

# 允许用户从ip为"10.37.129.2"的客户端登录到22端口(即sshd端口)
iptables -A INPUT -p tcp -s 10.37.129.2 --destination-port 22 -j ACCEPT
# 除此之外禁止所有其它ip连接22端口
iptables -A INPUT -p tcp --destination-port 22 -j DRP
Bash

使用firewalld

firewalld是CentOS7系统自带的防火墙,我暂时没有研究。

总结

  • hosts.allow、hosts.deny和防火墙都只能防ip,不能防指定用户
  • sshd_config可以按用户名和ip来防,但是却只能用于sshd,防火墙应用最广,任何应用的数据都能栏,hosts.allow、hosts.deny只支持使用了libwrap库的服务。
夜河资源网提供的所有内容仅供学习与交流。通过使用本站内容随之而来的风险以及法律责任与本站无关,所承担的法律责任由使用者承担。
一、如果您发现本站侵害了相关版权,请附上本站侵权链接和您的版权证明一并发送至邮箱:yehes#qq.com(#替换为@)我们将会在五天内处理并断开该文章下载地址。
二、本站所有资源来自互联网整理收集,全部内容采用撰写共用版权协议,要求署名、非商业用途和相同方式共享,如转载请也遵循撰写共用协议。
三、根据署名-非商业性使用-相同方式共享 (by-nc-sa) 许可协议规定,只要他人在以原作品为基础创作的新作品上适用同一类型的许可协议,并且在新作品发布的显著位置,注明原作者的姓名、来源及其采用的知识共享协议,与该作品在本网站的原发地址建立链接,他人就可基于非商业目的对原作品重新编排、修改、节选或者本人的作品为基础进行创作和发布。
四、基于原作品创作的所有新作品都要适用同一类型的许可协议,因此适用该项协议, 对任何以他人原作为基础创作的作品自然同样都不得商业性用途。
五、根据二〇〇二年一月一日《计算机软件保护条例》规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可不经软件著作权人许可,无需向其支付报酬!
六、鉴此,也望大家按此说明转载和分享资源!本站提供的所有信息、教程、软件版权归原公司所有,仅供日常使用,不得用于任何商业用途,下载试用后请24小时内删除,因下载本站资源造成的损失,全部由使用者本人承担!