如何在 Linux 中阻止对特定 IP 和网络范围的 SSH 和 FTP 访问
通常我们都经常使用SSH和FTP服务来访问远程服务器和虚拟专用服务器。作为 Linux 管理员,您必须知道如何在 Linux 中阻止对特定 IP 或网络范围的 SSH 和 FTP 访问,以进一步加强安全性。
本教程将向您展示如何在 CentOS 6 和 7 服务器中阻止对特定 IP 地址和/或网络范围的 SSH 和 FTP 访问。本指南已在CentOS 6.x和7.x版本上进行了测试,但它可能适用于其他 Linux 发行版,如 Debian、Ubuntu 和 SUSE/openSUSE 等。
我们将使用两种方法来实现。第一种方法是使用IPTables / firewallD,第二种方法是使用TCP包装器,并借助hosts.allow和hosts.deny文件来实现。
请参阅以下指南以了解有关 IPTables 和 Firewalld 的更多信息。
- IPTables(Linux 防火墙)基本指南提示/命令
- 如何设置 Iptables 防火墙以启用对 Linux 中的服务的远程访问
- 如何在 RHEL/CentOS 7 和 Fedora 21 中配置“FirewallD”
- 在 Linux 中配置和管理防火墙的有用的“FirewallD”规则
现在您了解了什么是IPTables和FirewallD以及它的基础知识。
方法 1:使用 IPTables/FirewallD 阻止 SSH 和 FTP 访问
现在让我们看看如何使用RHEL/CentOS/Scientific Linux 6.x 版本上的IPtables和CentOS 7.x 上的FirewallD来阻止对特定 IP(例如192.168.1.100)和/或网络范围(例如192.168.1.0/24)的SSH 和 FTP 访问。
阻止或禁用 SSH 访问
--------------------- On IPtables Firewall --------------------- # iptables -I INPUT -s 192.168.1.100 -p tcp --dport ssh -j REJECT # iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport ssh -j REJECT
--------------------- On FirewallD --------------------- # firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100 -p tcp --dport 22 -j REJECT # firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100/24 -p tcp --dport 22 -j REJECT
要使新规则生效,您需要使用以下命令。
# service iptables save [On IPtables Firewall] # firewall-cmd --reload [On FirewallD]
现在,尝试从被阻止的主机通过SSH 连接服务器。请注意,此处的192.168.1.150是被阻止的主机。
# ssh 192.168.1.150
您应该会看到以下消息。
ssh: connect to host 192.168.1.150 port 22: Connection refused
解除阻止或启用 SSH 访问
要解除阻止或启用 SSH 访问,请转到远程服务器并运行以下命令:
--------------------- On IPtables Firewall --------------------- # iptables -I INPUT -s 192.168.1.100 -p tcp --dport ssh -j ACCEPT # iptables -I INPUT -s 192.168.1.100/24 -p tcp --dport ssh -j ACCEPT
--------------------- On FirewallD --------------------- # firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100 -p tcp --dport 22 -j ACCEPT # firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100/24 -p tcp --dport 22 -j ACCEPT
使用以下命令保存更改以通过 SSH 访问您的服务器。
# service iptables save [On IPtables Firewall] # firewall-cmd --reload [On FirewallD]
阻止或禁用 FTP 访问
通常, FTP的默认端口是20和21。因此,要使用 IPTables 阻止所有 FTP 流量,请运行以下命令:
--------------------- On IPtables Firewall --------------------- # iptables -I INPUT -s 192.168.1.100 -p tcp --dport 20,21 -j REJECT # iptables -I INPUT -s 192.168.1.100/24 -p tcp --dport 20,21 -j REJECT
--------------------- On FirewallD --------------------- # firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100 -p tcp --dport 20,21 -j REJECT # firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100/24 -p tcp --dport 20,21 -j REJECT
要使新规则生效,您需要使用以下命令。
# service iptables save [On IPtables Firewall] # firewall-cmd --reload [On FirewallD]
现在,尝试从被阻止的主机( 192.168.1.100 )访问服务器,命令如下:
# ftp 192.168.1.150
您将收到类似下面的错误消息。
ftp: connect: Connection refused
解除阻止或启用 FTP 访问
要解除阻止并重新启用 FTP 访问,请运行:
--------------------- On IPtables Firewall --------------------- # iptables -I INPUT -s 192.168.1.100 -p tcp --dport 20,21 -j ACCEPT # iptables -I INPUT -s 192.168.1.100/24 -p tcp --dport 20,21 -j ACCEPT
--------------------- On FirewallD --------------------- # firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100 -p tcp --dport 20,21 -j ACCEPT # firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100/24 -p tcp --dport 20,21 -j ACCEPT
使用命令保存更改:
# service iptables save [On IPtables Firewall] # firewall-cmd --reload [On FirewallD]
现在,尝试通过 FTP 访问服务器:
# ftp 192.168.1.150
输入您的 ftp 用户名和密码。
Connected to 192.168.1.150. 220 Welcome to Example FTP service. Name (192.168.1.150:sk): example 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
方法 2:使用 TCP Wrappers 阻止 SSH 和 FTP 访问
如果您不想使用IPTables或FirewallD,那么TCP 包装器是阻止对特定 IP 和/或网络范围的 SSH 和 FTP 访问的更好方法。
OpenSSH 和 FTP 是在 TCP 包装器支持下编译的,这意味着您可以在以下两个重要文件中指定允许哪些主机连接而无需触及防火墙:
- /etc/hosts.allow
- /etc/hosts.deny
顾名思义,第一个文件包含允许主机的条目,第二个文件包含被阻止主机的地址。
例如,让我们阻止对 IP 地址为192.168.1.100且网络范围为192.168.1.0的主机的 SSH 和 FTP 访问。此方法适用于 CentOS 6.x 和 7.x 系列。当然,它也适用于其他发行版,例如 Debian、Ubuntu、SUSE、openSUSE 等。
打开/etc/hosts.deny
文件并添加您想要阻止的以下 IP 地址或网络范围,如下所示。
##### To block SSH Access ##### sshd: 192.168.1.100 sshd: 192.168.1.0/255.255.255.0 ##### To block FTP Access ##### vsftpd: 192.168.1.100 vsftpd: 192.168.1.0/255.255.255.0
保存并退出文件。
现在,重新启动 sshd 和 vsftpd 服务以使新的更改生效。
--------------- For SSH Service --------------- # service sshd restart [On SysVinit] # systemctl restart sshd [On SystemD]
--------------- For FTP Service --------------- # service vsftpd restart [On SysVinit] # systemctl restart vsftpd [On SystemD]
现在,尝试通过 SSH 连接服务器或从被阻止的主机连接。
# ssh 192.168.1.150
您将看到以下输出:
ssh_exchange_identification: read: Connection reset by peer
现在,尝试通过 FTP 连接服务器或从被阻止的主机连接。
# ftp 192.168.1.150
您将看到以下输出:
Connected to 192.168.1.150. 421 Service not available.
要再次解除阻止或启用 SSH 和 FTP 服务,请编辑hosts.deny文件并注释掉所有行,最后重新启动 vsftpd 和 sshd 服务。
结论
就这些了。总而言之,今天我们学习了如何使用 IPTables、FirewallD 和 TCP 包装器阻止特定 IP 地址和网络范围。这些方法非常简单明了。
即使是新手 Linux 管理员也可以在几分钟内完成此操作。如果您知道其他阻止 SSH 和 FTP 访问的方法,请随时在评论部分分享。并且不要忘记在您所有的社交网络上分享我们的文章。