Linux 服务器安全技巧

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

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

有一些常识是每个系统管理员都应该烂熟于心的,所以下面的几点在本文将不会提及:

  • 务必保证系统是最新的
  • 经常更换密码 - 使用数字、字母和非字母的符号组合
  • 给予用户最小的权限,满足他们日常使用所需即可
  • 只安装那些真正需要的软件包

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

更改SSH默认端口

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

小结

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



via: 原文

作者:Marin Todorow 译者:KayGuoWhu 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

(0)

相关推荐

  • Linux 服务器安全技巧

    毋庸置疑,对于系统管理员,提高服务器的安全性是最重要的事情之一.因此,也就有了许多针对这个话题而生的文章.博客和论坛帖子. 一台服务器由大量功能各异的部件组成,这一点使得很难根据每个人的需求去提供定制的解决方案.这篇文章尽可能涵盖一些有所裨益的小技巧来帮助管理员保证服务器和用户安全. 有一些常识是每个系统管理员都应该烂熟于心的,所以下面的几点在本文将不会提及: 务必保证系统是最新的 经常更换密码 - 使用数字.字母和非字母的符号组合 给予用户最小的权限,满足他们日常使用所需即可 只安装那些真正需

  • 值得收藏的20个Linux服务器性能优化技巧

    Linux是一种开源操作系统,它支持各种硬件平台,Linux服务器全球知名,它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要目的是高效处理非交互式进程,响应时间并不是那么重要,相反,能够长时间处理高负载才是最关键的.Linux高可用服务器集群解决方案让IT系统管理员可以从容应对许多常见的硬件和软件故障,允许多台计算机一起工作,为关键服务正常运行提供保障,系统管理员可以不中断服务执行维护和升级. Linux服务器有各种用途

  • scp 将数据从一台linux服务器复制到另一台linux服务器

    scp 是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且 scp传输是加密的.可能会稍微影响一下速度.当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来.另 外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了.虽然 rsync比scp会快一点,但当小文件众多的情况 下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用.

  • 使用ntpdate工具校正linux服务器时间(实现方法)

    当Linux服务器的时间不对的时候,可以使用ntpdate工具来校正时间. 安装:yum install ntpdate ntpdate简单用法: # ntpdate ip # ntpdate 210.72.145.44 以下是一些可用的NTP服务器地址: Name IP Location 210.72.145.44 210.72.145.44 中国(国家授时中心) 133.100.11.8 133.100.11.8 日本(福冈大学) time-a.nist.gov 129.6.15.28 NI

  • 确保Linux服务器安全 防范四种级别攻击

    随着Linux企业应用的不断扩展. 有大量的网络服务器都在使用Linux操作系统.Linux服务器的安全性能受到越来越多的关注. 这里根据Linux服务器受到攻击的深度以级别形式列出,并提出不同的解决方案. 随着Linux企业应用的扩展,有大量的网络服务器使用Linux操作系统.Linux服务器的安全性能受到越来越多的关注,这里根据Linux服务器受到攻击的深度以级别形式列出,并提出不同的解决方案. 对Linux服务器攻击的定义是:攻击是一种旨在妨碍.损害.削弱.破坏Linux服务器安全的未授权

  • Linux 服务器分区及挂载

    Linux 服务器分区及挂载 第一步:创建目录 //创建目录 mkdir /uardata1 mkdir /uardata2 mkdir /uardata3 mkdir /uardata4 mkdir /uardata5 mkdir /uardata6 mkdir /uardata7 mkdir /uardata8 mkdir /uardata9 mkdir /uardata10 第二步: 创建分区 echo 'y'|mkfs.ext4 /dev/sdb & echo 'y'|mkfs.ext4

  • linux服务器下PHPCMS v9 安全配置详解

    一.目录权限设置很重要:可以有效防范黑客上传木马文件. 如果通过 chmod 644 * -R 的话,php文件就没有权限访问了. 如果通过chmod 755 * -R 的话,php文件的权限就高了. 所以就需要分开设置目录权限和文件权限: linux 服务器权限:经常要用到的命令: find /path -type f -exec chmod 644 {} \; //设置文件权限为644 find /path -type d -exec chmod 755 {} \; //设置目录权限为755

  • 在linux服务器上安装Jenkins

    Jenkins是用java编写的开源持续集成工具,目前被国内外各公司广泛使用.本章教大家如何在linux服务器上安装Jenkins. 一.获得一台linux服务器 要在linux下安装git,首先你得先有一台linux服务器,作为小白,手头的机器肯定都是windows的,搞个虚拟机安装对我这种小白简直是折磨人:这里使用最简单的方式获得一台linux服务器,就是从阿里云上租一台.镜像选择CentOS7.3 64位. 二.安装jdk Jenkins的运行需要依赖jdk,所以在安装Jenkins之前我

  • 探讨如何减少Linux服务器TIME_WAIT过多的问题

    TIME_WAIT状态的意义: 客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口状态为TIME_WAIT是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢?有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?主动关闭的一方在发送最后一个 ack 后就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间,这个是TCP/IP必不可少的,也就是"解决"不了的.也就是TCP/IP设计者本来是这

  • Windwos下使用winscp和批处理实现通过SSH端口上传文件到Linux服务器上

    Windwos下使用winscp和批处理实现通过SSH端口上传文件到Linux服务器上 今天同事想在windows上使用winscp上传文件到linux服务器上,又想偷懒想使用批处理来进行上传,还好只固定上传一个php文件,多了还真不好搞. 1.下载winscp 大家可以去网上自己找,我把winscp安装在c:下的 2.把要执行的命令保存到文件winscp.bat里,这个winscp.bat可以自己创建,我是放在d:下的. winscp.bat脚本内容: 复制代码 代码如下: option co

随机推荐