当我们需要限制某些不受欢迎的IP地址或整个网段访问Linux服务器上的服务时,可以采取多种策略。以下两种方法提供了有效的途径来实现这一目标:
方法一:通过/etc/hosts.deny文件进行访问控制
- 登录到服务器:首先,您需要使用具有足够权限的用户账户登录到您的Linux服务器。
- 编辑/etc/hosts.deny文件:使用您喜欢的文本编辑器(如vi、nano等)打开/etc/hosts.deny文件。
sudo vi /etc/hosts.deny
- 添加禁止规则:在文件中添加以下行以禁止特定IP或网段访问ssh服务(或其他您想要限制的服务)。请注意,这里使用的IP地址和网段是示例,您需要根据实际情况进行替换。
sshd:203.XXX.XXX.189
sshd:203.XXX.XXX.0/24
第一行禁止了单个IP地址203.XXX.XXX.189
,而第二行则禁止了整个203.XXX.XXX.0/24
网段。
4. 保存并退出:保存您的更改并关闭文本编辑器。
5. 重启服务:对于某些服务(如ssh),您可能需要重启相关服务以使更改生效。但请注意,对于hosts.deny
和hosts.allow
文件,通常不需要重启服务,更改会立即生效。然而,如果您的系统使用了xinetd
来管理服务,您可能需要执行以下命令:
sudo service xinetd restart
但请注意,现代系统通常不使用xinetd
来管理ssh,因此这一步可能不是必需的。确保了解您的系统配置。
方法二:使用iptables进行防火墙级别的访问控制
- 登录到服务器:同样,首先使用具有足够权限的用户账户登录到您的Linux服务器。
- 编辑规则文件或直接应用iptables规则:
您可以直接在命令行中输入iptables规则,或者将它们添加到启动脚本中(如/etc/rc.local
),以便在系统重启时自动应用。但是,现代系统通常使用systemd
而不是/etc/rc.local
,因此更推荐的方法是创建自定义的systemd
服务单元文件或使用现有的管理工具(如firewalld
)。
以下是一些基本的iptables命令示例,用于禁止特定IP或网段的访问:
sudo iptables -I INPUT -s 61.XXX.XXX.1 -j DROP
sudo iptables -I INPUT -s 61.XXX.XXX.0/24 -j DROP
sudo iptables -I INPUT -s 192.XXX.XXX.0/24 -p tcp –dport 80 -j DROP
这些命令分别禁止了单个IP、整个网段和特定网段对80端口的访问。请根据您的需求替换IP地址和端口号。
3. 保存iptables规则:如果您直接应用了iptables规则,您需要确保这些规则在系统重启后仍然有效。这可以通过安装iptables-persistent
包或使用其他方法来实现,具体取决于您的Linux发行版。
4. 重启服务器(如果需要):如果您更改了启动脚本或安装了新软件包来保存iptables规则,您可能需要重启服务器以使更改生效。但是,如果您只是直接应用了iptables规则,这一步通常不是必需的。
重要提示:在应用任何防火墙规则之前,请确保您已经仔细考虑了这些规则可能带来的影响,并始终在生产环境之外的地方进行测试。错误地配置防火墙可能会导致您无法远程访问服务器或导致其他意外的服务中断。