如何在Linux中阻止SSH和FTP访问特定的IP和网络范围


通常,我们经常使用 SSH FTP 服务来访问远程服务器和虚拟专用服务器。作为Linux管理员,您必须了解如何在Linux中阻止对特定IP或网络范围的SSH和FTP访问,以便进一步加强安全性。

  1. 25 Hardening Security Tips for Linux Servers
  2. 5 Useful Tips to Secure and Protect SSH Server

本教程将向您展示如何阻止对CentOS 6和7服务器中的特定IP地址和/或网络范围的SSH和FTP访问。本指南在 CentOS 6.x 7.x 版本上进行了测试,但它可能适用于其他Linux发行版,如Debian,Ubuntu和SUSE/openSUSE等。

我们将用两种方法完成。第一种方法是使用 IPTables / firewallD ,第二种方法是在 hosts.allow TCP 包装器>和 hosts.deny 文件。

请参阅以下指南以了解有关IPTables和Firewalld的更多信息。

  1. Basic Guide on IPTables (Linux Firewall) Tips / Commands
  2. How To Setup an Iptables Firewall to Enable Remote Access to Services in Linux
  3. How to Configure ‘FirewallD’ in RHEL/CentOS 7 and Fedora 21
  4. Useful ‘FirewallD’ Rules to Configure and Manage Firewall in Linux

现在你知道什么是 IPTables FirewallD ,这是它的基础知识。

方法1:使用IPTables / FirewallD阻止SSH和FTP访问

现在让我们看看如何阻止对特定IP(例如 192.168.1.100 )和/或网络范围(例如 192.168.1.0/24 )的SSH和FTP访问在RHEL/CentOS/Scientific Linux 6.x版本上使用 IPtables ,在CentOS 7.x上使用 FirewallD

--------------------- 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访问,请转至远程服务器并运行以下命令:

--------------------- 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 的默认端口为 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访问,请运行:

--------------------- 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 TecMint FTP service.
Name (192.168.1.150:sk): tecmint
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包装器是阻止SSH和FTP访问特定的更好方法IP和/或一系列网络。

OpenSSH和FTP是使用TCP包装器编译编译的,这意味着您可以在以下两个重要文件中指定允许连接的主机而不触及防火墙,并且:

  1. /etc/hosts.allow
  2. /etc/hosts.deny

顾名思义,第一个文件包含允许主机的条目,第二个文件包含被阻止主机的地址。

例如,让我们阻止对主机的SSH和FTP访问,该主机的IP地址 192.168.1.100 ,网络范围 192.168.1.0 。这种方法对于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访问的其他方法,请随时在评论部分分享。不要忘记在所有社交网络中分享我们的文章。