CentOs web服务器安全防范经验总结
系统层面(CentOs)
1.禁用ROOT权限登录。(重要)
2.安全组收缩不使用的端口,建议除443/80以及ssh登录等必要端口外全部关闭。
3.防火墙收缩不使用的端口,建议除443/80以及ssh登录端口外全部关闭。
4.更改ssh默认端口22
5.除登录USER,禁止其他用户su到root进程,并且ssh开启秘钥及密码双层验证登录。(重要)
6.限制除登录USER外的其他用户登录。
7.安装DenyHosts,防止ddos攻击。
8.禁止系统响应任何从外部/内部来的ping请求。
9.保持每天自动检测更新。
10.禁止除root之外的用户进程安装软件及服务,如有需要则root安装,chown给到用户。
11.定时给服务器做快照。
12.更改下列文件权限:
chattr +i /etc/passwd chattr +i /etc/shadow chattr +i /etc/group chattr +i /etc/gshadow
13.限制普通用户使用特殊命令,比如wget,curl等命令更改使用权限,一般的挖矿程序主要使用这几种命令操作。
NGINX层面
1.nginx进程运行在最小权限的子用户中,禁止使用root用户启动nginx。(重要)
2.配置nginx.conf,防范常见漏洞:
#目录穿越漏洞
location /files/ {
alias /home/;
}
#隐藏版本号
server_tokens off;
#最小权限启动
user nobody;
#只允许get/post请求
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 403;
}
#拒绝User-Agent访问
if ($http_user_agent ~* LWP::Simple|BBBike|wget|curl) {
return 444;
}
#去掉file路径的php执行
location ~ /file/.*\.(php|php5)?$ {
deny all;
}
if ($http_user_agent ~* "java|python|perl|ruby|curl|bash|echo|uname|base64|decode|md5sum|select|concat|httprequest|httpclient|nmap|scan" ) {
return 403;
}
#强制网站使用域名访问
if ( $host !~* 'www.xxx.club' ) {
return 403;
}
#封杀特定的url
location ~* \.(bak|save|sh|sql|mdb|svn|git|old)$ {
rewrite ^/(.*)$ $host permanent;
}
#过滤文件请求
location ~ ^/file/ {
if ($request_filename ~* ^.*?\.(txt|doc|pdf|apk)$){
add_header Content-Disposition: 'attachment';
add_header Content-Type application/octet-stream;
}
root /home/loversign;
}
Apache层面
1.禁止root权限启动apache服务!禁止root权限启动apache服务!禁止root权限启动apache服务!重要的事情说三遍!因为这个问题被搞了两次。
2.改掉默认端口。
3.清空webapps下除自己服务外的其他文件,删除用户管理文件,防止给木马留下后门。
4.限制apache启动进程su到root进程以及ssh登录,限制启动进程访问除/home/xx自身目录外的其他文件。
5.限制apache启动进程操作删除以及编辑文件,一般a+x即可。
数据库层面(MySql)
1.关闭外网连接,与java/php服务使用内网连接。
2.在满足java/php服务的基础上,新建最小权限USER给到服务使用,禁止USER权限访问其他项目的库。
3.root密码不要与普通USER相同。
4.建议使用云库,云库具备实时备份,动态扩容,数据回退等功能,减少操作风险。
Redis层面
1.关闭外网连接,只允许内网交互,基本这个做了之后就已经稳了。
2.禁止root权限启动,运行在普通用户进程里。
3.更改默认端口。
4.添加登录密码。
以上是自己做的防范手段,不成熟见解,有一些方案待验证,不定时更新,欢迎大佬补充!