Linux 服务器安全技巧

毋庸置疑,对于系统管理员,提升服务器的安全性是最重要的事情之一。所以,也就有了许多针对这个话题而生的文章、博客和论坛帖子。linux

一台服务器由大量功能各异的部件组成,这一点使得很难根据每一个人的需求去提供定制的解决方案。这篇文章尽量涵盖一些有所裨益的小技巧来帮助管理员保证服务器和用户安全。web

有一些常识是每一个系统管理员都应该烂熟于心的,因此下面的几点在本文将不会说起:vim

  • 务必保证系统是最新的安全

  • 常常更换密码 - 使用数字、字母和非字母的符号组合服务器

  • 给予用户最小的权限,知足他们平常使用所需便可网络

  • 只安装那些真正须要的软件包dom

 

下面是一些更有意思的内容:ssh

 

更改SSH默认端口ide

在搭建好一台全新的服务器后要作的第一件事情就是更改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_key

Enter 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

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 no

PasswordAuthentication no

UsePAM no

 

关闭Root登陆

下面关键的一步是关闭root用户的直接访问,而使用sudo或su来执行管理员任务。首先须要添加一个有root权限的新用户,因此编辑这个路径下的sudoers文件:

/etc/sudoers/

推荐使用如visudo这样的命令编辑该文件,由于它会在关闭文件以前检查任何可能出现的语法错误。当你在编辑文件时出错了,这就颇有用了。

接下来赋予某个用户root权限。在本文中,使用用户sysadmin。确保在编辑后这个文件时使用的用户是系统已有的用户。找到下面这行:

root ALL=(ALL) ALL

拷贝这行,而后粘贴在下一行,而后把root更改成“sysadmin”,以下所示:

root ALL=(ALL) ALL

sysadmin 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(Config Server Firewall)这个强力防火墙。它使用了iptables,易于管理,并且对于不擅于输入命令的用户提供了web界面。

要安装CSF,先登陆到服务器,切换到这个目录下:

cd /usr/local/src/

而后以root权限执行下面命令:

wget https://download.configserver.com/csf.tgz

tar -xzf csf.tgz

cd csf

sh install.sh

只需等待安装程序完成,而后编辑CSF的配置文件:

/etc/csf/csf.conf

默认状况下CSF是以测试模式运行。经过将“TESTING”的值设置成0,切换到product模式。

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 2015

103.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 2015

103.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 2015

103.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 2015

109.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

 

小结

这篇文章的目的是涵盖一些通用的安全步骤以便帮助你保护服务器。你能够采起更多方式去加强对服务器的保护。请记住保证服务器安全是你的责任,在维护服务器安全时尽可能作出明智的选择,尽管并无什么容易的方式去完成这件事情,而创建“完善的”安全须要花费大量的时间和测试直到达到想要的结果。

免费领取兄弟连IT教育原创云计算培训视频/细说linux教程,详情咨询官网客服:http://www.lampbrother.net/linux/ 或者勾搭Q2430675018~

欢迎加入linux交流群 478068715

相关文章
相关标签/搜索