Linux系统中的访问控制:hosts.deny & hosts.allow

hosts.deny和hosts.allow是Linux系统中用于访问控制的重要工具,起源于TCP Wrapper软件,旨在提供对网络服务的访问控制。这两个文件在系统安全性方面扮演关键角色,hosts.deny文件作为黑名单,用于拒绝特定主机或网络的访问,而hosts.allow文件作为白名单,用于允许特定主机或网络的访问。通过配置这两个文件,系统管理员可以限制或允许特定主机对服务器上的服务的访问,提高系统的安全性。

系统处理机制与配置
Linux系统处理hosts.deny和hosts.allow的机制是基于TCP Wrapper的规则。当有一个连接请求到达时,系统首先检查hosts.allow文件,确定是否允许该请求的主机进行连接。如果主机在hosts.allow中找到匹配项,则连接会被接受。如果主机不在hosts.allow中找到匹配项,系统会继续检查hosts.deny文件。如果主机在hosts.deny中匹配,则连接将被拒绝。如果主机既不在hosts.allow也不在hosts.deny中匹配,则系统使用默认策略(通常是拒绝连接)。
配置这两个文件的过程相对简单。管理员可以编辑hosts.allow和hosts.deny文件,添加规则。规则可以按照具体IP地址、子网、服务类型等进行定义。每个文件的每一行代表一个地址或地址段。可以使用IP地址、主机名或子网来指定,也可以使用通配符来表示一组地址。在配置时,需要注意以下事项:

1. 注意文件顺序:Linux系统对于hosts.deny和hosts.allow的规则处理是按照文件中的顺序进行的。因此,在配置文件时,应将较宽松的规则放在前面,较严格的规则放在后面。
2. 慎用通配符:通配符的使用使得配置更灵活,但要谨慎使用。不正确或过于宽泛的通配符配置可能意外地允许或禁止了一些不应该访问或被拒绝访问的主机。
3. 添加注释:为增加可读性和可维护性,添加注释是个好习惯。可以在文件中使用井号(#)来添加注释,以便自己和其他管理员理解和维护配置规则的意图。
4. 定期审查:由于网络环境的动态性,建议定期审查和更新hosts.deny和hosts.allow文件。随着时间的变化,可能需要添加新的规则或删除不再适用的规则。

常见场景与配置案例
hosts.deny和hosts.allow在实际应用中最常见的2个场景就是远程登录控制和特定服务访问限制。以下是两个配置案例:

1. 远程访问控制:仅允许特定IP访问SSH服务,其余IP默认拒绝。先在hosts.allow文件中添加允许访问的IP(如11.11.11.11),再在hosts.deny文件中添加默认拒绝规则。
在hosts.allow中添加规则:sshd: 11.11.11.11
在hosts.deny中添加默认拒绝规则:sshd: ALL

2. 限制特定服务访问:有时需要限制某些服务只能被特定的主机或网络访问。通过在hosts.allow中指定允许访问的规则,可以实现细粒度的访问权限控制。例如,仅允许11.11.11.0/24网段的主机访问vsftpd服务器。
在hosts.allow中添加规则:vsftpd: 11.11.11.0/24
在hosts.deny中添加默认拒绝规则:vsftpd: ALL

总之,hosts.deny和hosts.allow在Linux系统中起到了重要的访问控制作用。
通过配置这两个文件,管理员可以根据实际需求保护系统资源的安全性,并限制未经授权的访问。

Linux系统 网络配置和故障排除基础命令

分配 IP 地址和网关
分配一个 IP Address 和 Gateway即时接口。如果系统重新启动,该设置将被删除。
ifconfig eth0 11.11.11.11 netmask 255.255.255.0

启用或禁用特定网口
enable 或者 disable

启用 eth0
# ifup eth0

禁用 eth0
# ifdown eth0

设置 MTU 大小
默认情况下 MTU 大小是 1500. 我们可以设置所需MTU大小与以下命令。
# ifconfig eth0 mtu 1500

将接口设置为混杂模式
# ifconfig eth0 – promisc

2. ping 命令
ping命令 用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
#ping www.ukihk.com

3. traceroute 命令
traceroute是一个网络故障排除实用程序,它显示到达目的地所用的跳数,也决定了数据包的传播路径。下面我们正在追踪通往全球的路线DNS server IP Address 并且能够到达目的地还显示该数据包正在旅行的路径。
# traceroute 8.8.8.8

4. netstat 命令
netstat命令 用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
# netstat -r

5. dig 命令
dig命令 是常用的域名查询工具,可以用来测试域名系统工作是否正常。
# dig www.ukihk.com

6. nslookup 命令
nslookup 命令也用于找出 DNS相关查询。
# nslookup www.ukihk.com

7. route命令
route 命令还显示和操作 ip路由表。查看默认路由表Linux
添加路由
# route add -net 11.11.11.0/24 gw 11.11.11.254

删除路由
# route del -net 11.11.11.0/24 gw 11.11.11.254

添加默认网关
# route add default gw 11.11.11.254

8. host命令
host 查找名称的命令 IP 或者 IP 命名 IPv4 或者 IPv6 并查询 DNS 记录。
# host www.ukihk.com

9. arp 命令
arp 命令 是 Address Resolution Protocol,地址解析协议,是通过解析网络层地址来找寻数据链路层地址的一个网络协议包中极其重要的网络传输协议。而该命令可以显示和修改 arp 协议解析表中的缓冲数据。
# arp -e

10. ethtool 命令
ethtool命令用于获取以太网卡的配置信息,或者修改这些配置。这个命令比较复杂,功能特别多。
# ethtool eth0

12. hostname 命令
hostname是在网络中识别。执行hostname命令以查看机器的主机名。可以在其中永久设置主机名/etc/sysconfig/network. 设置正确的主机名后需要重新启动。

# hostname ukihk.com

Tcpdump 命令实际示例

Tcpdump是Linux 下功能强大的网络抓包工具

如何在Linux中安装tcpdump
Linux 发行版已经预装了 tcpdump 工具,如果您的系统没有安装它,可以使用以下任意一条命令进行安装。
1、$ sudo apt install tcpdump [在 Debian, Ubuntu 和 Mint 上]
2、$ sudo yum install tcpdump [在 RHEL/CentOS/Fedora 和 Rocky/AlmaLinux 上]
3、$ sudo emerge -a sys-apps/tcpdump [在 Gentoo Linux 上]
4、$ sudo apk add tcpdump [在 Alpine Linux 上]
5、$ sudo pacman -S tcpdump [在 Arch Linux 上]
6、$ sudo zypper install tcpdump [在 OpenSUSE 上]

1、从特定接口捕获数据包
默认情况下,命令屏幕会不断滚动,直到您中断它。当我们执行 tcpdump 命令时,它会从所有接口捕获数据包,但是通过使用“-i”开关,只能从所需的接口捕获。
# tcpdump -i ens192

2、仅捕获指定数量的数据包
当运行 tcpdump 命令时,它会捕获指定接口的所有数据包,直到您按下取消按钮。但是通过使用“-c”选项,您可以捕获指定数量的数据包。以下示例将仅捕获6个数据包。
# tcpdump -c 5 -i ens192

3、以ASCII格式打印捕获的数据包
以下带有选项“-A”的tcpdump命令以ASCII格式显示数据包。这是一种字符编码格式。
# tcpdump -A -i ens192

4、显示可用的接口
要列出系统上可用的接口数量,请运行以下带有“-D”选项的命令。
# tcpdump -D

5、以十六进制和ASCII格式显示捕获的数据包
以下带有“-XX”选项的命令会捕获每个数据包的数据,包括其链路层头部,以十六进制和ASCII格式显示。
# tcpdump -XX -i ens192

6、捕获并保存数据包到文件中
tcpdump具有将数据包捕获并保存为.pcap格式的功能,要实现这一点,只需执行带有“-w”选项的命令。
# tcpdump -w 0001.pcap -i ens192

7、读取捕获的数据包文件
要读取和分析捕获的数据包0001.pcap文件,请使用带有“-r”选项的命令,如下所示。
# tcpdump -r 0001.pcap

8、捕获IP地址数据包
要捕获特定接口的数据包,请使用带有“-n”选项的以下命令。
# tcpdump -n -i ens192

9. 仅捕获TCP数据包。
要基于TCP端口捕获数据包,请使用带有“tcp”选项的以下命令。
# tcpdump -i ens192 tcp

10、从特定端口捕获数据包
假设您要捕获特定端口443的数据包,请执行以下命令,并指定端口号443,如下所示。
# tcpdump -i ens192 port 443tcpdump -i ens192 port 443

11、从源IP捕获数据包
要捕获源 IP 的数据包,例如,您要捕获IP地址为 11.11.11.11 的数据包,请使用以下命令。
# tcpdump -i ens192 src 11.11.11.11

12、从目标IP捕获数据包
要捕获目标 IP 的数据包,例如,您要捕获 IP 地址为 11.11.11.11 的数据包,请使用以下命令。
# tcpdump -i ens192 dst 11.11.11.11