服务器安全设置教程,手把手保护好你的主机(保姆级)

防护的意义
自古以来,攻击和防护就像盾牌和矛处于对立面上。自打有linux系统以来,这两个对立面就一直彼此的升级,又彼此的促进。互联网时代,网站、APP、服务均部署在远程服务器上,这背后牵涉到巨大的经济利益和商业价值,于是各种产业链就有了巨大的攻击动力,所以防护的好可以减少遭受经济损失的概率。 通常你拥有一台服务器时候,它全天运行,并有一个或者多个公网ip。当IP暴露的的那一刻起,服务器就暴露在攻防的第一线。 对于安全问题,安全无小事,但是也不用太紧张,毕竟你的服务器没有太大价值,一般不会招来高水平攻击,通常都是脚本化攻击,用来挂马或者当肉鸡的。 对于前者,只能说要提高技术水平(变成大牛(╹▽╹)),这需要日积月累的经验,不是一天两天能完成的。 而对于后者,只需要做一些普通的防护,既可以防御大部分的攻击(DDOS除外)。
防护防的是什么
通常暴露IP的服务器,在公网上有四大薄弱因素,IP ;端口;用户名;密码
IP:访问的唯一地址,通常恶意脚本用扫描ip段来嗅探真实ip,无法隐藏。 端口:用来访问特定服务的接口。每种服务都会有一个默认端口。 用户名:登录账号的账号名,通常默认的都是root 密码:如果服务器是默认密码或者弱密码,比如123456,888888,这种要破解是在是太容易。
对于用户名和密码,还可能出现另一种情况,比如用户名更改了,而且密码用了大小写带着特殊字符的强密码,依然被破解了。这种情况大概率是被人撞库了,也就是说你用的同样的用户名和账户在别的网站登录了,而这个网站又被拖库,于是明文就到了对方手里了。
当这四个要素都被别人掌握了,你的服务器的最高权限就落在了对方手里(比如挖矿,传播病毒,欺诈,做非法代理)。对于一些普通的恶意脚本,它会迫不及待的榨取你服务器的资源,这时候你登录服务器,可以从进程,cpu和内存占用率来发现异常。而有一些高级脚本,恶意做到相当隐蔽,进程、CPU占用、流量基本没有太大波动,很难被发现。当对方用你的服务器干一些违法的事情,就可能牵连到你,毕竟服务器是你买的!!
防护方案
下面代码系统以Debian为例,Ubantu也是类似操作,centos有些差别(比如apt 换成yum之类的要注意)
更新系统安全补丁
更新系统,把一些系统的漏洞补丁先打上
apt update
apt upgrade
SSH服务增强
更改 SSH 端口
更改SSH端口,攻击者无法确认服务与端口的匹配关系,就可以让这些自动扫描的攻击者以为这台服务器不存在。
在服务器终端运行命令
nano /etc/ssh/sshd_config
打开ssh配置文件后,找到port所在的位置(可用
ctrl+w
然后搜索port),将前面的#
去掉,并将22改为其他端口,比如9765.ctrl+o
+Enter
保存文件并退出重启ssh服务并应用新的配置文件
sudo service sshd restart
使用增强型密码
修改了root密码,注意linux下密码是不显示字符的,修改的密码一定要记住。
passwd
禁止 root 登陆
可以禁止root账户登录来防止root账户和密码一但泄露,别人直接得到root权限的问题。 首先要确保有一个普通用户。
# 新增用户user
adduser user
# 打开ssh配置文件
nano /etc/ssh/sshd_config
找到 PermitRootLogin
选项,将前面的 #
去掉,并将值改为 no
. 文件保存并退出
# 重启ssh服务
sudo service sshd restart
使用证书来登录
再复杂的密码也有泄露的可能,当然除非每隔一阵就换一次密码,操作起来多少有些麻烦,这时候可以用rsa证书当做密钥来登录服务器。
密钥的生成
rsa证书密钥分为两部分,一部分为公钥,放在服务器上,一部分为私钥,放在本地电脑上。 eg.阿里云服务器可以直接在控制台生成密钥,不需要登录ssh。
切换到ssh文件夹
# root 用户
cd /root/.ssh
# 普通用户
cd /home/用户名/.ssh
执行ssh-keygen命令创建密钥对,运行命令后一路回车,选择默认就行。
ssh-keygen -t rsa -b 4096 -C "文件名"
在.ssh文件夹中,有两个文件,id_rsa和id_rsa.pub。其中id_rsa是私钥(这个很重要,不能外泄),id_rsa.pub是公钥。 把公钥拷贝到需要登录的远程服务器或Linux系统上
# 端口不是22的把22改成你的端口
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.100.10 -p 22
rsa下载到本地保存用于登录即可。
宝塔面板
宝塔面板近几年用的人多了,所以宝塔也被许多不法分子盯上了,通过它来进行渗透
更改宝塔端口
将宝塔的默认 8888
端口,改成其他端口
使用用反向代理
一般反向代理配置:
location / {
proxy_pass http://127.0.0.1:8888/; #改成你服务的端口号
rewrite ^/(.*)$ /$1 break;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade-Insecure-Requests 1;
proxy_set_header X-Forwarded-Proto https;
}
系统规则
安装 UFW 防火墙
带控制台的服务器,比如阿里或者腾讯之类的,可以在控制台上来设置允许的访问端口,不需要安装防火墙
# 安装ufw
sudo apt-get install ufw
# 查看ufw的状态
sudo ufw status numbered
# 添加防火墙规则
# 设置 ufw 使用默认值
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 允许ssh访问
# 默认22端口ssh访问命令
sudo ufw allow ssh
# 其他端口ssh访问命令
sudo ufw allow 9765/tcp comment 'SSH'
# 允许 http 连接
sudo ufw allow http
# 允许 https 连接
sudo ufw allow https
# 启动 ufw 防火墙
sudo ufw enable
# 删除防火墙的第四条规则
sudo ufw delete 4
# 重载配置
sudo ufw reload
禁止 Ping
宝塔用户可以直接在宝塔面板上关闭ping访问
安装ufw的设置方式
sudo nano /etc/ufw/before.rules
搜索:echo-request
,把 ACCEPT
改成 DROP
未安装ufw的设置方式
编辑/etc/sysctl.conf
文件:
echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf
临时设置ping禁止访问,重启后设置失效
# 开启是1,关闭是0
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
防止暴力破解密钥
通过安装 Fail2ban来实现
# 安装fail2ban
sudo apt update && sudo apt install fail2ban
# 进入fail2ban目录
cd /etc/fail2ban
# 复制一份配置文件
sudo cp fail2ban.conf fail2ban.local
默认的是没有配置的,将下面内容加入conf文件
[sshd]
enable = ture
port = 22 # 注意改成自己对应的端口
filter =sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = -1
#重启fail2ban服务
sudo service fail2ban restart
#查看状态
sudo fail2ban-client status
#查看sshd的详细状态
sudo fail2ban-client status sshd
#解禁指定IP
sudo fail2ban-client set sshd unbanip 192.0.0.1
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

酷炫迷人
校验提示文案
酷炫迷人
校验提示文案