如何让你的Linux云服务器更加的安全?
一台服务器由大量功能各异的部件组成,这一点使得很难根据每个人的需求去提供定制的解决方案。这篇文章尽可能涵盖一些有所裨益的小技巧来帮助管理员保证服务器和用户安全。
有一些常识是每个系统管理员都应该烂熟于心的,所以下面的几点在本文将不会提及:
务必保证系统是最新的
经常更换密码 - 使用数字、字母和非字母的符号组合
给予用户最小的权限,满足他们日常使用所需即可
只安装那些真正需要的软件包
下面是一些更有意思的内容:
更改SSH默认端口
在搭建好一台全新的服务器后要做的第一件事情就是更改SSH的默认端口。这个小小的改动能够使你的服务器避免受到成千上万的暴力攻击(LCTT 译注:不更改默认端口相当于黑客们知道你家的门牌号,这样他们只需要一把一把的试钥匙就可能打开你家的锁)。云服务器常用端口可以参考这篇文档。
要更改默认的SSH端口,先打开sshd_config文件:
sudo vim /etc/ssh/sshd_config
找到下面这行:
#Port 22
“#”号表示这行是注释。首先删除#号,然后把端口号改成目的端口。端口号不能超过65535,确保要指定的端口号没有被系统或其它服务占用。建议在[维基百科]上查看常用端口号列表。在本文中,使用这个端口号:
Port 16543
然后保存并关闭文件。
接下来的一步是:
使用SSH密钥认证
在通过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
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(Config Server Firewall)这个强力防火墙。它使用了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,切换到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 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
小结
这篇文章的目的是涵盖一些通用的安全步骤以便帮助你保护服务器。你可以采取更多方式去增强对服务器的保护。请记住保证服务器安全是你的责任,在维护服务器安全时尽量做出明智的选择,尽管并没有什么容易的方式去完成这件事情,而建立“完善的”安全需要花费大量的时间和测试直到达到想要的结果。
如何让你的Linux云服务器更加的安全?相关推荐
- linux服务器数据转发,Linux云服务器如何使用iptables做流量转发?
在云服务器的日常使用过程中,从老服务器迁移数据到新服务器是不可避免的一项运维操作.在新老服务器交替的迁移过程中,由于域名解析生效需要一段时间,难免出现部分流量仍然请求到老服务器上的情况,造成数据出现衔 ...
- 巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!
巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力! 一.什么是tmpfs和/dev/shm/? tmpfs是Linux/Unix系统上的一种基于内存的文件系统.tmpfs可以使用您的 ...
- xshell6保持连接_使用Xshell6+Xftp6连接Linux云服务器(图文教程)
许多新手第一次买了Linux云服务器都不知道该怎样使用,尤其是没有接触过linux的朋友对命令行界面几乎不了解,今天就记录下使用xshell连接linux服务器的过程. 下载Xshell和Xftp 关 ...
- linux服务器查询vdc等等,Linux云服务器
Linux 云服务器分区.格式化.挂载数据盘 在控制台创建和挂载云硬盘后,需要将数据盘格式化并挂载到云服务器. Attention 格式化后数据将被清空,请确保数据盘中没有数据或已保留备份: 已格式化 ...
- linux扩充单个路径下的内存,超详尽!Linux云服务器存储扩容实操
导语 | 随着业务的发展,业务数据不停的增长,原有的磁盘空间可能会出现磁盘空间不够用的情况,因此,需要对磁盘空间进行扩容,以满足业务数据增长的需求.本文总结了Linux环境下云服务器存储扩容的三种方式 ...
- 拉取ftp服务器上的文件_winscp和云服务器,2步实现winscp将文件上传到腾讯云Linux云服务器...
WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议,它的主要功能就是在本地与远程计算机间安全的复制文件.与使用FTP上传代码相比,通过WinSCP可以直接使 ...
- Mac/Linux/Centos终端中上传文件到Linux云服务器
Mac/Linux/Centos终端中上传文件到Linux云服务器 1.mac上传文件到Linux服务器 scp 文件名 用户名@服务器ip:目标路径如:scp /Users/test/testFil ...
- linux开启ping服务,Linux 云服务器禁止和开启Ping
原标题:Linux 云服务器禁止和开启Ping 在使用Linux服务器的时候,一般系统默认是开启ping的,比如我们可以ping测试网络的延迟质量.当然也有部分服务商是可以通过安全组设置禁止ping的 ...
- linux云服务器状态上报解决方案:外发个人邮箱
linux云服务器状态上报解决方案:外发个人邮箱 需求如下: #### 将一些服务器的关键日志实时发送到手机上 一些案例: CPU状态检测 解决方案: #### 利用mailx命令外发邮件 方法如下: ...
- linux云服务器上安装JDK
具体环境:windows机器,Linux云服务器(CentOS7 64位),JDK8 具体步骤: 1. 下载JDK到windows机器 官方地址:http://www.oracle.com/techn ...
最新文章
- Zabbix-03-3 告警变量值
- Windows电脑C盘老是报红
- java中isolate时间_flutter/dart里面,一个isolate一般heap多大?
- Asp.Net+Jquery.Ajax详解5-$.getScript
- bootstrap 一排5个_Bootstrap5 列(Columns)
- MSP430F5529 DriverLib 库函数学习笔记(二)GPIO
- 客户端版本和服务器版本上传软件
- datatable刷新数据_UE4 利用SaveGame和CSV进行Runtime数据更新
- 作业计算机组成与原理,课程计算机组成原理与汇编语言作业四
- 针对低网速的性能优化
- hdu3947 给一些已知(需费用)路径去覆盖一些边 //预先加灌法费用流
- 企业应用打包的时候 修改ipa包的bundle identifier
- (转)马云又在押宝智能投顾!
- excel 无法求和
- CREATE PROCEDURE
- linux添加ec20,i.MX6添加EC204G模块GOBI驱动
- 一张图搞清楚中国茶叶分类
- 达梦数据库导入csv文件
- 回看皮尔斯—皮尔斯的逻辑开篇
- 菜鸟|黑客 常用站点大全! !
热门文章
- 2017 年,阿里巴巴开源的那些事儿
- inventor弧度怎么标注_家里房间太大,WiFi信号覆盖不了怎么办?网件新作:分身术...
- MODBUS ASCII协议和RTU协议的比较 -----和利时PLC采用Modbus RTU
- Jquery第一章基础、过滤、层次选择器第二节1/2
- vue cli3 项目中解决跨域
- oracle 重设基线,Oracle SQL执行计划基线总结(SQL Plan Baseline)
- java数据文本格式转换_SpringMVC中Json数据格式转换
- .Net 指针使用以及在栈上创建引用对象
- spring-boot子模块打包去掉BOOT-INF文件夹
- 小程序开发 js里面array操作的方法列表。