当你新开通一台 Linux 服务器时,可以通过如下几点保证安全。
以 Ubuntu 系统为例:
将 root 密码更改为长而复杂的密码。您不需要记住它,只需将其存储在安全的地方。只有在您无法通过 ssh 登录账户 或丢失登录账户的 sudo 密码时才需要此密码。
passwd
# 检索新的软件包列表
apt-get update
# 执行升级
apt-get upgrade
Fail2Ban 可以防止有人反复尝试 SSH 密码登录,但是如果 SSH 采用的是密钥登录,禁止了密码登录,就不需要 Fail2Ban 来保护。
具体参考文档:Fail2Ban 教程
我们一般给服务器配置两个用户:root 和 deploy。deploy 帐户是开发人员登录的帐户,给deploy配置密码、赋予sudo权限。
# 创建用户
$ useradd -m deploy
# 设置用户密码
$ passwd deploy
使用 visudo 命令设置sudo权限,visudo命令是使用vi打开/etc/sudoers
文件,但是在保存退出时,visudo会检查内部语法,避免用户输入错误信息
sudo visudo # 保存时会做语法检查
进入编辑模式,找到这一行:
root ALL=(ALL) ALL
在其下面添加 deploy ALL=(ALL) ALL
,然后保存退出。
为你的帐户使用公钥身份验证,将大大提高账户的安全性和易用性。
没有防火墙,服务器是不安全的。 可以安装 iptables
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -I INPUT 2 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT 3 -p tcp --dport 22 -j ACCEPT
iptables -I INPUT 4 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT 6 -p tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp --dport 6379 -j DROP
iptables -I INPUT 7 -p icmp -m icmp --icmp-type 8 -j ACCEPT
这将设置一个基本防火墙,并将服务器配置为接受端口 80 和 443 上的流量。您可能希望添加更多端口,具体取决于服务器将要执行的操作。
现在一般使用云服务器,可使用云服务器的安全组功能实现防火墙。
多年来,我已经养成了 apt-get update/upgrade
的习惯,但当有十几台服务器时,我发现我登录频率较低的服务器并没有保证及时的更新。特别是对于负载平衡的机器,它们都保持更新是很重要的。虽然自动安全更新让我有些不放心,但服务器存在未修补的安全漏洞会导致更加严重的后果。
apt-get install unattended-upgrades
vim /etc/apt/apt.conf.d/10periodic
将文件修改为如下所示:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
还要编辑一个配置文件:
vim /etc/apt/apt.conf.d/50unattended-upgrades
将文件更新为如下所示。您应该禁用更新仅启用安全更新:
Unattended-Upgrade::Allowed-Origins {
"Ubuntu lucid-security";
// "Ubuntu lucid-updates";
};
Logwatch 是一个监控您的日志并将其通过电子邮件发送给您的守护程序。这对于跟踪和检测入侵很有用。如果有人非法访问您的服务器,通过电子邮件发送给您的日志将有助于确定发生了什么以及何时发生 - 因为您服务器上的异常日志可能已被清除。
apt-get install logwatch
vim /etc/cron.daily/00logwatch
添加这一行:
/usr/sbin/logwatch --output mail --mailto [email protected] --detail high
Linux服务器操作系统上会启用很多面向网络的服务。有些是我们需要的。但是,可能有一些是我们需不要的,最好将其删除。您可以使用ss
命令查看所有正在运行的网络服务:
$ sudo ss -atpu
下面是 ss
输出的一个例子。它显示SSH(Sshd)
和ngnix(Nginx)
服务正在侦听并准备连接:
tcp LISTEN 0 128 *:http *:* users:(("nginx",pid=22563,fd=7))
tcp LISTEN 0 128 *:ssh *:* users:(("sshd",pid=685,fd=3))
要删除Debian/Ubuntu
上未使用的服务:
$ sudo apt purge <service_name>
要删除Red Hat/CentOS
上未使用的服务,请执行以下操作:
$ sudo yum remove <service_name>
[1]
Fail2Ban 教程: //wangmaolin.net/topic/Linux/j3oyj8k9p5[2]
参考文档: //wangmaolin.net/article/qk2vmoep0m.html