系统及组件的加固



一.Windows加固

0.Windows 配置的途径

(1)命令
(2)注册表
(3)组策略
(4)配置文件

1.账户管理和认证授权

1.1 账户
(1)默认账户安全
禁用 Guest 账户
在这里插入图片描述

(2)按照用户分配帐户
(3)定期检查并删除与无关帐户
(4)不显示最后的用户名
路径:C:\WINDOWS\system32\secpol.msc
在本地策略 > 安全选项中,双击交互式登录:不显示最后的用户名,选择‘已启用’并单击确定。
在这里插入图片描述

1.2口令
(1)密码复杂度
打开 控制面板 > 管理工具 > 本地安全策略,在帐户策略 > 密码策略 中,确认密码必须符合复杂性要求策略已启用。
在这里插入图片描述

(2)密码最长留存期
对于采用静态口令认证技术的设备,帐户口令的留存期不应长于 90 天。
操作步骤打开控制面板 > 管理工具 > 本地安全策略,在帐户策略 > 密码策略中,配置密码最长使用期限不大于 90 天。
在这里插入图片描述

(3)帐户锁定策略
对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过10次后,锁定该用户使用的帐户。
打开控制面板 > 管理工具 > 本地安全策略,在 帐户策略 > 帐户锁定策略 中,配置帐户锁定阈值不大于10 次。
在这里插入图片描述

1.3授权
(1)远程关机
在本地安全设置中,从远端系统强制关机权限只分配给 Administrators 组。
打开控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 用户权限分配 中,配置从远端系统强制关机权限只分配给 Administrators 组。
在这里插入图片描述
(2)本地关机
在本地安全设置中关闭系统权限只分配给 Administrators 组。
打开控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 用户权限分配中,配置关闭系统权限只分配给Administrators组。
在这里插入图片描述

(3)用户权限指派
在本地安全设置中,取得文件或其它对象的所有权权限只分配给 Administrators 组。
(4)授权帐户登录
在本地安全设置中,配置指定授权用户允许本地登录此计算机。
(5)授权帐户从网络访问
在本地安全设置中,只允许授权帐号从网络访问(包括网络共享等,但不包括终端服务)此计算机。

2.日志配置操作

2.1 日志配置
(1)审核登录
设备应配置日志功能,对用户登录进行记录。记录内容包括用户登录使用的帐户、登录是否成功、登录时间、以及远程登录时、及用户使用的 IP 地址。
打开控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略中,设置审核登录事件。
在这里插入图片描述
(2)审核策略
启用本地安全策略中对 Windows 系统的审核策略更改,成功和失败操作都需要审核。
(3)审核对象访问
启用本地安全策略中对 Windows 系统的审核对象访问,成功和失败操作都需要审核。
(4)审核事件目录服务访问
启用本地安全策略中对 Windows 系统的审核目录服务访问,仅需要审核失败操作。
(5)审核特权使用
启用本地安全策略中对 Windows 系统的审核特权使用,成功和失败操作都需要审核。
(6)审核系统事件
启用本地安全策略中对 Windows 系统的审核系统事件,成功和失败操作都需要审核。
(7)审核帐户管理
启用本地安全策略中对 Windows 系统的审核帐户管理,成功和失败操作都要审核。
(8)审核过程追踪
启用本地安全策略中对 Windows 系统的审核进程追踪,仅失败操作需要审核。
(9)日志文件大小
设置应用日志文件大小至少为 8192 KB,可根据磁盘空间配置日志文件大小,记录的日志越多越好。并设置当达到最大的日志尺寸时,按需要轮询记录日志。

3.IP协议安全配置

3.1 IP协议安全
(1)启用 SYN 攻击保护
①指定触发 SYN 洪水攻击保护所必须超过的 TCP 连接请求数阈值为 5。
②指定处于 SYN_RCVD 状态的 TCP 连接数的阈值为 500。
③指定处于至少已发送一次重传的 SYN_RCVD 状态中的 TCP 连接数的阈值为 400。

4.文件权限

4.1 共享文件夹及访问权限
(1)关闭默认共享
非域环境中,关闭 Windows 硬盘默认共享,例如 C , D ,D D
(2)共享文件夹授权访问
每个共享文件夹的共享权限,只允许授权的帐户拥有共享此文件夹的权限。

5.服务安全

5.1 禁用 TCP/IP 上的 NetBIOS
(1)禁用 TCP/IP 上的 NetBIOS 协议,可以关闭监听的 UDP 137(netbios-ns)、UDP 138(netbios-dgm)以及 TCP 139(netbios-ssn)端口。
(2)禁用不必要的服务,如下图:
在这里插入图片描述

6.安全选项

6.1 启用安全选项
打开控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 安全选项中,进行如下设置:
在这里插入图片描述

6.2 禁用未登录前关机
服务器默认是禁止在未登录系统前关机的。如果启用此设置,服务器安全性将会大大降低,给远程连接的黑客造成可乘之机,强烈建议禁用未登录前关机功能。
打开控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 安全选项 中,禁用“关机:允许系统在未登录前关机”策略
在这里插入图片描述

7. 其他安全配置

7.1 防病毒管理

Windows 系统需要安装防病毒软件。

7.2 设置屏幕保护密码和开启时间

设置从屏幕保护恢复时需要输入密码,并将屏幕保护自动开启时间设定为五分钟。

7.3 限制远程登录空闲断开时间

对于远程登录的帐户,设置不活动超过时间 15 分钟自动断开连接。

7.4 操作系统补丁管理

安装最新的操作系统 Hotfix 补丁。安装补丁时,应先对服务器系统进行兼容性测试。

二.Linux加固

1. 账号和口令

1.1 禁用或删除无用账号
减少系统无用账号,降低安全风险。

操作步骤:
使用命令 userdel <用户名> 删除不必要的账号。
使用命令 passwd -l <用户名> 锁定不必要的账号。
使用命令 passwd -u <用户名> 解锁必要的账号。

1.2 检查特殊账号
检查是否存在空口令和 root 权限的账号。

操作步骤:
①查看空口令和 root 权限账号,确认是否存在异常账号:
使用命令awk -F: '($2=="")' /etc/shadow查看空口令账号。
使用命令awk -F: '($3==0)' /etc/passwd查看 UID 为零的账号。
在这里插入图片描述

②加固空口令账号:
使用命令 passwd <用户名> 为空口令账号设定密码。
确认 UID 为零的账号只有 root 账号。

1.3 添加口令策略
加强口令的复杂度等,降低被猜解的可能性。

操作步骤:
①使用命令 vi /etc/login.defs 修改配置文件。
PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数
在这里插入图片描述

②使用 chage 命令修改用户设置。
例如,chage -m 0 -M 30 -E 2000-01-01 -W 7 <用户名>表示将此用户的密码最长使用天数设为 30,最短使用天数设为 0,密码 2000 年 1 月 1 日过期,过期前七天警告用户。

③设置连续输错三次密码,账号锁定五分钟。使用命令 vi /etc/pam.d/common-auth修改配置文件,在配置文件中添加 auth required pam_tally.so onerr=fail deny=3 unlock_time=300。

1.4 限制用户 su
限制能 su 到 root 的用户。

操作步骤:
使用命令 vi /etc/pam.d/su修改配置文件,在配置文件中添加行。例如,只允许 test 组用户 su 到 root,则添加 auth required pam_wheel.so group=test。

1.5 禁止 root 用户直接登录
限制 root 用户直接登录。

操作步骤:
创建普通权限账号并配置密码, 防止无法远程登录;
使用命令 vi /etc/ssh/sshd_config修改配置文件将 PermitRootLogin 的值改成 no,并保存,然后使用service sshd restart重启服务。
在这里插入图片描述

2. 服务

2.1 关闭不必要的服务
关闭不必要的服务(如普通服务和 xinetd 服务),降低风险。

操作步骤:
使用命令systemctl disable <服务名>设置服务在开机时不自动启动。
说明: 对于部分老版本的 Linux 操作系统(如 CentOS 6),可以使用命令chkconfig --level <init级别> <服务名> off设置服务在指定 init 级别下开机时不自动启动。

2.2 SSH 服务安全
对 SSH 服务进行安全加固,防止暴力破解成功。

操作步骤:
使用命令 vim /etc/ssh/sshd_config 编辑配置文件。
①不允许 root 账号直接登录系统->设置 PermitRootLogin 的值为 no
②修改 SSH 使用的协议版本->设置 Protocol 的版本为 2
③修改允许密码错误次数(默认 6 次)->设置 MaxAuthTries 的值为 3
④配置文件修改完成后,重启 sshd 服务生效。

3. 文件系统

3.1 设置 umask 值
设置默认的 umask 值,增强安全性。

操作步骤:
使用命令 vi /etc/profile 修改配置文件,添加行 umask 027, 即新创建的文件属主拥有读写执行权限,同组用户拥有读和执行权限,其他用户无权限。

3.2 设置登录超时
设置系统登录后,连接超时时间,增强安全性。
操作步骤:
使用命令 vi /etc/profile 修改配置文件,将以 TMOUT= 开头的行注释,设置为TMOUT=180,即超时时间为三分钟。

4. 日志

4.1 syslogd 日志
启用日志功能,并配置日志记录。

操作步骤:
Linux 系统默认启用以下类型日志:
系统日志(默认)/var/log/messages
cron 日志(默认)/var/log/cron
安全日志(默认)/var/log/secure
注意:部分系统可能使用 syslog-ng 日志,配置文件为:/etc/syslog-ng/syslog-ng.conf。

4.2 记录所有用户的登录和操作日志
通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。

操作步骤:
①运行 [root@xxx /]# vim /etc/profile打开配置文件。
②在配置文件中输入以下内容:

history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
mkdir /var/log/history
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
mkdir /var/log/history/${LOGNAME}
chmod 300 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null

③运行 [root@xxx /]# source /etc/profile 加载配置生效。
注意: /var/log/history 是记录日志的存放位置,可以自定义。
通过上述步骤,可以在 /var/log/history 目录下以每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录 IP、时间的日志文件,包含此用户本次的所有操作(root 用户除外)。

三.网站中间件加固(Nginx)

1. 日志配置

(1)备份nginx.conf 配置文件。
修改配置,按如下设置日志记录文件、记录内容、记录格式,添加标签为main的log_format格式(http标签内,在所有的server标签内可以调用):

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
   '$status $body_bytes_sent "$http_referer" '
   '"$http_user_agent" "$http_x_forwarded_for"';

(2)在server标签内,定义日志路径

access_log logs/host.access.log main

(3)保存,然后后重启nginx服务。
在这里插入图片描述
然后查看C:\phpStudy\nginx\logs下的access.log文件,可以查看日志
在这里插入图片描述

2.禁止目录浏览

(1)备份nginx.conf配置文件。
(2)编辑配置文件,HTTP模块添加如下一行内容:

autoindex off;

(3)保存,然后后重启nginx服务。
开启前:把upload-labs的index.php页面剪切掉,访问./upload-labs/
在这里插入图片描述
在这里插入图片描述

关闭后:
在这里插入图片描述

3.限制目录执行权限

(1)备份nginx.conf配置文件。
(2)编辑配置文件,在server标签内添加如下内容:

#示例:去掉单个目录的PHP执行权限
location ~ /attachments/.*\.(php|php5)?$ {
deny all;
}

#示例:去掉多个目录的PHP执行权限
location ~
/(attachments|upload)/.*\.(php|php5)?$ {
deny all;
}

(3)保存,然后后重启nginx服务。
需要注意两点:
①以上的配置文件代码需要放到 location ~ .php{…}上面,如果放到下面是无效的;
②attachments需要写相对路径,不能写绝对路径。

4.错误页面重定向(忽略)

(1)备份nginx.conf配置文件。
(2)修改配置,在http{}段加入如下内容

http {
...
fastcgi_intercept_errors on;
error_page 401 /401.html;
error_page 402 /402.html;
error_page 403 /403.html;
error_page 404 /404.html;
error_page 405 /405.html;
error_page 500 /500.html;
...
}
修改内容:
ErrorDocument 400 /custom400.html
ErrorDocument 401 /custom401.html
ErrorDocument 403 /custom403.html
ErrorDocument 404 /custom404.html
ErrorDocument 405 /custom405.html
ErrorDocument 500 /custom500.html
其中401.html、402.html、403.html、404.html、405.html、500.html 为要指定的错误提示页面。

(3)保存,重启 nginx 服务生效

5.实践

5.1隐藏版本信息
(1)备份nginx.conf配置文件。
(2)编辑配置文件,添加http模块中如下一行内容:

server_tokens off;

(3)保存,然后后重启nginx服务。
在这里插入图片描述

对比第二点禁止目录浏览的结果:
在这里插入图片描述
成功隐藏了nginx的版本信息:
在这里插入图片描述

5.2限制HTTP请求方法
(1)备份nginx.conf配置文件。
(2)编辑配置文件,添加如下内容:

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}

(3)保存,然后后重启nginx服务。
   备注:只允许常用的GET和POST方法,顶多再加一个HEAD方法
  
5.3限制IP访问
(1)备份nginx.conf配置文件。
(2)编辑配置文件,在server标签内添加如下内容:

location / {
deny 192.168.1.1; #拒绝IP
allow 192.168.1.0/24; #允许IP
allow 10.1.1.0/16; #允许IP
deny all; #拒绝其他所有IP
}

(3)保存,然后后重启nginx服务。

5.4限制并发和速度
(1)备份nginx.conf配置文件。
(2)编辑配置文件,在server标签内添加如下内容:

limit_zone one $binary_remote_addr 10m;
server
{
     listen   80;
     server_name down.test.com;
     index index.html index.htm index.php;
     root  /usr/local/www;
     #Zone limit;
     location / {
         limit_conn one 1;
         limit_rate 20k;
     }
………
}

(3)保存,然后后重启nginx服务。

5.5控制超时时间
(1)备份nginx.conf配置文件。
(2)编辑配置文件,具体设置如下:

client_body_timeout 10;  #设置客户端请求主体读取超时时间
client_header_timeout 10;  #设置客户端请求头读取超时时间
keepalive_timeout 5 5;  #第一个参数指定客户端连接保持活动的超时时间,第二个参数是可选的,它指定了消息头保持活动的有效时间
send_timeout10;  #指定响应客户端的超时时间

(3)保存,然后后重启nginx服务。

6.风险操作项

4.6.1 Nginx降权
(1)备份nginx.conf配置文件。
(2)编辑配置文件,添加如下一行内容:

user www;

(3)保存,然后后重启nginx服务。

4.6.2 防盗链
(1)备份nginx.conf配置文件。
(2)编辑配置文件,在server标签内添加如下内容:

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {
    valid_referers none blocked server_names *.nsfocus.com http://localhost baidu.com;
    if ($invalid_referer) {
        rewrite ^/ [img]http://www.XXX.com/images/default/logo.gif[/img];
        # return 403;
    }
}

(3)保存,然后后重启nginx服务。

4.6.3 补丁更新
(1)软件信息

查看软件版本 nginx -v 
测试配置文件 nginx –t

(2)补丁安装
手动安装补丁或安装最新版本软件

四、PHP配置加固

1.屏蔽PHP错误输出。

/etc/php.ini(默认配置文件位置),将如下配置值改为Off:

display_errors=Off

没关闭之前,输入错误语句,网页会返回错误信息:
在这里插入图片描述
关闭后:
在这里插入图片描述

2.屏蔽PHP版本。

默认情况下PHP版本会被显示在返回头里,如:X-powered-by: PHP/7.2.0
将php.ini中如下的配置值改为Off

expose_php=Off

没关闭前:
在这里插入图片描述

关闭后:
在这里插入图片描述

3.关闭全局变量

如果开启全局变量会使一些表单提交的数据被自动注册为全局变量。代码如下:

<form action="/login" method="post">
<input name="username" type="text">
<input name="password" type="password">
<input type="submit" value="submit" name="submit">
</form>

如果开启了全局变量,则服务器端PHP脚本可以用 u s e r n a m e 和 username和 usernamepassword来获取到用户名和密码,这会造成极大的脚本注入危险。

开启方法是在php.ini中修改如下:

register_globals=On

建议关闭,参数如下:

register_globals=Off

当关闭后,就只能从 P O S T 、 _POST、 POST_GET、$_REQUEST里面获取相关参数。

4.文件系统限制

可以通过open_basedir来限制PHP可以访问的系统目录。
设置方法如下:

open_basedir=/var/www;c:/phpstudy/www

5.禁止远程资源访问

allow_url_fopen=Off
allow_url_include=Off

在这里插入图片描述

6.开启安全模式(php<5.3)

safe_mode=On
safe_mode_include_dir = D:/phpstudy/www/include/

7.开启magic_quotes_gpc(php<5.4)

主要是对 G E T , _GET, GET,_POST,$_COOKIE数组里的函数自动转义

magic_quotes_gpc=On

8.禁用危险函数

disable_functions = phpinfo,eval,passthru,assert,exec,system,ini_set,ini_get,get_included_files,get_defined_functions,get_defined_constants,get_defined_vars,glob,chroot,``,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen

五、Mysql加固

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值