信安周报-第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

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联