访问控制列表来实现防火墙功能
系统声明: RHEL7
防火墙优先级
iptables
优先级最高
,是内核级别的firewalld
防火墙策略次之
tcp_Wrappers
防火墙优先级最低
hosts.allow
和hosts.deny
属于tcp_Wrappers
防火墙的配置文件
TCP_Wrappers防火墙策略配置文件–从应用层配置防火墙策略
TCP_Wrappers
防火墙服务的防火墙策略由两个控制列表文件所控制
/etc/hosts.allow
是允许文件
,从这个文件中匹配到策略,就会放行
/etc/hosts.deny
是拒绝文件
,从这个文件中匹配到策略,就会拒绝
TCP_Wrappers
防火墙服务可以控制外部IP对本机服务的访问
/etc/hosts.allow
与 /etc/hosts.deny
只对调用了 tcp_wrappers
的程序才起作用,即该服务应用了libwrapped
库文件。
1.查看程序/服务是否应用了libwrapped库文件
# 查看应用程序是否支持wrapper
# 用strings程序然后grep字符串hosts_access
strings /usr/sbin/sshd | grep hosts_access
# 查看某服务(如ssh)是否应用了libwrapped库文件的方法
ldd /usr/sbin/sshd |grep libwrap.so.0
## 没有显示,表示此服务器上安装的SSH没有应用libwrapped库文件,也就不能用tcp_Wrappers防火墙控制访问策略。
server_name(服务名)
service_name 『必需』i跟你的 xinetd 或者是 /etc/rc.d/init.d/* 里面的程序名称要相同。
service_name
就是调用了libwrapped
库文件的应用程序。
2.配置允许策略–示例
/etc/hosts.allow
控制可以访问本机的IP地址,/etc/hosts.deny
控制禁止访问本机的IP。
下面是一个/etc/hosts.allow
的示例:
服务进程名 | 主机列表(IP/网段) | 当规则匹配时可选的命令操作 |
---|---|---|
ALL | :ALL | |
sshd | :127.0.0.1 | :allow(可以省略) |
smdb | :192.168.10.0/24 | |
sshd | :192.168.0. (最末位不写,表示一个网段) | |
telnetd,sshd | :192.168.6. , 192.168.7. | :allow |
# 允许所有IP来源访问所有服务
ALL:ALL
允许127.0.0.1访问本地所有服务
#允许本机访问本机所有服务进程
ALL:127.0.0.1
允许指定IP访问指定服务
#允许192.168.0.网段的IP访问smbd服务
smbd:192.168.0.0/255.255.255.0
# 或
sshd:192.168.0. # 最末尾不写,表示一个网段
## 192.168.6.100代表一个主机,192.168.6.代表整个网段。同理,ringkee.com代表一台主机,.ringkee.com代表ringkee.com域内的所有主机。
3.配置拒绝策略-示例
/etc/hosts.deny控制禁止访问本机的IP。
注意看,下方的示例总能:sshd:all:deny
表示拒绝了所有sshd
远程连接。:deny
可以省略。
# 拒绝所有IP访问sshd
sshd:all:deny
# 或
sshd:ALL
拒绝所有IP连接所有服务–白名单模式
# 拒绝所有IP连接所有服务
ALL:ALL
TCP_Wrappers防火墙配置完不需要重启,策略会立即生效
所以:当hosts.allow
和 host.deny
相冲突
时,以/etc/hosts.allow
设置为准
。
Linux
系统会
- 先检查
/etc/hosts.deny
拒绝规则, - 再检查
/etc/hosts.allow
允许规则,如果有冲突 按/etc/hosts.allow
允许规则处理
RHEL8没有hosts.allow和hosts.deny
RHEL8
已经没有这两个文件
,即使创建它也不起作用
RHEL8
的程序已经不再
调用tcp_wrappers
,而TCP_Wrappers
防火墙是基于tcp_wrappers
的,应用不调用tcp_wrappers
,TCP_Wrappers
防火墙就无法管理该程序。
查看RHEL8的sshd服务是否使用libwrapped库文件
# 查看Centos7的sshd服务是否使用libwrapped库文件
ldd /usr/sbin/sshd | grep libwrap.so
# 查看RHEL8的sshd服务是否使用libwrapped库文件
ldd /usr/sbin/sshd | grep libwrap.so
# 不调用tcp_wrappers,TCP_Wrappers防火墙就无法管理该程序