linux服务器安全最佳实践
在拿到一台初始化的的linux服务的第一时候,你就应该为他台服务器配置相关的安全设置。养成好的习惯,因为这可能帮你减少因为黑客攻击带来的巨额度损失。精密的配置的服务器难以攻破,会让黑可放弃攻击你的服务器。
用户管理
linux系统会默认创建第一个用户–root。这个用户应该被禁止使用ssh远程登录服务器。禁止root会让黑客更难攻破你的服务器。如果黑客知道root能够登录,就相当于得到攻破服务器的一半的信息,这就为暴力破解减少一半的计算量。我们一般创建一个单独的用户来配置系统,如果需要权限,那么就使用sudo
来获取root权限,而不是直接使用root账户。
密码强度设置
在你创建用户的时候,你必须确保你的密码有足够的长度和字符,这样会比较难攻破一点。
- 密码长度尽量在12位以上
- 密码尽量包含,大写字母,小写字母,数字,特殊字符
- 尽量使用随机密码工具来生成密码
- 密码不要使用连续或者重复的数字,字母
- 密码中不要包含个人信息
- 不要使用简单的单词来组合密码
添加用户(Debian 和 Ubuntu)
- 创建用户,设置密码
adduser {username}
- 如果这个用户是的主要运维用户,那么可以给他添加root权限
visudo
添加如下配置
{usernamd} ALL=(ALL:ALL) ALL
- 测试一些以上配置是否正确
su {username}
sudo iptables -L
当你执行以上两条命令之一的时候,系统会要求你输入当前用户的密码。
创建ssh秘钥对
- 比密码登录更加安全的方式是使用秘钥登录,执行如下命令创建秘钥:
ssh-genkey -b 4096 -t rsa
会要求你输入保存秘钥的文件,直接使用默认文件名即可,如果要更加安全,你可以给你的秘钥添加一个访问密码。创建文件了秘钥以后,```$HOME/.ssh文件夹下会生成两个文件,
id_rsa和
id_rsa.pub`文件。
- 在你生成好了秘钥以后,你需要将之前生成的公钥上传到你的远程服务器上
务必要注意,是上传公钥到服务器上,而不是上传私钥到服务器上.
ssh-copy-id -i ~/.ssh/id_rsa.pub {username}@{remotePublicIPAddress}
这行命令会提示你输入密码,在输入密码结束以后,你可以尝试ssh {username}@{remotePublicIPAddress}
来登录服务器,如果一切正常,系统将不会要求你输入密码。
ssh服务端配置
现在你已经禁止了root登录,并且创建了运维专用的账号,你可以配置ssh daemon来提高服务器的安全系数了。
在你更改ssh daemon的配置的时候,你务必要确认更改配置之后你还能访问服务器,最好的是提前通知系统管理员。
ssh 配置项
这里将会介绍一些常用的ssh相关安全配置,如果你想要更加详细的说明,推荐你查阅openssh的官方文档
这一小节将包含如下信息:
Port xxx
ssh默认端口配置(默认22端口)PubkeyAuthentication
允许或者禁止秘钥登录服务器PasswordAuthentication
允许或者禁止密码登录服务器
众所周知,ssh 默认监听22端口,所以黑客都会尝试使用用户和密码爆破22端口,因为这个原因,所以你应该修改ssh服务的端口号。修改端口号不会保证服务器绝对安全,但是能够抵御所有对22端口的攻击。
登录服务器有两种方法,一种是密码的登录,另一种是秘钥登录,秘钥是成对生成,他们只能结合使用,私钥被存储在你本地的计算机上,为了保证安全,你的私钥永远都不因该改分享给他人,公钥存储你的远程服务器上。
修改sshd_config
上面说过,你应该禁止root登录,创建运维账户,为运维账户添加sudo权限,修改ssh的端口号,禁止密码登录服务器。下面我将演示如何配置:
- 打开openssh的配置文件
sudo vi /etc/ssh/sshd_config
- 更改以下几行的默认值
Port 22 > Port 9001
PermitRootLogin yes > PermitRootLogin no
PasswordAuthentication yes > PasswordAuthentication no
把9001改成你想设置的端口号。 3. 修改完sshd的配置以后,测试一下是否配置正确
sshd -t
修改完了配置以后,修改防火墙支配,放开9001端口,重启sshd服务。
- 检查防火墙时候开启,ubuntu默认是没有限制的,centos和Red Hat则有。如下表示所有端口都开放:
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
- 通过如下命令能够再开放一个新的端口
sudo iptables -I INPUT -p tcp --dport 9001 -m state --state NEW,ESTABLISHED -j ACCEPT
将9001端口换成你想要的端口。如果你在Red Hat 5或者CentOS 5s上,则使用如下命令:
sudo iptables -I INPUT -p tcp --dport 9001 -m state --state NEW,ESTABLISHED -j ACCEPT
- 重启sshd服务
sudo service ssh restart
- 如何你在此需要访问远程主机,你需要使用
ssh -p 9001
来指定端口号,使用-i
选项来指定私钥文件
ssh -p 9001 -i ~/.ssh/id_rsa {username}@{remotePublicIPAddress}