安全加固与应急响应
Linux操作系统加固
主要根据六个方面进行系统加固
版本升级、关闭端口服务、修改配置项(系统加固主要操作在此)、修改代码、主机和网络的ACL策略、部署设备防护
安全加固测试流程
回退测试——>业务测试——>有效性测试
Linux系统加固实施案例:
加固方向:
账号管理与认证授权:
创建多用途账号:
useradd、username、passwd、username
修改目录权限:
chmod 750 directory
chowe username:group:groupname directory
普通用户使用特定授权命令:
sudo
ifconfig
修改sudo的提权应用:
visudo
username host=shell
username host=!shell
例如Jerry可以在本地使用useradd命令
jerry localhost=/usr/sbin/useradd
注:host指的是可以在什么场景下使用如localhost仅本地
shell指允许使用什么命令如:/usr/sbin/[需要提权的命令]
!shell指的是权限拒绝
检查高权限文件:
find / -type f \(-prem -00007 \) -a -ctime -1 -exec ls -lg {}\
ctime:属性变更
mtime:内容变更
atime:被访问
除去不需要的账户,修改默认账户shell环境:
修改程序账户的登录shell
userad -s /sbin/nologin 【usename】
限制超级管理员远程SSH登录:
permitrootLogin no
检查那些用户的Uid为0
awk -F: '($3 == 0) { print $1 }' /etc/passwd
缩短默认密码周期
vim /etc/login.defs
pass_MAX_days xx 最长使用日期
pass_MIN_days xx 最短使用周期
pass_MIN_LEN xx 最小长度
pass_WARN_AGE xx 最长期限到期前多少天更该密码
设置密码其强度策略
/etc/pam.d/system-auth
password requisite pam_cracklib.so
try)first_pass retry= 3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minclass=3 minlen=8
·authconfig -dcredit=-1 最少一个数字 --update
lcredit=-1 最少一个字符
ucredit=-1 最少一个大写
ocredit=-1 最少一个小写
minclass=3 复杂度里面取三种
minlen=8 最短长度为8
注:/etc/security/pwqwuality.conf为Centos7之后的修改方法
强制密码历史
/etc/pam.d/system-auth
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
设置账户锁定策略
/etc/pam.d/system-auth /仅在调取系统进程认证的时候锁定
/etc/pam.d/sshd /仅在ssh登录锁定
/etc/pam.d/login /仅在本地登录锁定
auth required pam_tally2.so deny 6 unlock_time=300 even_deny_rootunlock_time 60
pam_tally2 --user userneme --reset /账户解锁
意思是错误6次密码会锁定当前账户300s,root账户60s,unlock_time和even_deny_rootunlock_time可选
修改Umask值:防止创建文件或目录时的默认权威那些,防止属于该组的其他用户级别组的用户修改该用户的文件
/etcprofile
/etc/csh.login
/etc/csh.cshrc
/etc/bashrc
umask 027即创建的目录和文件777或文件666减去027为当前真实权限
对用户使用 ls rm设置别名:
vim /.bashrc
追加别名:alias ls=“ls -alh” alias="rm -i"
禁止任何人su为root账户
修改su配置文件
auth sufficient /lib/security/pam_rootok.so /禁止切换root
auth required /lib/security//pam_whell.so
group=wheel //在wheel组里可以切换root
重要日志权限不应该高于640
ls -la /var/log
chmod -R 640 /var/log
设置关键文件底层属性
chattr +a /var/log/messages
chattr +i /var/log/messages.*
chattr +i /etc/shadow
chattr +i /etc/passwd
chattr +i /etc/group
日志服务器:
/etc/rsyslog.conf //日志服务器配置文件
开启接收日志功能
$modLoad imudp //开启udp日志接收
$UDPServerRun 514 //开启udp接口514
$template Remote,"/var/log/%$YEAR%-%$MONTH%-%$DAY%/%fromhost-ip%.log"
//日志文件路径
:fromhost_ip,!isequal,"127.0.0.1" ?Remote
//不存储什么本地信息
启用日志记录功能:增加审计记录,分布保存日志
进入日志配置文件
确认关键日志审计是否存在:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
//通用日志的,保存本地的位置
authpriv.* /var/log/secure
//安全日志本地保存位置
保存在远端,其他日志服务器上@表示udp传输,@@表示tcp传输:
*.info;mail.none;authpriv.none;cron.none @[ip]
//通用日志的,保存日志服务器ip
authpriv.* @[ip] //安全日志本地保
*.* /所有应用程序,所有级别都同步
banner与自动注销:
隐藏系统提示信息:避免通过系统提示信息获取系统状态
cat /etc/issue
清空banner文件
echo > /etc/issue
设置登录超注销
/etc/profile
在vim /etc/profile下HISTFILESIZE下面加入
TMOUT=180
生效
source /etcprofile
减少history历史数量
/etc/profile
HISTFILESIZE=50
跳过grup菜单:防止在grup菜单对引导过程进行修改
vi /boot/grup2/grup。cfg
set timeout=0
关闭ctrl+alt+del重启功能:防止误操作重启服务器
vim /usr/lib/systemd/system/ctrl-alt-del.target //注释掉所有内容
服务进程与启动:
关闭NFS服务:防止别外挂文件系统,导致入侵
ps aux | grep -E "lockd|nfsd|statd|moutd" /查找敏感进程
使用systemctl stop 关闭
关闭无用服务:关闭无用服务,提高系统性能,减低漏洞风险
systemctl list-unit-files | grep enabled /查看有那些自启动服务,并记录列表
建议关闭的服务:如无需要,建议关闭或卸载功能
rpm -qa | grep -E "^amanda|^chargen|^chargen-udp|^cups|^cups-lpd|^daytime|^daytime-udp|^echo|^echo-udp|^eklogin|^ekrb5-telnet|^finger|^gssftp|^imap|^imap|^imaps|^ipop2|^ipop3|^klogin|^krb5-telnet|^kshell|^ktalk|^ntalk|^rexec|^rlogin|^rsh|^rsync|^talk|^tcpmux-server|^telnet|^tftp|^time-dgram|^time-stream|^uucp"
通信协议:
关闭非机密远程管理telnet
vi /etc/xinetd.d/telnet
disable=yes /关闭telnet
设置访问控制列表
vim /etc/hosts.deny /拒绝策略
all:all /加入信息
vim /etc/hosts.allow /允许策略
sshd: /允许来访ip
打开syncookie:目的环节syn flood攻击
vim /etc/sysctl.conf
net.ipv4.tcp_syncookies=1 /开启syn队列
sysctl -p
不响应ICMP请求:不对ICMP请求做出响应,避免泄露信息
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all /修改网络策略布尔值
防止处理无源路由:防止被无源数据包利用
sysctl -n net.ipv4.conf.all.accept_source_route /查询是是否开启了路由功能
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
防御syn flood攻击优化:修改半连接上限,环节syn flood攻击
sysctl net.ipv4.tcp_max_syn_backlog /查询当前半连接上限
sysctl -w net.ipv4.tcp_max_syn_backlog="2048" /修改半连接上限
FTP使用黑白名单限制:防护工资非法用户访问ftp
/etc/ftpusers /黑名单是否包含高危账号
如:root daemon bin sys adm lp uucp nuucp listen nobody noaccess nobody4
/etc/user_list /白名单
注意:配置文件中需要检查是否存在userlist_deny=No,userlist_enable=YES
FTP设置上传权限:防止被上传执行脚本
vim /etc/vsftpd.conf
write_enable=YES
local_unmask=022
anon_unask=022
去掉FTP的banner信息:防止泄露服务信息
ftpd_banner="Authorized users only. All activity may be monitored and reported." /将提示信息删除
配置可信任的NTP服务器:保持时间同步,防止某些服务错误
/etc/ntp.conf是否存在如下内容
server x.x.x.x
确保服务被启用
systemctl enable ntpd
systemctl status ntpd
检查账户目录中是否存在高危文件.netrc .rhosts:防止被使用远程登录漏洞
for DIR in `cut -d":" -f6 /etc/passwd`; do
if [-e $DIR/。netrc]; then
echo "$DIR/.netrc"
fi
done //使用shell脚本检查 ,一般无返回值表示正常
/////////////////////////////////////////////////////////////////////////////////////
补丁管理:
使用yum更新
yum update //不推荐 yum update会导致服务大规模更新,导致业务中断
使用rpm安装
rpm -Fvh rpm包
Windows加固方向
按用户类型分配账号
根据系统要求,设定不同账户和组,管理员、数据库sa、审计用户、来宾用户等
打开本地用户和计算机管理器:打开运行,输入lusrmgr.msc
根据用户要求将账户加入功能组
右击账户 ->属性 ->更改隶属于
右击功能组 ->属性 ->成员
清理系统无用账户
删除或锁定与设备运行,维护等工作无关的账户,提高系统账号安全性
打开本地用户和计算机管理器:打开运行,输入lusrmgr.msc
删除或锁定无关账号(删除操作不可逆)
右击账户->删除
右击账户->属性->账户已禁用
重命名administrator,禁用guest
减少账户被爆破可能性,提高系统访问安全性
打开运行输入lusrmgr.msc
为管理员administrator账户改名
右击administrator->重命名->属性->全名
禁用来宾guest
右击guest->属性->账户已禁用
设置密码策略
防止弱口令出现,降低被爆破的可能性
打开本地安全策略:打开运行,输入secpol.msc
找到密码策略
账户策略->密码策略
修改默认值
密码必须符合复杂性要求:禁用->启用
密码长度最小值:0 -> 8
配置账户锁定策略
有效降低administrator意外的账户被爆破的几率
打开本地安全策略:打开运行,输入secpol.msc
找到密码策略
账户策略->账户锁定策略
账户锁定时间:未定义->30分钟
账户锁定阈值:0->6
复位账户锁定计时器:未定义->30分钟
远程关机权限设置
防止远程用户非法关闭系统
打开本地安全策略:打开运行,输入secpol.msc
找到用户权限分配
本地策略->用户权限分配
从远端系统强制关机策略中,只保留administrator组
设置从网络访问此计算机,防止非法用户通过网络访问计算机资源
打开本地安全策略:打开运行输入secpol.msc
找到用户权限分配
本地策略->用户权限分配
网络访问此计算机策略,加入授权用户
日志配置
审核策略设置
通过审核策略,记录系统登录时间,对象访问事件,软件安装事件,安全事件等
打开本地安全策略:打开运行输入secpol.msc
找到审核策略
本地策略->审核策略
修改审核策略
审核策略更改设置为成功和失败都要审核
日志记录策略设置
优化系统日志记录,防止日志溢出
进入条件查看器:打开运行输入eventvwr.msc
在日志属性中设置日志大学不小于1024KB,设置最大日志尺寸是,按需要改写时
间
IP协议安全
启用TCP/IP筛选,过滤掉不必要的端口,提高网络安全性
运维人员列出业务所需端口
打开本地连接
找到高级TCP/IP设置
右击本地连接->internet协议属性->高级TCP/IP设置
在选项的属性中启用网络连接的TCP/IP筛选,是开放业务协议端口
开启系统防火墙,多角度封堵业务以外的端口连接
运维人员列出业务所需端口
打开本地连接中的防火墙
在高级选项中设置启用Windows防火墙
设置例外
只允许业务端口接入网络
关闭默认共享,Windows默认共享区,关闭后提高信息安全性
打开注册表编辑器,编辑和新建键值:打开运行输入regedit.msc
展开lsa目录
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
调整restrictanonymous键值为1
建两个DWORO值分别命名为AutoShareWks和AutoShareServer
漏洞管理
安全系统补丁,修复系统漏洞,安装最新的service pack补丁集
部署WSUS服务器
从Microsoft Update下载补丁
在测试机上安装补丁后测试业务运行情况
使用WSUS服务器内网分发补丁
Windows服务
关闭无用服务
打开服务管理器:打开运行输入services.msc
关闭禁用服务
右击无关服务->属性->启动类型(禁用)->运行状态 ->停止
关闭Windows自动播放功能,防止从移动存储设备感染自运行病毒
打开组策略编辑器:打开运行输入gpedit.msc
找到策略所在
计算机配置->管理模块->系统->设置
关闭自动播放->已启用
关闭无用启动项
打开微软控制台:打开运行输入msconfig
在启动选项卡中去掉多余的启动项的”√“
Web中间件加固
HTTP服务加固
http,nginx,Tomcat防止webshell越权使用
修改httpd.conf
vi /etc/httpd/conf/httpd.conf
user adache或者nobody
group apache或者nobody
非超级用户权限禁止修改apache主目录
在httpd.conf文件中查找主目录的位置
grep "serverRoot" /etc/httpd/conf/httpd.conf
修改权限
chmod 修改权限目录权限
chmod -R 700 /etc/httpd
chmod 644 /var/log/httpd/*.log
修改httpd.conf,修改日志级别,记录格式
修改httpd.conf
更改错误日志
LogLevel notice (跟多的记录信息,但会占用大量空间)
ErrorLog /logs/error_log
更改访问日志
logFormat "%h %l %u %t \"%r\"% %>s %b \"%{Accept}i\"%{Referer}i\"\%{User-Agent}i""combined
// 修改日志格式
CustomLog /logs/access_log combined
防止使用web直接浏览目录内容
修改httpd.conf
去掉站点配置信息中的Indexes选项
例如:
<Directory "/var/www/html">
options Indexes FollowsymLins
AllowOverride None
Require all granted
</Directory>
Indexes:无法在当前目录下找到首页文件,就显示目录内容
防止通过默认错误反馈泄露敏感信息
修改httpd.conf
编辑错误显示页面配置
Errordocument 400 /error400.html
Errordocument 401 /error400.html
Errordocument 402 /error400.html
Errordocument 403 /error400.html
Errordocument 404 /error400.html
Errordocument 405 /error400.html
Errordocument 500 /error500.html
错误页面在站点根目录下创建,也可以在子目录中错误信息还可以使用“直接输入显示”
注意:但是实在网站下的相对路径
合理设置会话时间,防止之拒绝服务攻击
编辑httpd.conf
/etc/httpd.conf
timeout 10
keepalive 0n
Keepalivetimeout 15
此处的连接间接和session保持时间单位都是秒,一定要根据实际情况分析后再设定
隐藏程序版本号
编辑httpd.conf
修改信息如下:
ServerSignature Off
ServerTokens prod
关闭trace功能
编辑httpd.conf
traceEnable Off
禁用CGI:开启情况下,可以运行很多脚本,关闭后仅为文本格式
编辑httpd.conf
scriptAlias /cgi-bin "/var/www/cgi-bin"
<Directory "/var/www/cgi-bin">
AllowOverride None
Optins None
Require all granted
</Directory>
将上面内容注释掉,便是禁止
警用非法HTTP方法:禁用Put、delete等危险的HTTP
编辑httpd.conf
加入信息如下:
<Location />
<LimitExcept GET POST CONNECT OPTIONS>
AllowOverride none
Require all granted
</LimitExcept>
</Location>
排除以上危险方法
防止解析漏洞:防止非法文件绕过合法性检查
编辑Httpd.conf
<FilEsMatch \.php$>
SetHandler application/x-httpd-php
</Filesmatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
防止 sql注入:禁止php页面对sql注入
修改php.ini文件
vi /etc/php.ini
加入或修改信息:
magic——quotes_gpc=On
限制请求信息长度:防止溢出漏洞
编辑httpd.conf
添加信息
LimitRequestBoby 102400
Nginx服务加固
隐藏版本号
修改Nginx.conf文件
server-tokens off;
限制目录权限:为某些目录做运维页面,不要公开访问
编辑nginx.conf
在server标签内添加如下内容
location ~ /attachments/.*\.(php|phps)?${
deny all;
}
location ~ /(attachments|upload)/.*\.(php|phps)?${
deny all;
}
设置目录访问白名单
编辑nginx.conf文件
在server模块下修改
location /upload {
allow x.x.x.x/x;
allow x.x.x.x/x;
deny all;
}
禁止通过浏览目录内容
编辑nginx.conf
添加内容
autoindex off;
错误页面重定向:错误页面
编辑nginx.conf
在server模块下加入
error_page 404 /404.html;
location =/404.html/ {
root /uer/local/nginx/html;
}
修改日志格式,便于审计
修改nginx.conf
在http模块内启用标签的log_format格式
log_format main '&remoute_addr - &remoute-user [&time_local] "$request"' '$status '$status $body_bytes_sent "$http_referer" '"$http_user_agent" "$http_x_forwarded_for"';
在server模块内调用
access_log logs/host.access.log main
限制http请求方法:只允许常用的get和post方法,减少漏洞
编辑nginx.conf m
在server模块中加入判断
if($request_method !~* GET|POST){
return 403;
}
限制并发和速度:减缓ddos攻击时资源消耗速度
编辑nginx.conf
在http模块添加
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s
添加在server的location中
location / {
limit_req zone=allips burst=5 nodelay;;
limit_rate 20k
}
location /download {
limit_rate_after 10m
limit_rate 128k;
}
控制超时时间
编辑nginx.conf文件
在http模块中设置
client_boby_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;
防盗链:防止通过其他途径使用本网站资源
location ~* \.(jpg|jpeg|peg|gif|bmp|swf|rar|zip|doc|xls|pdf|gz|bz2|mp3|mp4|flv)$
valid_referers none blocked x.x.x.x *.baidu.com;
if($invalid_referer){
rewrite ^/ https://site.com/403.jpg
#return 403;
}
root /urs/share/nginx/img
nginx降权,防止高权限运行nginx进程
编辑nginx.conf
在http模式下修改:
user nobody
Tomcat防护
Tomcat控制台用户配置:第一次登录没有用户密码
修改tomcat /conf/tomcat-user.xml文件
在tomcat-users模块下修改
<role rolename="manager-gui"/>
<user username="admin" password="ABCabc123" roles="manager-gui"/>
开启Tomcat日志功能
修改conf/server.xml文件
去掉如下的注释符
<valve className ......>
自定义404错误页
在网站根目录下新建nofile.html
并查看启用tomcat/conf/web.xml文件中下列代码:
<error-page>
<error-code>404</error-code>
<location>/noFile.html</location>
</error-page>
注:有多个站点就需要更爱多少个xml
关闭目录浏览
编辑tomcat /conf/web.xml配置文件
<init-param>
<param-anme>listings</param-name>
<param-value>true</param-value>
</init-param>
注:将true改为false
禁用不安全的Http请求方式:
编辑tomcat /conf/web.xml
修改信息
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>HEAD</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
启动https加密访问
使用jdk的keytools生成密钥对
keytool -genkey -alias tomact -keyalg RSA -keystore /mydir/keystore
修改tomcat的web.xml文件取消注释信息后添加密钥路径和访问密码
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11protocol" maxThreads="150" SSLEnabled="trus" scheme="https" secure="true" ClientAuth="fales" keystoreFile="/mydir/meystore" KeystorePass="123.com" sslprotocol="TLS" />
标签:httpd,log,修改,中间件,系统,etc,conf,加固,日志
From: https://www.cnblogs.com/Tongyanxi/p/17987672