不用说,对于系统管理员来说,提高服务器安全性是最重要的事情之一。 因此,有许多文章、博客和论坛帖子专门讨论这个主题。
服务器由大量具有不同功能的组件组成,这使得很难根据每个人的需求提供定制的解决方案。 本文试图介绍一些有用的提示,以帮助管理员确保服务器和用户的安全。
有一些常识是每个系统管理员都应该熟悉的,因此本文不会提及以下几点:
这里有一些更有趣的:
设置新服务器后要做的第一件事是更改 SSH 的默认端口。 这个小小的改变就可以保护你的服务器免受数以千计的暴力攻击(LCTT译注:不改变默认端口就相当于黑客知道了你的门牌号织梦管理密码更改,所以他们只需要一一尝试钥匙,就可能打开你家的锁) )。
要更改默认 SSH 端口,请首先打开 sshd_config 文件:
sudo vim /etc/ssh/sshd_config
找到以下行:
#Port 22
“#”号表示该行是注释。 首先删除#号,然后将端口号更改为目的端口。 端口号不能超过65535。请确保指定的端口号未被系统或其他服务占用。 建议查看[维基百科]上的常用端口号列表。 在本文中,使用此端口号:
Port 16543
然后保存并关闭文件并等待更改生效。
接下来的步骤是:
使用 SSH 密钥进行身份验证
通过 SSH 访问服务器时,使用 SSH 密钥进行身份验证尤为重要。 这样做为服务器增加了额外的保护级别,确保只有拥有密钥的人才能访问服务器。
在本地计算机上运行以下命令来生成 SSH 密钥:
ssh-keygen -t rsa
您将看到以下输出,询问将密钥写入文件的位置并设置密码:
Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): my_keyEnter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in my_key.Your public key has been saved in my_key.pub.The key fingerprint is:SHA256:MqD/pzzTRsCjZb6mpfjyrr5v1pJLBcgprR5tjNoI20A
完成后,你会得到两个文件:
我的钥匙
my_key.pub
接下来将 my_key.pub 复制到 ~/.ssh/authorized_key
cp my_key.pub ~/.ssh/authorized_keys
然后使用以下命令将密钥上传到服务器:
scp -P16543 authorized_keys user@yourserver-ip:/home/user/.ssh/
此时,您可以从本机访问服务器,而无需密码。
关闭SSH密码验证
现在您已经有了 SSH 密钥,关闭 SSH 的密码验证会更安全。 再次打开并编辑sshd_config,设置如下:
ChallengeResponseAuthentication noPasswordAuthentication noUsePAM no
关闭root登录
下一个关键步骤是关闭 root 用户的直接访问并使用 sudo 或 su 执行管理员任务。 首先,您需要添加一个具有root权限的新用户,因此编辑此路径中的sudoers文件:
/etc/sudoers/
建议使用 visudo 等命令编辑文件,因为它会在关闭文件之前检查任何可能的语法错误。 当您在编辑文件时出错时,这非常有用。
接下来,向用户授予 root 权限。 在本文中,使用用户sysadmin。 确保编辑此文件时使用的用户是系统上的现有用户。 找到以下行:
root ALL=(ALL) ALL
复制此行并将其粘贴到下一行,然后将 root 更改为“sysadmin”,如下所示:
root ALL=(ALL) ALLsysadmin ALL=(ALL) ALL
现在解释一下这一行中每个选项的含义:
(1) root (2)ALL=(3)(ALL) (4)ALL
(1) 指定用户
(2)指定用户使用sudo的终端
(3) 指定用户可以承担的用户角色
(4) 该用户可以使用的命令
(LCTT译注:所以上述配置的意思是:root用户可以在任何终端中充当任何用户,执行任何命令。)
使用此配置可以让用户访问某些系统工具。
此时,您可以安全地保存文件。
为了关闭通过 SSH 对 root 的直接访问,需要再次打开 sshd_config 并找到以下行:
#PermitRootLogin yes
改成:
PermitRootLogin no
然后保存文件并重新启动 sshd 守护进程以使更改生效。 只需执行以下命令:
sudo /etc/init.d/sshd restart
设置防火墙
防火墙有助于过滤传入和传出端口并阻止暴力登录尝试。 我倾向于使用SCF(配置服务器防火墙),一个强大的防火墙。 它使用iptables,易于管理,并为不擅长输入命令的用户提供Web界面。
要安装CSF,首先登录服务器并切换到该目录:
cd /usr/local/src/
然后以root权限执行以下命令:
wget https://download.configserver.com/csf.tgztar -xzf csf.tgzcd csfsh install.sh
只需等待安装程序完成,然后编辑 CSF 的配置文件:
/etc/csf/csf.conf
默认情况下,CSF 在测试模式下运行。 通过将“TESTING”值设置为 0 切换到产品模式。
TESTING = 0
接下来要设置的是服务器上允许的端口。 在 csf.conf 中找到以下部分并根据需要修改端口:
# 允许入站的 TCP 端口TCP_IN = 20,21,25,53,80,110,143,443,465,587,993,995,16543# 允许出站的 TCP 端口TCP_OUT = 20,21,22,25,53,80,110,113,443,587,993,995,16543# 允许入站的 UDP 端口UDP_IN = 20,21,53# 允许出站的 UDP 端口# 要允许发出 traceroute 请求,请加 33434:33523 端口范围到该列表 UDP_OUT = 20,21,53,113,123
请根据您的需要一一设置。 建议仅使用所需的端口,并避免设置较大范围的端口。 另外,避免使用不安全的端口来提供不安全的服务。 例如,仅允许使用端口 465 和 587 发送电子邮件,而不是默认的 SMTP 端口 25。(LCTT 翻译注释:前提是您的邮件服务器支持 SMTPS)
重要提示:不要忘记允许自定义 ssh 端口。
允许您的 IP 地址通过防火墙并且永远不会被阻止非常重要。 IP 地址在以下文件中定义:
/etc/csf/csf.ignore
被阻止的 IP 地址将出现在该文件中:
/etc/csf/csf.deny
进行更改后,使用以下命令重新启动 csf:
sudo /etc/init.d/csf restart
以下是服务器上 csf.deny 文件的一部分,用于说明 CSF 的有用性:
211.216.48.205 # lfd: (sshd) Failed SSH login from 211.216.48.205 (KR/Korea, Republic of/-): 5 in the last 3600 secs - Fri Mar 6 00:30:35 2015103.41.124.53 # lfd: (sshd) Failed SSH login from 103.41.124.53 (HK/Hong Kong/-): 5 in the last 3600 secs - Fri Mar 6 01:06:46 2015103.41.124.42 # lfd: (sshd) Failed SSH login from 103.41.124.42 (HK/Hong Kong/-): 5 in the last 3600 secs - Fri Mar 6 01:59:04 2015103.41.124.26 # lfd: (sshd) Failed SSH login from 103.41.124.26 (HK/Hong Kong/-): 5 in the last 3600 secs - Fri Mar 6 02:48:26 2015109.169.74.58 # lfd: (sshd) Failed SSH login from 109.169.74.58 (GB/United Kingdom/mail2.algeos.com): 5 in the last 3600 secs - Fri Mar 6 03:49:03 2015
可以看到,尝试通过暴力方式登录的IP地址都被拦截了。 真是眼不见心不烦啊!
锁定账户
如果帐户长时间不使用,可以锁定该帐户以防止其他人访问它。 使用以下命令:
passwd -l accountName
当然,这个账户仍然可以被root用户使用(LCTT注释:su可以用来切换到这个账户)。
了解服务器上的服务
服务器的本质是提供各种服务的访问功能。 让服务器只运行需要的服务并关闭不使用的服务。 这样做不仅可以释放一些系统资源织梦管理密码更改,而且还可以使服务器更加安全。 例如,如果您只是运行一个简单的服务器,那么您显然不需要 X 显示或桌面环境。 如果您不需要Windows网络共享功能,您可以安全地关闭Samba。
使用以下命令查看随系统启动而启动的服务:
chkconfig --list | grep 3:on
如果系统正在运行 systemd,请执行以下命令:
systemctl list-unit-files --type=service | grep enabled
然后使用以下命令关闭该服务:
chkconfig service off或systemctl disable service
在上面的示例中,将“service”替换为您实际要停止的服务的名称。 示例如下:
chkconfig httpd off或systemctl disable httpd
概括
本文的目的是介绍一些常见的安全步骤,以帮助您保护服务器。 您还可以采取更多措施来增强服务器保护。 请记住,保持服务器安全是您的责任,并在维护服务器安全时尝试做出明智的选择,尽管没有简单的方法可以做到这一点,并且构建“完美”的安全性需要大量时间和测试。 直到达到想要的结果。
通过:原文
作者:Marin Todorow 译者:KayGuoWhu 校对:wxy
本文由 LCTT 原创翻译,Linux China 自豪推出