运维/网安系统化自学记录(服务加固)

运维/网安系统化自学记录(服务加固) 对于服务来说每种服务默认配置都不安全需要用最小权限原则去加固——关掉不需要的功能、隐藏版本信息、限制访问来源。Nginx服务基础加固首先先安装nginxsudo apt update sudo apt install nginx -y然后修改配置文件并重载服务隐藏版本信息防止信息泄露 攻击者使用针对性漏洞攻击sudo vi /etc/nginx/nginx.conf #打开配置文件 server_tokens off; #在文件的http块中增加内容隐藏版本 #退出vi模式后先验证语法确认无误再重载nginx服务 sudo nginx -t #验证配置文件中是否有语法错误 sudo systemctl reload nginx #重载服务确认隐藏版本后我们可以验证一下一定要记得重载服务隐藏版本才会生效curl -I localhost #确认不会再显示版本号接下来来限制nginx的请求方法阻止黑客使用PUT、DELETE、TRACE等非必要方法上传Webshell缩小攻击面sudo vi /etc/nginx/sites-available/default #打开网站配置文件 #在server块下增加一段类python代码 if ($request_method !~ ^(GET|POST|HEAD)$){ return 405 }改动完配置文件后依旧通过语法检测检测无误后重载服务通过curl代码验证是否生效curl -X PUT localhost可以看到如期返回了我们所要求的405Mysql服务基础加固依旧先安装mysql通过命令进行mysql初始化完成一些基础改动防止黑客通过空密码或默认配置直接进入数据库。防止权限绕过sudo mysql_secure_installation设置密码移除匿名用户不允许root用户远程登录移除测试数据库重载权限表结束后我们通过输入密码进入mysql中验证密码及先前配置步骤sudo mysql -u root -p #需使用sudo不是root用户无法直接登录mysql可以看到匿名用户已删除root用户只能本地登录SSH服务基础加固ssh服务是Ubuntu系统中自带的服务不需要额外下载我们可以直接进行配置首先先更改ssh连接的默认端口(过滤掉99%的自动化扫描和攻击攻击者找不到入口减少了被可能攻击的概率)sudo vi /etc/ssh/sshd_config #打开配置文件 #找到#Port 22那一行删除#号并更改端口号在更改完端口后我们需要禁用root用户的可被远程连接权限(攻击者无法直接用root这个最高权限账号尝试登录。增加攻击者攻击的难度也就是增加本机的安全化程度更改完禁用root用户直接登录后我们还可以通过设置密钥登录提高安全性密钥长达4096位无法在有效时间内被暴力破解。将认证方式从“密码”变为“加密签名”彻底杜绝密码爆破我这边准备让kali和ubuntu互通所以在kali那边生成密钥传输给ubuntu这边后续就可以无需密码登录输入密钥的密码即可(也可以不设置密码接下来来实操步骤首先在kali这边生成一对公私钥sudo ssh-keygen -t rsa -b 4096 -C kali-key111 # -t 指定密钥类型 -b 指定密钥大小 -C 给密钥增加备注更容易分清再通过命令传输到Ubuntu中回到ubuntu中查看是否收到kali传来的公钥可以看到在Ubuntu中已经收到了密钥而且根据末尾的备注可以确认就是我们刚刚在kali生成的那个密钥。在确认我们使用密钥登录后修改前面提到ssh的配置文件我们可以关闭使用ssh的密码登录策略这样双方想要ssh互通就必须使用密钥进行验证安全性大大提高更改完配置文件后依旧需要重载服务如果是像我这种通过远程工具连接的在重载服务过后可能会断连需要在ssh连接工具中手动更改连接的端口如图Nginx配置SSL自签证书将HTTP明文传输加密为HTTPS密文。即使数据包被拦截黑客看到的也是乱码。保证数据传输的机密性需要先生成证书然后再修改配置文件达到网站配置证书的效果sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/ssl/private/nginx.key -out /etc/ssl/certs/nginx.crtreq证书请求和生成工具-x509输出自签名证书而非 CSR-newkey rsa:2048同时生成新的 RSA 私钥长度 4096 位-nodes私钥不加密无密码保护-keyout nginx.key选择私钥保存位置-out nginx,crt选择证书保存位置-days 365证书有效期 365 天输入代码回车后会让我们输入一系统信息我们用于测试环境的自签证书其他都不用输入只需要注意一个地方这里一定要输入要访问的域名生成证书后来通过修改配置文件来达到证书绑定网站的效果sudo vi /etc/nginx/sites-available/default #打开nginx网站配置文件主要增加以下几个部分修改完之后重载服务再通过命令验证是否生效sudo nginx -t sudo systemctl reload nginx curl -I https://IP #配置正确后正常是无法直接访问通过-k参数可以正常显示 curl -k https://IP可以在kali机上实际访问一下查看结果因为是自签证书而不是公证所以会跳出警告但实际上流量的保护程度是和公证一样的这样就可以验证我们的SSL证书成功链接网站了