SSH (Secure Shell)
目录
SSH 安全性:使用 sshd_config 文件
通过 IP 地址限制 SSH 访问的最简单方法之一是修改 sshd_config 文件,该文件控制 SSH 服务器设置。
这是如何做到的:
在文本编辑器中打开 sshd_config 文件:
vi /etc/ssh/sshd_config
找到 #PermitRootLogin yes
的行,并在其下方添加以下行:
AllowUsers username@ip_address
将 username
替换为要允许访问的用户的用户名,将 ip_address
替换为要允许访问的计算机的 IP 地址。您可以添加多个 IP 地址,以空格分隔。
保存并退出文件。然后重新启动 SSH 服务:
systemctl restart sshd
现在,只有指定的用户才能从指定的 IP 地址通过 SSH 访问服务器。
SSH 安全性:使用 TCP 包装器
通过 IP 地址限制 SSH 访问的另一种方法是使用 TCP 包装器。TCP 包装程序是一种访问控制机制,它使用 /etc/hosts.allow
和 /etc/hosts.deny
文件中的规则来允许或拒绝对网络服务的访问。
以下是使用 TCP 包装器限制 SSH 访问的方法:
在文本编辑器中打开 /etc/hosts.allow
文件:
vi /etc/hosts.allow
将以下行添加到文件中:
sshd: IP_address
将 IP_address
替换为要允许访问的计算机的 IP 地址。
然后在文本编辑器中打开 /etc/hosts.deny 文件
:
vi /etc/hosts.deny
将以下行添加到文件中:
sshd: ALL
此行将拒绝对所有其他 IP 地址的访问。
保存并退出文件。然后重新启动 SSH 服务:
systemctl restart sshd
现在,只有指定的 IP 地址才能通过 SSH 访问服务器。
SSH 安全:使用防火墙规则
最后,您还可以使用防火墙规则来限制 IP 地址的 SSH 访问。
使用 iptables
以下是使用 iptables(一种流行的防火墙工具)来限制 SSH 访问的方法:
创建新的 iptables 链以允许来自特定 IP 地址的 SSH 流量:
iptables -N SSHALLOW
iptables -A SSHALLOW -s IP_address -p tcp --dport ssh -j ACCEPT
iptables -A SSHALLOW -j DROP
将“IP_address”替换为您要允许访问的计算机的 IP 地址。
保存 iptables 规则:
service iptables save
要在更改防火墙规则后重新加载 iptables 服务,您可以使用以下命令:
sudo service iptables reload
此命令将重新加载 iptables 规则,而不会中断任何活动的 SSH 连接。
要了解有关使用 iptables 的更多信息,您可以参考官方文档:https://netfilter.org/documentation/
使用 ufw
如果您在服务器上使用 Uncomplicated Firewall (UFW),您仍然可以使用相同的方法通过 IP 地址限制 SSH 访问。
例如,要允许来自特定 IP 地址的 SSH 访问,您可以使用以下命令:
sudo ufw allow from [IP_address] to any port ssh
将 [IP_address]
替换为要允许访问的计算机的 IP 地址。注意:请参阅下面关于使用非标准端口的信息。尽可能避免使用帖子 22。
要拒绝来自所有其他 IP 地址的 SSH 访问,您可以使用以下命令:
sudo ufw default deny incoming
要在更改防火墙规则后重新加载 UFW,可以使用以下命令:
sudo ufw reload
要了解有关使用 UFW 的更多信息,您可以参考官方文档:https://help.ubuntu.com/community/UFW。
使用 firewalld
如果您使用 firewalld 作为防火墙,您仍然可以使用相同的方法通过 IP 地址限制 SSH 访问。
例如,要允许来自特定 IP 地址的 SSH 访问,您可以使用以下命令:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="[IP_address]" port protocol="tcp" port="ssh" accept'
将 [IP_address]
替换为要允许访问的计算机的 IP 地址。
要拒绝来自所有其他 IP 地址的 SSH 访问,您可以使用以下命令:
sudo firewall-cmd --permanent --zone=public --remove-service=ssh
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="! [IP_address]" service name="ssh" reject'
将 [IP_address]
替换为要允许访问的计算机的 IP 地址。
要在进行更改后重新加载 firewalld 服务,请使用以下命令:
sudo firewall-cmd --reload
此命令将重新加载 firewalld 规则,而不会中断任何活动的 SSH 连接。
要了解有关使用 firewalld 的更多信息,您可以参考官方文档:https://firewalld.org/documentation/。
SSH 安全强化最佳实践
一次显示所有 fail2ban jail。请看这里。
虽然通过 IP 地址限制 SSH 访问是一种有效的安全措施,但这并不是您应该采取的唯一步骤来保护您的 SSH 服务器。以下是一些其他通用的 SSH 安全强化技巧:
使用非标准端口
默认情况下,SSH 侦听端口 22。攻击者经常扫描开放端口并试图利用 SSH 中的漏洞来获得未经授权的访问。将默认端口更改为非标准端口可能会使攻击者更难找到您的 SSH 服务器。但是,请记住,这不是万无一失的安全措施,坚定的攻击者仍然可以绕过。
要更改 SSH 端口,请编辑 sshd_config 文件:
vi /etc/ssh/sshd_config
找到显示“端口 22”的行,并将其更改为其他端口号。我不建议使用端口 2222 – 也很常见。我会建议一些端口,但那会适得其反。只需确保您选择的任何新端口尚未被其他服务或协议使用。请记住在防火墙配置中删除端口 22 访问权限。
通常建议选择 1024 到 65535 范围内的端口号,因为 1 到 1023 之间的端口是众所周知的,并且经常被系统服务使用。请务必注意,虽然使用非标准 SSH 端口会使攻击者更难找到您的服务器,但它并非万无一失的安全措施,坚定的攻击者仍然可以绕过它。
使用 SSH 密钥而不是密码
使用 SSH 密钥而不是密码可以进一步增强 SSH 服务器的安全性。SSH 密钥是公钥加密的一种形式,其中公钥用于加密数据,私钥用于解密数据。使用 SSH 密钥,无需通过网络传输密码,攻击者可能会拦截密码。
要使用 SSH 密钥,您需要在本地计算机上生成密钥对,并将公钥复制到服务器。然后,您可以将 SSH 服务器配置为仅允许来自提供有效私钥的客户端的 SSH 连接。这可以通过修改 sshd_config 文件来完成:
vi /etc/ssh/sshd_config
找到 #PubkeyAuthentication yes
的行并取消注释:
PubkeyAuthentication yes
保存并退出文件,然后重新启动 SSH 服务:
systemctl restart sshd
禁用 root 登录
默认情况下,SSH 允许 root 登录,这可能会带来安全风险。攻击者经常试图猜测 root 密码,如果成功,他们就可以获得对您的服务器的完全访问权限。为了降低这种风险,建议禁用 root 登录并改用常规用户帐户。
要禁用 root 登录,请编辑 sshd_config 文件:
vi /etc/ssh/sshd_config
找到 #PermitRootLogin yes
的行并将其更改为:
PermitRootLogin no
保存并退出文件,然后重新启动 SSH 服务:
systemctl restart sshd
使用 Fail2ban
Fail2ban 是一种流行的工具,可扫描日志文件并禁止显示恶意行为(例如重复失败的登录尝试)的 IP 地址。通过使用 fail2ban,您可以保护您的 SSH 服务器免受暴力攻击和其他类型的依赖于猜测密码的攻击。
默认情况下,fail2ban 附带一个 SSH 配置文件。但是,您可能需要调整设置以匹配您的特定设置。
如果您对涵盖服务器上 Fail2ban 安装和配置的单独文章感兴趣,请随时在下面的部分发表评论。
结论
总之,使用 Fail2ban 等工具保护您的服务器并配置 SSH 服务器设置以限制按 IP 地址访问是保护您的系统免受暴力攻击和其他安全威胁的重要步骤。随着网络攻击以惊人的速度增长,确保您的服务器安全并遵循服务器管理的最佳实践比以往任何时候都更加重要。
请记住,服务器安全是一个持续的过程,需要持续的努力和关注。通过将安全性放在首位并采取措施保护您的服务器,您可以降低安全漏洞的风险并确保系统的持续运行。
端口敲击是一种用于保护服务器免受未经授权的访问的安全功能。它涉及通过按特定顺序 “敲” 预定义的端口序列来按需打开端口。
以下是在 Ubuntu 上设置端口敲击的方法:
安装 Knockd 守护程序:
sudo apt update && sudo apt install knockd
配置 Knockd:编辑 Knockd 配置文件:
须藤 vi /etc/knockd.conf
定义端口序列和要执行的命令。例如:
[options]
UseSyslog
[openSSH]
sequence = 1000,2000,3000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport xxxx -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 3000,2000,1000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport xxxx -j ACCEPT
tcpflags = syn
在此示例中:
openSSH
:当序列1000,2000,3000
被敲定时,打开 SSH 端口(将xxxx
替换为您的 SSH 端口)。closeSSH
:当反向序列3000,2000,1000
被敲定时关闭 SSH 端口。
启动 Knockd 守护程序:
sudo systemctl enable knockd sudo systemctl start knockd
就是这样!在将配置部署到生产环境之前,请务必对其进行全面测试。