教你搭建服务器系列让你的服务器更安全

Posted HaC是个程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了教你搭建服务器系列让你的服务器更安全相关的知识,希望对你有一定的参考价值。

上一篇文章介绍了使用秘钥对登录服务器的好处。

本文使用服务器为Centos 7.6

除了使用密钥对之外,只能确保我们的服务器是安全的,但是并不能确保我们的应用是安全的。

为什么这么说?

mysql来说,我们希望在我的电脑可以连接我服务器的MySQL服务,那必然需要我的服务器开放3306端口,那么这个端口是暴露在公网的,如果你的密码简单,很容易就会被攻击。

类似的还有Redis 6389这些端口。

如果要使服务安全,最好的方法就是不暴露公网的端口,只允许本地的服务访问。那这样也不现实,业务上还需要连接数据库查询。

还有就是服务器的权限问题,root用户权限过大,密码过于简单。

可以查看一下本地的/var/log/secure 文件,记录了外界尝试登录你服务器的IP、用户名、端口:

暴力破解

如果你的密码过于简单,服务器就很容易被黑了。

以下介绍几种方法让你的服务更安全。

一、后台配置安全组规则

安全组规则是云厂商提供的访问规则。

安全组可以设置允许登录服务器的IP和端口,还有暴露到公网的允许端口。

安全组一共有两个:

  • 入站规则

表示登入服务器的允许,如果我常用的IP是 192.168.0.12,协议端口为 22,那么我设置了这个入站规则,就只能允许这个IP和端口登录服务器。

如果你要搭建了一个网站,就需要放通 Web 服务 HTTP 或 HTTPS 访问,即 80 和 443 端口,否则外部就不能访问。

可以设置多个允许登录的IP,支持IP段:

  • 出站规则

表示服务器不可以访问外部特定的 IP 地址。

这种场景一般比较少。

安全组是一种虚拟防火墙。

如果打开了防火墙,又打开了安全组,如果防火墙未放开端口,安全组放开了,这种情况下端口也是无法访问的。

二、防火墙

1、firewall

你在服务商后台配置了安全组,其最终也是修改了防火墙。

但并不是所有的云厂商提供的服务器都有安全组的概念,如果没有,就需要我们自行配置服务器的防火墙了。

1、防火墙状态

两种方法查看防火墙状态:(显示 running 表示已开启)

systemctl status firewalld
firewall-cmd --state

以下表示防火墙开启:

如果显示 -bash: firewall: command not found 表示防火墙没有安装。

需要手动安装:

yum install firewalld systemd -y

启动:

systemctl start firewalld.service

关闭:

systemctl stop firewalld.service 

重启:

systemctl reload firewalld.service

查看指定防火墙端口是否开放:

firewall-cmd --query-port=8080/tcp

提示 yes 或者 no

查询所有打开的端口:

firewall-cmd --zone=dmz --list-ports

开放防火墙端口:

firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=“192.168.1.0/24” port protocol=“tcp” port=“6666” accept”

firewall-cmd --zone=public --add-port=8080/tcp --permanent 

--permanent 表示永久生效,如果没有加表示防火墙重启失效。

关闭/移除服务器端口:

firewall-cmd --remove-port=8080/tcp --permanent

在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。

2、iptables

firewalld跟iptables比起来至少有两大好处:

1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;

2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。

firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。

firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。

转自 —— https://www.cnblogs.com/grimm/p/10345693.html

如果你本地开启了防火墙,未开放80端口,而在云厂商后台开放了该端口,这种情况也是不能访问80端口的。

现在Centos7默认使用的是firewall作为防火墙,而不是iptables,如果要使用iptables,先把firewall停用,再安装iptables即可。

查看本地是否存在iptables

vi /etc/sysconfig/iptables

查看发现是个空文件,表示还没有安装。

iptables 安装:

yum install iptables-services

执行:

service iptables save

再查看一下/etc/sysconfig/iptables 文件

可以看到文件存在了,而且默认只开放了22端口。

查看iptables状态:

service iptables status

绿色的active表示 iptables 是已经运行:

启动/停止/重启 iptables

service iptables start/stop/restart

如果执行命令的时候提示:

Redirecting to /bin/systemctl status firewalld.service

The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

因为centos7 大部分命令都需要 systemctl ,而不是 service,例如 service firewalld status 改成 systemctl status firewalld 即可

三、修改sshd_config

ssh是linux远程登录的安全协议,是 C/S 模式的架构,配置文件分为服务器端配置文件 [/etc/ssh/sshd_config] 与 用户配置文件[~/.ssh/config]

上一章节使用SSH密钥对就是通过修改~/.ssh/config

sshd_config 是服务端主配置文件,定义了一系列的安全访问规则。

打开 /etc/ssh/sshd_config

vi /etc/ssh/sshd_config

1、修改端口、协议

默认的SSH端口是22,入侵者常用22端口暴力撞库。

#更改SSH端口,最好改为五位数以上,攻击者扫描到端口的机率也会下降。 
Port 10000

#禁用版本1协议, 因为其设计缺陷, 很容易使密码被黑掉。
Protocol 2

2、设置特定 用户、IP 登录

允许特定ip、用户登录
AllowUsers    aliyun test@192.168.1.1,root@192.168.*

# 拒绝 zhangsan、aliyun 帐户通过 SSH 登录系统
DenyUsers    zhangsan aliyun    #Linux系统账户        

如果没有开启防火墙,强烈推荐这种方法,以免被第三方暴力破解

3、禁止root用户登录

#尝试任何情况先都不允许 Root 登录. 生效后我们就不能直接以root的方式登录了,我们需要用一个普通的帐号来登录,然后用su来切换到root帐号
PermitRootLogin no

4、禁用空密码登录

#禁止空密码登陆
PermitEmptyPasswords no

修改完sshd文件,最后记得重启sshd服务

service sshd restart

以上就是一些简单的安全设置方法。

最后的效果就是自从我设置后,服务器超过1年也没被侵入过。

以上是关于教你搭建服务器系列让你的服务器更安全的主要内容,如果未能解决你的问题,请参考以下文章

五招让你的Ubuntu 16.04更安全

简单几步让你的远程桌面更安全

ConcurrentDictionary让你的多线程代码更优美

十步让你成为更优秀的程序员

教你搭建服务器系列(10)利用Docsify搭建个人笔记网站

教你搭建服务器系列(10)利用Docsify搭建个人笔记网站