前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【教你搭建服务器系列】(9)让你的服务器更安全

【教你搭建服务器系列】(9)让你的服务器更安全

作者头像
HaC
发布2021-12-07 13:29:08
1.2K0
发布2021-12-07 13:29:08
举报
文章被收录于专栏:HaC的技术专栏HaC的技术专栏

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

本文使用服务器为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 表示已开启)

代码语言:javascript
复制
systemctl status firewalld
firewall-cmd --state

以下表示防火墙开启:

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

需要手动安装:

代码语言:javascript
复制
yum install firewalld systemd -y

启动:

代码语言:javascript
复制
systemctl start firewalld.service

关闭:

代码语言:javascript
复制
systemctl stop firewalld.service 

重启:

代码语言:javascript
复制
systemctl reload firewalld.service

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

代码语言:javascript
复制
firewall-cmd --query-port=8080/tcp

提示 yes 或者 no

查询所有打开的端口:

代码语言:javascript
复制
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”

代码语言:javascript
复制
firewall-cmd --zone=public --add-port=8080/tcp --permanent 

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

关闭/移除服务器端口:

代码语言:javascript
复制
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

代码语言:javascript
复制
vi /etc/sysconfig/iptables

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

iptables 安装:

代码语言:javascript
复制
yum install iptables-services

执行:

代码语言:javascript
复制
service iptables save

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

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

查看iptables状态:

代码语言:javascript
复制
service iptables status

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

启动/停止/重启 iptables

代码语言:javascript
复制
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

代码语言:javascript
复制
vi /etc/ssh/sshd_config

1、修改端口、协议

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

代码语言:javascript
复制
#更改SSH端口,最好改为五位数以上,攻击者扫描到端口的机率也会下降。 
Port 10000

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

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

代码语言:javascript
复制
允许特定ip、用户登录
AllowUsers    aliyun test@192.168.1.1,root@192.168.*

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

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

3、禁止root用户登录

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

4、禁用空密码登录

代码语言:javascript
复制
#禁止空密码登陆
PermitEmptyPasswords no

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

代码语言:javascript
复制
service sshd restart

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-06-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、后台配置安全组规则
  • 二、防火墙
    • 1、firewall
      • 1、防火墙状态
    • 2、iptables
    • 三、修改sshd_config
      • 1、修改端口、协议
        • 2、设置特定 用户、IP 登录
          • 3、禁止root用户登录
            • 4、禁用空密码登录
            相关产品与服务
            云数据库 MySQL
            腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档