如何在Ubuntu Linux上使用ufw限制SSH(TCP端口22)连接

时间:2020-01-09 10:40:24  来源:igfitidea点击:

如何在Ubuntu或Debian Linux服务器上使用UFW(不复杂的防火墙)限制ssh连接尝试?

UFW表示不复杂的防火墙(Uncomplicated Firewall) 。
它是Ubuntu上的默认防火墙。
但是,可以在其他Linux发行版上安装ufw。
例如Arch Linux,Debian,CentOS等。
换句话说,ufw只是用于管理Netfilter防火墙的前端。
它提供了一个命令行界面,旨在使开发人员和新Linux用户变得简单易用。
让我们看看如何在Ubuntu或Debian Linux上限制与ufw的SSH连接。

UFW的速率限制

您可以添加限制规则。
当前仅支持IPv4(Internet协议版本4)。
使用此语法,您可以拒绝来自最近30秒内尝试启动6个或更多连接的IP地址的连接。
此选项对于sshd之类的服务非常有用,因为它们是由僵尸程序和其他不良行为者攻击的。
因此,我们使用防火墙来保护服务器免受暴力攻击。

限制与ufw的SSH(TCP端口22)连接的语法

语法非常简单:

## ufw limit ssh various usage ##
ufw limit ssh
 
ufw limit ssh/tcp
 
ufw limit ssh comment 'Rate limit for openssh server'
 
### if sshd is running on tcp port 2022 add ####
ufw limit 2022/tcp comment 'SSH port rate limit'

上述规则对于防止暴力登录攻击很有用。
使用限制规则时,ufw通常将允许连接,但是如果IP地址尝试在30秒内启动六个或更多连接,则ufw将拒绝连接。
设置完成后,您可以使用以下命令进行验证:

$ sudo ufw limit ssh/tcp comment 'Rate limit for openssh serer'
$ sudo ufw status

输出示例:

Status: active

To                         Action      From
--                         ------      ---
22/tcp                     LIMIT       Anywhere                   # Rate limit for openssh serer
22/tcp (v6)                LIMIT       Anywhere (v6)              # Rate limit for openssh serer

iptables中的实际规则如下:

-A ufw-user-input -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name DEFAULT --mask 255.255.255.255 --rsource
-A ufw-user-input -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 --name DEFAULT --mask 255.255.255.255 --rsource -j ufw-user-limit
-A ufw-user-input -p tcp -m tcp --dport 22 -j ufw-user-limit-accept

请注意,新的ssh规则将取代以前的ssh规则。
您也可以限制其他服务:

ufw limit {service}
## be careful with http/https limits as many users might be behind a large proxy server ##
ufw limit 25/tcp
ufw limit http
ufw limit https