Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

MopLand/notes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

294 Commits

Repository files navigation

Security

安全更新

# RHSA-2017:1372: kernel security and bug fix update (Moderate)
yum update kernel
yum update kernel-firmware
yum update kernel-devel
yum update kernel-headers
yum update kernel-tools
yum update kernel-tools-libs
# RHSA-2016:2674: libgcrypt security update (Moderate)
yum update libgcrypt
yum update python-perf
# RHSA-2015:2550: libxml2 security update (Moderate)
yum update libxml2
# RHSA-2016:2587: wget security and bug fix update (Moderate)
yum update wget
# CVE-2021-3156: Heap-Based Buffer Overflow in Sudo (Baron Samedit)
yum update sudo
# glibc security update (Important)
yum update glibc
yum update glibc-common
yum update glibc-devel
yum update glibc-headers
# RHSA-2017:0641: openssh security and bug fix update (Moderate)
yum update openssh
yum update openssh-clients
yum update openssh-server
# RHSA-2017:0286: openssl security update (Moderate)
yum update openssl
yum update openssl-devel
# RHSA-2016:2972: vim security update (Moderate)
yum update vim-filesystem
yum update vim-minimal
# RHSA-2017:1100: nss and nss-util security update (Critical)
yum update nss-util
yum update nss
yum update nss-sysinit
yum update nss-tools

独立用户

Web 用户

useradd -d /disk/www -s /sbin/nologin www

Nginx

vi /etc/nginx/nginx.conf
# 指定用户
user nginx;
# 隐藏版本号
server_tokens off;
# CVE-2017-7529
max_ranges 1;

PHP-FPM

vi /etc/php-fpm.d/www.conf
user = nginx
group = nginx

只读权限

chmod -R 544 /disk/www
chgrp -R nginx /disk/www
chown -R nginx /disk/www

可写权限

chmod -R 744 /disk/www/example

安全选项

# vi /etc/sysctl.conf
# 使用 sysctl -p 生效配置
net.ipv4.tcp_syncookies = 0 #洪水攻击防范
net.ipv4.tcp_wmem = 4096 87380 4161536 #tcp发送缓存区
net.ipv4.tcp_rmem = 4096 87380 4161536 #tcp读取缓冲区
net.ipv4.tcp_mem = 786432 2097152 2145728 #tcp内存大小 low,pressure,high (tcp不考虑释放,tcp试图稳定内存值,最高值超过拒绝分配内存)
net.ipv4.ip_local_port_range = 1024 65534 #随机端口范围
net.ipv4.tcp_tw_recycle = 1 #tcp回收
net.ipv4.tcp_tw_reuse = 1 #tcp复用
net.core.somaxconn = 65535 #每一个端口最大的监听队列的长度

PHP

# 将用户可操作的文件限制在某目录下(使用后性能会下降)
open_basedir = /disk/www/

iptables

限制每次Nginx连接数

iptables -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –set
iptables -A INPUT -p tcp –dport 80 -i eth0 -m state –state NEW -m recent –update –seconds 60 –hitcount 15 -j DROP

图片策略

图片防盗链

# Stop deep linking or hot linking
location /images/ {
	valid_referers none blocked www.example.com example.com;
	if ($invalid_referer) {
		return 403;
	}
}

重定向并显示指定图片

valid_referers blocked www.example.com example.com;
if ($invalid_referer) {
	rewrite ^/images/uploads.*\.(gif|jpg|jpeg|png)$ http://www.examples.com/banned.jpg last
}

Nginx

指定每个给定键值的最大同时连接数,当超过这个数字时被返回503

limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
 location /www.ttlsa.com/ {
 limit_conn addr 1;
 }
}

限制单一IP来源的连接数,同时也会限制单一虚拟服务器的总连接数

limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
 limit_conn perip 10;
 limit_conn perserver 100;
}

限制平均每秒不超过一个请求,同时允许超过频率限制的请求数不多于5个

limit_req_zone $binary_remote_addr zone=ttlsa_com:10m rate=1r/s;
server {
 location /www.ttlsa.com/ {
 limit_req zone=ttlsa_com burst=5;
 }
}

如果不希望超过的请求被延迟,可以用nodelay参数

limit_req zone=ttlsa_com burst=5 nodelay;

限速白名单配置

http {
	geo $whiteiplist {
		default 1;
		127.0.0.1 0;
		10.0.0.0/8 0;
		121.207.242.0/24 0;
	}
	
	map $whiteiplist $limit {
		1 $binary_remote_addr;
		0 "";
	}
	
	limit_conn_zone $limit zone=limit:10m;
	
	server {
	 listen 8080;
	 server_name test.ttlsa.com;
	
	 location ^~ /ttlsa.com/ {
	 limit_conn limit 4;
	 limit_rate 200k;
	 alias /data/www.ttlsa.com/data/download/;
	 }
	}
}
1. geo指令定义一个白名单$whiteiplist, 默认值为1, 所有都受限制。 如果客户端IP与白名单列出的IP相匹配,则$whiteiplist值为0也就是不受限制。
2. map指令是将$whiteiplist值为1的,也就是受限制的IP,映射为客户端IP。将$whiteiplist值为0的,也就是白名单IP,映射为空的字符串。
3. limit_conn_zone和limit_req_zone指令对于键为空值的将会被忽略,从而实现对于列出来的IP不做限制。
测试方法
ab -c 100 -n 300 http://test.ttlsa.com:8080/ttlsa.com/docs/pdf/nginx_guide.pdf

禁止IP的访问

deny 10.0.0.0/24;

禁用访问某一目录

location ^~ /path {
	deny all; 
}

禁止php文件的访问及执行

示例:去掉单个目录的PHP执行权限

location ~ /attachments/.*\.(php|php5)?$ {
	deny all; 
}

示例:去掉多个目录的PHP执行权限

location ~ /(attachments|upload)/.*\.(php|php5)?$ {
	deny all; 
}

在配置文件中设置自定义缓存以限制缓冲区溢出攻击的可能性

client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

将timeout设低来防止DOS攻击

client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;

限制用户连接数来预防DOS攻击

limit_zone slimits $binary_remote_addr 5m;
limit_conn slimits 5;

DNS

对 IP 源无要求(优先考虑)

使用 百度云 加速等 CDN 产品来隐藏真实 IP

对 IP 源有要求

使用 负载均衡 来隐藏真实 IP,负载均衡可以比较快的部署

第三方域名绑定

提供 CNAME 域名来完成接入

相关链接

About

各种 Linux & MySQL & PHP 笔记文档和经验总结

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /