0%

web 服务的版本号对于恶意的攻击者无疑是有帮助的,因为不同版本号或多或少有其对应的漏洞,一旦被恶意的攻击者发现将对线上服务造成严重危害。而隐藏服务版本号则有助于提升 web 的安全性。

阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 不同 worker 绑定到不同核上,提高 CPU 缓存命中率,auto 根据 worker 数量自动绑定 CPU。
worker_cpu_affinity auto;

sendfile on;
tcp_nopush on;
tcp_nodelay on;

keepalive_timeout 60;

ssl_session_tickets on;
ssl_session_ticket_key ticket.key;

# 所有 worker 进程之间共享的缓存大小,1兆大约可以存储 4000 个会话,此处可存储 40000 个会话。
ssl_session_cache shared:SSL:10m;
# 会话超时时间
ssl_session_timeout 10m;

listen 80 reuseport backlog=8192; # reuseport linux > 3.9 CentOS >= 7.0

用于加密和解密TLS会话票据的密钥设置,生成 ticket 文件,必须含有80或48个字节的随机数据。

1
openssl rand 80> ticket.key

certbot 自动化脚本生成 Let’s Encrypt 免费证书。

1
2
3
yum install python2-certbot-nginx

certbot --nginx --nginx-server-root=/usr/local/nginx/conf/ -d test.codezm.com

域名 test.codezm.com 必须可访问。CA机构才能颁发证书。https://certbot.eff.org/docs/install.html

Tcp 优化

SYN_RCVD 状态
  • SYN - SYN_RECEIVED QUEUE
    • net.ipv4.tcp_max_syn_backlog=262144 接收 SYN 最大数量,半链接个数。SYN
      • 查看:cat /proc/sys/net/ipv4/tcp_max_syn_backlog
    • net.ipv4.tcp_synack_retries 被动建立连接时,发送 SYN/ACK 的重试次数。SYN+ACK
      • 查看:cat /proc/sys/net/ipv4/tcp_synack_retries
  • ACCEPT - ESTABLISHED QUEUE
    • net.core.somaxconn 系统级最大 backlog 队列长度。
    • nginx 端口限制 backlog 队列长度
      • listen 80 backlog=8192;
    • 如何查看 Accept queue 溢出?
      • netstat -s | grep LISTEN ,返回 SYNS to LISTEN sockets ignored 时。

防止 SYN 攻击,开启 net.ipv4.tcp_syncookies=1 ,在 SYN 队列满时,启用 cookie。

一切皆文件:句柄数的上限

操作系统全局
  • fs.file-max 操作系统可使用的最大句柄数

    1
    sysctl -a | grep file-max
- fs.file-nr 查看当前已分配(正使用)、待重新分配、上限
限制用户
  • /etc/security/limits.conf

    • root soft nofile 65535
    • root hard nofile 65535

    限制 root 用户,软、硬链接个数。

    hard 强制的、真实的链接,soft 软的限制,进程在运行时自动的修改软限制、但无法修改硬的,soft 一定要小于 hard

* - noproc 11000

  • * 代表针对所有用户

  • - 的意思为 softhard 全部限制。

  • nofile 代表最大文件打开数

  • noproc 代表最大进程数

限制进程

Syntax: worker_rlimit_nofile number;

Default: -

Context: main

限制一个 worker 进程最大能打开的文件句柄数。

活动连接数查看
  • ss -n | grep ESTAB | wc -l
Tcp Fast Open - TFO

image-20201230172342579

net.ipv4_tcp_fastopen 需 Client、Server 两端均支持 TFO。

  • 0:关闭
  • 1:作为客户端时可以使用TFO
  • 2:作为服务端时可以使用TFO
  • 3:无论作为客户端还是服务端,都可以使用TFO

Syntax: listen address[:port] [fastopen=number];

Default: listen *:80 | *:8000;

Context: server

fastopen=number 为防止带数据的 SYN 攻击,限制最大长度,指定 TFO 连接队列的最大长度。

worker 进程最大连接数量

包括 Nginx 与上游、下游间的连接。

Syntax: worker_connections numbers;

Default: worker_connections 512;

Context: events

参考

通过 VirtualBox CentOS-8 虚拟机搭建VirtualBox CentOS-8 虚拟机配置 两篇文章成功搭建并简单配置了 CentOS 虚拟机,本篇将讲解如何将虚拟机共享给他人或者复制出多台虚拟机以供使用。

系统、软件版本:

  • System:macOS Majave 10.14.6
  • VirtualBox: 6.0.22 r137980 (Qt5.6.3)
阅读全文 »

常用工具汇总

  • vim 文件编辑工具。

  • net-tools 网络工具包:ifconfignetstatroute,详情见:yum info net-tools

  • pcre2-tools 工具包: pcre2test:可效验 nginx 路由正则规则。

  • tcpdump 用于抓取、分析网络包。

配置 SSH 远程登录

1
[root@codezm ~]# vi /etc/ssh/sshd_config

vi normal 模式下,可使用 / 搜索关键字,示例:依次按键 / + Port +Enter。使用 x 删除 # 注释符号。

Port 22
ListenAddress 0.0.0.0

ListenAddress ::

PermitRootLogin yes
PubkeyAuthentication yes

更改完毕后键入 :wq 保存并退出文件编辑操作。

为使配置生效,需重启 sshd 服务。

1
$ systemctl restart sshd

关闭防火墙

1
2
$ systemctl stop firewalld
$ systemctl disable firewalld

关闭SELinux

  • 查看 SELinux 状态

    1
    2
    3
    4
    [root@codezm ~]# /usr/sbin/sestatus -v
    SELinux status: disabled
    [root@codezm ~]# getenforce
    Disabled
    • Disabled 表示关闭
    • Enabled 表示开启
  • 临时关闭 SELinux

    1
    $ setenforce 0
  • 永久关闭 SELinux,更改配置文件之后需重启机器使之生效。

    1
    $ sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

CentOS 系统没落后记

  • https://rockylinux.org/ 将继续延续 CentOS ,并基于上游稳定 RHEL 版本构建。
  • 迁移 CentOS 8、7、6 至 Oracle Linux