使用IPtables / FirewallD阻止SSH和FTP访问
通常情况下,我们都使用SSH和FTP服务经常来访问远程服务器和虚拟专用服务器。 作为Linux管理员,您必须知道如何在Linux中阻止SSH和FTP访问特定的IP或网络范围,以便进一步收紧安全位。
本教程将向您介绍如何阻止对CentOS 6和7服务器中的特定IP地址和/或网络范围的SSH和FTP访问。 本指南是在CentOS 6.x中和7.x版本测试,但它会在其它Linux版本比如Debian,Ubuntu和SUSE / openSUSE的可能等工作
我们将使用两种方法。 第一种方法是/ firewallD,第二种方法是使用TCP封装的hosts.allow与和hosts.deny文件的帮助下使用IPTables的 。
参考以下指南了解更多关于IPTables和防火墙。
- IPTables基本指南(Linux防火墙)提示/命令
- 如何设置Iptables防火墙以在Linux中启用远程访问服务
- 如何在RHEL / CentOS 7和Fedora 21中配置“FirewallD”
- 在Linux中配置和管理防火墙的有用的“FirewallD”规则
现在你知道什么是iptables和FirewallD,它的基础知识。
方法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默认的端口是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 youcl FTP service. Name (192.168.1.150:sk): youcl 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访问
如果你不想使用iptables或FirewallD一塌糊涂,那么TCP封装是更好的方法来阻止SSH和FTP访问特定的IP和/或一定范围内的网络。
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访问,请随意分享在评论部分。 不要忘记在所有社交网络中分享我们的文章。