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

本教程将向您介绍如何使用iptables,firewalld和tcp包装器阻止对特定IP地址和/或网络范围的SSH和FTP访问

使用IPtables / FirewallD阻止SSH和FTP访问

使用IPtables / FirewallD阻止SSH和FTP访问

通常情况下,我们都使用SSHFTP服务经常来访问远程服务器和虚拟专用服务器。 作为Linux管理员,您必须知道如何在Linux中阻止SSH和FTP访问特定的IP或网络范围,以便进一步收紧安全位。

  1. 25加强Linux服务器的安全提示
  2. 5安全和保护SSH服务器的有用提示

本教程将向您介绍如何阻止对CentOS 6和7服务器中的特定IP地址和/或网络范围的SSH和FTP访问。 本指南是在CentOS 6.x中7.x版本测试,但它会在其它Linux版本比如Debian,Ubuntu和SUSE / openSUSE的可能等工作

我们将使用两种方法。 第一种方法是/ firewallD,第二种方法是使用TCP封装的hosts.allow与和hosts.deny文件的帮助下使用IPTables的

参考以下指南了解更多关于IPTables和防火墙。

  1. IPTables基本指南(Linux防火墙)提示/命令
  2. 如何设置Iptables防火墙以在Linux中启用远程访问服务
  3. 如何在RHEL / CentOS 7和Fedora 21中配置“FirewallD”
  4. 在Linux中配置和管理防火墙的有用的“FirewallD”规则

现在你知道什么是iptablesFirewallD,它的基础知识。

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

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

阻止或禁用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默认的端口是2021。 因此,要使用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 HowToing FTP service.
Name (192.168.1.150:sk): howtoing
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

方法2:阻止使用TCP Wrapper的SSH和FTP访问

如果你不想使用iptablesFirewallD一塌糊涂,那么TCP封装是更好的方法来阻止SSH和FTP访问特定的IP和/或一定范围内的网络。

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

  1. /etc/hosts.allow
  2. /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访问,请随意分享在评论部分。 不要忘记在所有社交网络中分享我们的文章。