信安周报-第01周:环境配置

2024-01-29 08:10
文章标签 配置 环境 01 周报 信安

本文主要是介绍信安周报-第01周:环境配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

信安之路

第01周

Code:https://github.com/lotapp/BaseCode/tree/master/safe

前言

信安之路最近有一个成长计划,每周发布任务,不讲解,全部自学完成

其实这种模式很好,拓展性也很高,每个人学到什么程度看个人而不局限于“做题”

这边简单记录下第一周的任务:(欢迎指正)

1127869-20190804211859660-1224379590.png

下面是我仓促间的自学过程:(下次补发一篇扩展篇)

1.虚拟环境

1.1.Hyper-v配置

Hyper-V为例搭建环境

Ubuntu镜像下载:https://mirrors.huaweicloud.com/ubuntu-releases/bionic/ubuntu-18.04.2-desktop-amd64.iso

1.开启Hyper

开启

2.安装一下

安装

3.重启进行配置

重启

4.固定到开始屏幕上

固定

5.创建外部访问的虚拟网卡

虚拟网卡

6.设置名称并创建

创建


7.新建虚拟机

新建

8.指定名称和存放位置

指定

9.分配动态内存

内存

10.设置网络

网络

11.设置虚拟文件存放位置和名称

虚拟文件存放

12.指定安装镜像

安装镜像

13.创建成功

创建成果

1.2.安装系统

1.启动系统

启动系统

2.安装Ubuntu

Ubuntu

3.最小安装

最小安装

4.格式化硬盘

格式化

5.设置用户名和密码

设置用户名和密码

6.等待安装

等待安装

7.安装完成后重启一下

桌面

1.3.配置网络

4.启动后连接,打开网络设置

打开

5.配置网络

配置

6.reboot重启之后就生效了

网络

1.4.镜像源

1.编辑源:sudo gedit /etc/apt/sources.list

编辑

2.复制一下清华提供的镜像源:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

清华

3.更新系统:sudo apt update && sudo apt upgrade && sudo apt dist-upgrade

更新

1.5.SSH and Git and htop

1.安装SSH:sudo apt install openssh-server

ssh

test

2.htop:sudo apt install htop

htop

test2

3.git:sudo apt install git

git

PS:用户名和邮箱设置命令:

# github账号名
git config --global user.name "Your Name"
# 使用Github提供的隐私邮箱
git config --global user.email xxx+名称@users.noreply.github.com
1.6.谷歌浏览器

谷歌浏览器deb文件下载:(不用FQ)

https://www.google.cn/chrome/

安装谷歌浏览器:sudo dpkg -i google-chrome*.deb

卸载火狐浏览器:sudo apt autoremove firefox*

谷歌

1.7.搜狗输入法

官方地址:https://pinyin.sogou.com/linux/

1.安装sogou:sudo dpkg -i sogopinyin*.deb

sogou

2.修复依赖:sudo apt install -f

修复

3.设置系统默认输入法

默认输入法

4.reboot重启后输入法就生效了

重启

5.删除自带输入法:sudo apt autoremove ibus

卸载


2.开发环境

2.2.MySQL

1.安装MySQL:sudo apt install mysql-server

安装MySQL

2.2.1.MySQL安全初始化

1.安全初始化:sudo mysql_secure_installation

2.设置密码复杂度

初始化

3.删除匿名用户和测试库,不允许root远程登录

设置

4.登录测试

登录


2.3.Nginx

官方网站:https://nginx.org/

Github:https://github.com/nginx/nginx

在线安装:sudo apt install nginx

apt

成功验证:localhost

ok

PS:Nginx书籍

  1. Nginx Cookbook 中文版
  2. Nginx官方中文文档
  3. Nginx入门教程

2.4.PHP-FPM

1.安装php-fpm

fpm

2.配置Nginx:sudo gedit /etc/nginx/sites-available/default

编辑配置文件

3.nginx的php配置

nginx配置

4.编辑一个php页面

新建文件

5.配置php-fpm文件:listen = /var/run/php/php7.0-fpm.sock

配置php-fpm

6.重启Nginx和php-fpm使配置生效

重启

7.验证

验证

PS:CentOS下的Nginx配置只需要把注释去除,然后改下这个地方就可以了

shell:vi /etc/nginx/conf.d/default.conf$document_root

1127869-20190824215105931-2061819015.png


3.CURD(PHP)

这个之前我写了篇编辑远程服务器文件的文章,可以看看:https://www.cnblogs.com/dotnetcrazy/p/11254225.html

3.1.安装驱动

安装php的mysql驱动:sudo apt install php7.2-mysql

php-mysql

3.2.连接MySQL

连接mysql

连接mysql

3.3.创建表

创建表

创建表

创建表-验证

2.创建表-验证

3.4.插入数据

插入数据

3.插入数据.png

插入数据-验证

插入数据-验证

3.5.更新数据

更新数据

4.更新数据.png

更新数据-验证

4.更新数据-验证.png

3.6.查询数据

查询

5.查询.png

3.7.删除数据

删除表数据

6.删除表数据.png

删除表数据-验证

6.删除表数据-验证.png


4.加固初尝

第一次接触加固,若有不妥还望指教^_^,探索如下:

4.1.Linux
4.1.1.思路

1.删除用不到的那些普通用户

2.SSH相关加固思路:

  1. SSH修改端口:不让端口扫描器轻易发现
  2. 不允许Root远程登录:root权限太大,只允许一般账户远程登录

3.防火墙加固思路:主要就是限制端口的对外访问,暴露越少相对越安全

4.1.2.用户

删除/etc/passwd中用不到的用户:

删除用不到的用户

4.1.3.SSH

SSH的配置:/etc/ssh/sshd_config

配置

重启下sshsudo systemctl restart ssh

验证:下次登录的时候就必须是33端口了

验证

4.1.4.防火墙

常用命令:

# 开启/关闭/查看防火墙状态
sudo ufw enable|disable|status
# 开通3306端口
sudo ufw allow 3306/tcp
# 禁用本机的3306端口
sudo ufw delete allow 3306/tcp# 设置本机80端口访问的白名单:只允许192.168.0.0网段的ip访问本机80端口
sudo ufw allow 80/tcp from 192.168.0.0/24# 允许此ip访问本机的所有端口(定向访问)
sudo ufw allow from 192.168.0.7
# 禁止这个ip访问本机(黑名单)
sudo ufw delete allow from 192.168.0.2

简单演示:

demo

开放MySQL和Nginx的权限:

开发

测试:

test


PS:CentOS 7 现在默认使用firewall-cmd当防火墙

# 显示服务状态
systemctl status firewalld
# 添加 --permanent永久生效(没有此参数重启后失效)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重新载入
firewall-cmd --reload
# 查看
firewall-cmd --zone=public --query-port=3306/tcp
# 删除
firewall-cmd --zone=public --remove-port=3306/tcp --permanent
4.2.MySQL
4.2.1.思考

1.如果是root账号开放远程登录,那么权限太过高了,项目里也是对指定数据库开放对应的用户权限

2.端口号默认是3306,很多扫描器都会盯着,那么修改下默认端口会缓解不少~

3.开启binlog可以预防黑客修改数据后没法恢复的尴尬

4.设置innodb一个表对应一个文件可以黑客串改的数据进行针对性恢复(主要是性能提高)

PS:被修改的表应急情况下可以使用10分钟前的备份文件来保证安全性,如果不设置,那么所有表数据都是在一个文件里的(容易丢失太多数据)

4.2.2.创建远程专用用户

创建远程登录用户并赋予某数据库的权限

权限

命令附录:

# 1.创建用户
create user bryan@'%' identified by '含大小写字母+数字的密码';# 2.创建工作数据库
# PS:以后创建数据库后给bryan分配下权限即可访问
create database safe_db charset=utf8;# 3.给用户分配某数据库的所有权限
grant all on safe_db.* to bryan;# 4.刷新权限
flush privileges;# 5.显示用户有哪些权限
show grants for bryan;

登录测试

登录测试

允许远程访问:sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

配置

重启使其生效

重启

远程测试

连接

4.2.3.修改默认端口

在配置文件sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf中修改port

port

小测试:使用3333端口则执行成功,使用默认的3306则失败

ps:记得先开发防火墙的端口权限

conn

PHP程序测试:

demo

4.2.4.binlog开启

开启binlog日志:去除server-idlog_bin的注释

binlog

在binlog中记录SQL:binlog_rows_query_log_events=on

sql

然后重启一下mysql:sudo systemctl restart mysql

测试一下:

刷新

我们以之前php的案例进行一次数据库交互:

sql

PS:记录每次修改数据的SQL,便于查找和恢复

sudo mysqlbinlog -vv /var/log/mysql/mysql-bin.xxx


PS:几个优化选项(每个表独立存放可以有效保护数据,而且性能高)

innodb


4.3.Nginx

通过常见的攻击手段来防护:

4.3.1.防止路径扫描

防止恶意抓取和资源盗用:

secure_link_module:对数据安全性提供加密验证时效性

eg:资源文件设置加密和时效/download?md5=xxxx&expires=xxxx

# vi /etc/nginx/conf.d/access_module.conf
server {root /var/www/html;location / {# 提取参数secure_link $arg_md5,$arg_expires;secure_link_md5 "$secure_link_expiress$uri key字符串";# 不满足就跳转if ($secure_link = ""){return 403;}if ($secure_link = "0"){return 410;}}
}

access_module:基于ip白名单的访问控制

eg:特定ip才能访问后台

# vi /etc/nginx/conf.d/access_module.conf
server {location ~ ^/admin.html {# 代码路径root /var/www/html;# 不允许其他ip访问deny all;# 允许ip(段)访问allow 192.168.0.0/24;index index.html index.php;}
}
4.3.2.密码爆破

后台密码爆破还是挺常见的

PS:可以看看3年前我讲MVC演示的暴力破解登录页面的案例:https://www.cnblogs.com/dunitian/p/5724872.html

程序里面主要就是通过验证码ip访问频率来限制

PS:后台密码设置更复杂些(提高爆破耗时),加密方式选sha256来增加明文密码解猜的难度(已泄露情况下)

Nginx里面可以通过:access_module来设置ip限制的

PS:某些页面只能特定ip访问,提高渗透难度

还可以设置预警机制,太过频繁会提示管理人员处理

4.3.3.文件上传漏洞

Nginx早期版本有解析漏洞,eg:www.baidu.com/upload/1.jpg/1.php ==> 1.jpg作为php代码进行执行

解决:

  1. 升级Nginx版本
  2. 制定目录下的格式限制(可以是白名单也可以黑名单)

eg:不允许upload文件夹下访问php格式的文件

location ^~ /upload{root /var/www/html;if($request_filename ~* (.*)\.php){return 403;}
}
4.3.4.Nginx+Lua

可以使用Nginx + Lua防火墙进行防护:

PS:详细内容可以看我写的拓展:https://www.cnblogs.com/dotnetcrazy/p/11306202.html

  1. 拦截Cookie类型工具
  2. 拦截异常post请求
  3. 拦截CC洪水攻击
  4. 拦截URL
  5. 拦截arg(提交的参数)

市面上比较常用一块开源项目:ngx_lua_waf

https://github.com/loveshell/ngx_lua_waf

1.clone代码:

git

2.移动到nginx的waf目录下

2.移动到nginx的waf目录下

3.参数简单说明下:红色字体部分需要修改

pms

文字附录:

  • attacklog:记录攻击日志
  • logdir:日志目录设置
  • urldeny:url规则匹配
  • redirect;拦截后重定向
  • cookiematch:cookie匹配
  • postmatch:post请求的匹配
  • whitemodule:是否开启白名单
    • ipwhitelist:白名单列表
  • black_fileExt:禁止上传的文件后缀
  • ccdeny:防CC
    • ccrate:频率设置(默认1分钟同一个IP只能请求同一个地址100次)
  • html:拦截后的返回内容

4.配置nginx:sudo vi /etc/nginx/nginx.conf

配置nginx

文字:http下添加

lua_package_path "/etc/nginx/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /etc/nginx/waf/init.lua;
access_by_lua_file /etc/nginx/waf/waf.lua;

PS:自带的CC防护可以使用limit_connlimit_req

可以使用ab -n 20 -c 20 http://192.168.0.9来简单测试


4.4.PHP

PHP不是很熟悉,简单归纳下网上说的加固(修改php.ini)

  1. 防止变量覆盖:register_globals=off
  2. 防止越权访问目录:open_basedir = /var/www/html(指定目录)
  3. 防止远程文件包含:allow_url_include=off and allow_url_fopen=off
  4. 防止显示详细的错误信息:display_errors=off
  5. 记录错误在日志文件中:log_errors=on
  6. 关闭不安全的字符串转义处理函数(防SQLi和XSS):magic_quotes_gpc=off
  7. 如果PHP以CGI方式安装则需要关闭:cgi.fix_pathinfo=0
  8. 防御XSS(开启HttpOnly)session.cookie_httponly=1
  9. HTTPS下提高安全性:session.cookie_secure=1

参考文章

Ubuntu16下配置自己的web服务器

https://www.jianshu.com/p/998eeb56aa6c

PHP 5 MySQLi 函数

https://www.runoob.com/php/php-ref-mysqli.html

ubuntu系统下防火墙简单使用

https://www.cnblogs.com/kevingrace/p/6212463.html

Nginx模块Lua-Nginx-Module学习笔记

https://blog.csdn.net/qq_21860077/article/details/83622957

Nginx编译安装Lua模块

http://www.imooc.com/article/19597

转载于:https://www.cnblogs.com/dotnetcrazy/p/11299835.html

这篇关于信安周报-第01周:环境配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/656280

相关文章

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注