Tcp_Wrapper_简单的基于主机的访问控制工具
来源:互联网 发布:淘宝推广自己买领佣金 编辑:程序博客网 时间:2024/05/23 23:55
目录
- 目录
- 简介
- 特性
- Tcp_Wrapper的实现
- 基本语法
- 范例
- 范例1
- 范例2
- 范例3
- 范例4
- 范例5
- 范例6
- 目录
简介
tcp wrapper
是Wietse Venema
开发的一个开源软件。它是一个用来分析TCP/IP
封包的软件,类似的IP封包软件还有iptables
。Linux
默认安装了tcp_wrapper
。作为一个安全的系统,Linux
本身有两层安全防火墙,通过IP过滤机制的iptables
实现第一层防护。iptables
防火墙通过直观的监视系统的运行状况,阻挡网络中的一些恶意攻击,保护整个系统正常运行免遭攻击和破坏。如果通过了第一层防护,那么下一层防护就是tcp_wrapper
了。通过tcp_wrapper
可以实现对系统中提供的某些服务的开放和关闭、允许及禁止,从而更有效的保证系统安全运行。使用tcp_wrapper
的功能仅需要两个配置文件:/etc/hosts.allow
和/etc/hosts.deny
。
特性
- 工作在第四层(传输层)的
TCP
协议 - 对有状态连接的特定服务进行安全检测并实现访问控制
- 以库文件形式实现
- 某进程是否接受
libwrap
的控制取决于发起此进程的程序在编译时是否针对libwrap
进行编译的 - 判断
sshd
服务是否支持tcp_wrapper
:
方法1:[root@centos6 ~]# ldd `which sshd` | grep libwrap.so # sshd服务支持tcp_wrapper libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f01bb457000)方法2:[root@centos6 ~]# strings `which sshd` | grep libwrap.so # 通过strings命令也可以查看,sshd服务程序是否调用libwrap.so库。strings命令列出sshd程序中所有的ASCII文本。libwrap.so.0
Tcp_Wrapper的实现
如果要使用Tcp_Wrapper的功能,只需两个配置文件:/etc/hosts.allow
和/etc/hosts.deny
。检查顺序为: /etc/hosts.allow
–>/etc/hosts.deny
(默认允许)。注:一旦前面规则匹配,直接生效 ,将不再继续检查。下图为/etc/hosts.allow
和/etc/hosts.deny
工作示意图:
基本语法
daemon_list@host: [except client_list1]client_list2 [ :options :option… ]
daemon_list@host
格式
- 单个应用程序的二进制文件名,而非服务名, 例如
vsftpd
- 以逗号或空格分隔的应用程序文件名列表,如
:sshd,vsftpd
ALL
表示所有接受tcp_wrapper
控制的服务程序
@host
格式
- 主机有多个
IP
,可用@hostIP
来实现控制,如:in.telnetd@192.168.0.254
client_list
格式
- 以逗号或空格分隔的客户端列表
- 基于IP地址: 192.168.10.1 192.168.1.
- 基于主机名:
www.magedu.com
.magedu.com
较少用 - 基于网络/掩码: 192.168.0.0/255.255.255.0
- 基于
net
/prefixlen
: 192.168.1.0/24(CentOS7
支持) - 基于网络组(
NIS
域):@mynetwork
- 内置
ACL
:ALL
(所有来源主机),LOCAL
(主机名中不带.的),KNOWN
(所有能解析到的主机),UNKNOWN
(所有未能解析到的主机),PARANOID
(正反解析不匹配的地址)
[:options]
选项:
deny
主要用在/etc/hosts.allow
定义“拒绝”规则,如:vsftpd: 172.16. :deny
allow
主要用在/etc/hosts.deny
定义“允许” 规则,如:vsftpd:172.16. :allow
spawn
启动一个外部程序完成执行的操作twist
实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O
和ERROR
发送到客户端,默认至/dev/null
EXCEPT
: 排除某个主机或某个网络
except client_list1
:代表除了client_list1
剩余的都匹配
范例:
范例1
拒绝192.168.8.129访问192.168.8.128的sshd服务
[root@centos6 ~]# vim /etc/hosts.deny #编辑/etc/hosts.deny文件,拒绝192.168.8.129访问sshdsshd@192.168.8.128: 192.168.8.129[root@centos7 ~]# ssh 192.168.8.128 #在192.168.8.129访问192.168.8.128已经被拒绝,注此文家修改完,立刻生效ssh_exchange_identification: read: Connection reset by peer[root@centos6 ~]# tail -2 /var/log/secure #在192.168.8.128上查看日志,已经把192.168.8.129拒绝Sep 15 09:39:37 centos6 sshd[3197]: pam_unix(sshd:session): session closed for user rootSep 15 09:40:51 centos6 sshd[3222]: refused connect from 192.168.8.129 (192.168.8.129)
范例2
拒绝192.168.8.0/24网段访问192.168.8.128的ftp服务,但允许192.168.8.129访问
[root@A ~]# vi /etc/hosts.deny #编辑/etc/hosts.deny文件,拒绝192.168.8.0/24网段访问192.168.8.128的ftp服务,但允许192.168.8.129访问vsftpd: 192.168.8.128 192.168.8. EXCEPT 192.168.8.129[root@B ~]# ifconfig ens34 # 在B上查看你ens34的IPens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.8.129 netmask 255.255.255.0 broadcast 192.168.8.255 inet6 fe80::b609:4db6:c15e:2d01 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:57:4a:72 txqueuelen 1000 (Ethernet) RX packets 2094 bytes 202054 (197.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1630 bytes 464373 (453.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@B ~]# ftp 192.168.8.128 # 访问ftp是可以的,因为我们允许192.168.8.129IP访问Connected to 192.168.8.128 (192.168.8.128).220 (vsFTPd 2.2.2)Name (192.168.8.128:root): ftp331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> [root@C ~]# ifconfig eth0 # 在C上查看你eth0的IPeth0 Link encap:Ethernet HWaddr 00:50:56:20:B8:83 inet addr:192.168.8.141 Bcast:192.168.8.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fe20:b883/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1280 errors:0 dropped:0 overruns:0 frame:0 TX packets:1194 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:108463 (105.9 KiB) TX bytes:705977 (689.4 KiB)[root@C ~]# ftp 192.168.8.128 # 访问192.168.8.128,被拒绝Connected to 192.168.8.128 (192.168.8.128).421 Service not available.ftp> [root@C ~]#
范例3
拒绝192.168.0..0/24网段访问192.168.8.128的ftp服务,但拒绝192.168.8.129访问
[root@A ~]# vim /etc/hosts.allow #编辑/etc/hosts.deny文件,逻辑关系为:先把192.168.0.0这个网段允许,然后又将192.168.8.0网段排除了,最后把192.168.8.129给拒绝了。vsftpd: 192.168. EXCEPT 192.168.8. EXCEPT 192.168.8.129:deny[root@B ~]# ifconfig ens34 # B的IP为192.168.8.129ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.8.129 netmask 255.255.255.0 broadcast 192.168.8.255 inet6 fe80::b609:4db6:c15e:2d01 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:57:4a:72 txqueuelen 1000 (Ethernet) RX packets 2546 bytes 239131 (233.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2017 bytes 500395 (488.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@B ~]# ftp 192.168.8.128 # 在192.168.8.129是无法访问192.168.8.128的Connected to 192.168.8.128 (192.168.8.128).421 Service not available.ftp> [root@C ~]# ifconfig eth0 # C的IP为192.168.8.141eth0 Link encap:Ethernet HWaddr 00:50:56:20:B8:83 inet addr:192.168.8.141 Bcast:192.168.8.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fe20:b883/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1620 errors:0 dropped:0 overruns:0 frame:0 TX packets:1476 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:138308 (135.0 KiB) TX bytes:735219 (717.9 KiB)[root@C ~]# ftp 192.168.8.128 # 在C上面是可以访问192.168.8.128的Connected to 192.168.8.128 (192.168.8.128).220 (vsFTPd 2.2.2)Name (192.168.8.128:root): ftp331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp>
范例4
允许所有人ssh
到192.168.8.128,但登陆时记录日志
[root@A ~]# vim /etc/hosts.allow #编辑/etc/hosts.allow文件sshd:ALL:spawn echo "$(date '+%%F %%T') Login from client\:%a %c to %s %p" >> /var/log/sshd.log # %c 客户端信息 # %s 服务器端信息 # %d 服务名 # %p 守护进程的PID # 注:使用%时需要转义,输入%%代表%,:也需要转义/:代表:[root@B ~]# ssh 192.168.8.128 # 在B上连接192.168.8.128Last login: Fri Sep 15 11:03:17 2017 from 192.168.8.129[root@A ~]# cat /var/log/sshd.log # 在192.168.8.128上查看日志已经记录2017-09-15 12:03:20 Login from client:192.168.8.129 192.168.8.129 to sshd@192.168.8.128 4532
范例5
拒绝所有人访问192.168.8.128的ftp
服务,当有用户连接时提示Don't allow access ftp
[root@A ~]# vi /etc/hosts.allow # 编辑/etc/hosts.allow文件vsftpd:ALL:twist echo "Don't allow access ftp"[root@B ~]# ftp 192.168.8.128 # 使用B连接192.168.8.128Connected to 192.168.8.128 (192.168.8.128). # 已经看到我们定义的提示信息。Don't allow access ftpftp>
范例6
拒绝所有人访问192.168.8.128的sshd
服务,当有用户连接时提示Don't allow access ftp
[root@A ~]# vi /etc/hosts.allow # 编辑/etc/hosts.allow文件sshd:ALL:twist echo "Don't allow access sshd"[root@B ~]# ssh 192.168.8.128 # 使用B连接192.168.8.128,已经被拒绝但没有看到提示ssh_exchange_identification: read: Connection reset by peer[root@B ~]# ssh -v 192.168.8.128 # 打开调试模式就可以看到了OpenSSH_6.6.1, OpenSSL 1.0.1e-fips 11 Feb 2013debug1: Reading configuration data /etc/ssh/ssh_configdebug1: /etc/ssh/ssh_config line 56: Applying options for *debug1: Connecting to 192.168.8.128 [192.168.8.128] port 22.debug1: Connection established.debug1: permanently_set_uid: 0/0debug1: identity file /root/.ssh/id_rsa type 1debug1: identity file /root/.ssh/id_rsa-cert type -1debug1: identity file /root/.ssh/id_dsa type -1debug1: identity file /root/.ssh/id_dsa-cert type -1debug1: identity file /root/.ssh/id_ecdsa type -1debug1: identity file /root/.ssh/id_ecdsa-cert type -1debug1: identity file /root/.ssh/id_ed25519 type -1debug1: identity file /root/.ssh/id_ed25519-cert type -1debug1: Enabling compatibility mode for protocol 2.0debug1: Local version string SSH-2.0-OpenSSH_6.6.1debug1: ssh_exchange_identification: Don't allow access sshd <==已经看到我们定义的提示信息ssh_exchange_identification: read: Connection reset by peer
- Tcp_Wrapper_简单的基于主机的访问控制工具
- 简单的基于角色的访问控制
- 搭建web服务实现多个虚拟主机.基于主机/用户的访问控制
- 基于规则的访问控制
- 基于角色的访问控制
- 基于角色的访问控制
- 基于角色的访问控制
- 基于状态机的简单控制
- Flex控制对主机网页中脚本的访问
- 基于角色管理的系统访问控制
- 基于角色管理的系统访问控制
- 基于角色管理的系统访问控制
- 基于角色访问控制的UML表示
- 基于角色管理的系统访问控制
- 基于角色管理的系统访问控制
- 基于角色管理的系统访问控制
- 基于角色管理的系统访问控制
- 基于角色访问控制的UML表示
- tf.nn.sparse_softmax_cross_entropy_with_logits
- github-popular
- :[org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a];
- Java--中文转换拼音,jpinyin-1.0.jar
- linux设备驱动的并发与竞争
- Tcp_Wrapper_简单的基于主机的访问控制工具
- mui开发APP教程之mui.ajax请求后出现“加载中”
- 仿滴滴打车开具发票页,ListView 粘性 Header
- {loop $tags $i $t}参数
- Android 架构组件简单小结
- Android逆向系列之动态调试3–Eclipse调试apk
- 技术文章 | 项目实战:如何构建知识图谱
- Eclipse 快捷键
- JavaSE系统学习1.1-Java虚拟机-JVM体系结构