Debian 操作系统常用配置方案

Debian 操作系统常用配置,是根据我的服务器操作系统环境总结归纳的一些常用配置指令和环境参数。这些配置主要涵盖防火墙、入侵检测、传输优化、名称解析、网页服务器。由于 Ubuntu 衍生自 Debian,因此软件安装和配置体验上大致相同。

简单防火墙 UFW

UFW 是一个管理操作系统防火墙的组件。它简化了人们使用 iptables 配置防火墙的指令,因此成为了一个流行的命令行工具。在 Ubuntu 操作系统中 UFW 是默认内置的应用程序,而在任何 Debian-based 操作系统中,都可以安装 UFW。

1
2
3
4
5
6
7
8
9
apt install ufw               # 安装 UFW
ufw default deny incoming # 设置默认禁止所有数据流入
ufw default allow outgoing # 设置默认允许所有数据流出
ufw allow ssh # 设置允许 TCP/22 数据流入
ufw allow http # 设置允许 TCP/80 数据流入
ufw allow https # 设置允许 TCP/443 数据流入
ufw allow 2333/tcp # 设置允许自定义端口 TCP/2333 数据流入
ufw logging off # 关闭日志
ufw enable # 开启 UFW

在最后一步开启 UFW 时需要谨慎!如果此时仍然在使用 SSH 连接服务器,要确保 SSHD 监听端口已经放行。如果配置错误,将会导致 SSH 无法访问,此时只能使用 VNC 连接或者去机房使用密码登录。如果需要删除一行配置,比如此前配置的 ufw allow http,只需要执行 ufw delete allow http

入侵检测 Fail2ban

Fail2ban 是一个入侵检测框架,它通过巡查服务器的日志文件当中失败的登录来判断是否通知防火墙禁止某个可疑 IP 的客户端访问服务器。这种防御对于通过穷举密码来破解服务器的手段非常有用。由于 Debian 操作系统当中 sshd、telnetd 跟 ftpd 都是常用的支持密码登录的服务,因此安装 Fail2ban 之后就会自动对它们的登录日志进行监听。

1
apt install fail2ban          # 安装 Fail2ban

传输优化 TCP BBR

TCP 拥塞控制是传输控制协议,是避免网络拥塞的算法,也是互联网上主要的一个拥塞控制措施。具体细节比较复杂,总之可以优化 TCP 传输过程。根据我的体验,在服务器上开启 TCP BBR 确实能在一定程度上保障 TCP 传输速率。

1
2
3
4
echo 'net.core.default_qdisc=fq' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' >> /etc/sysctl.conf
sysctl -p # 重新载入 sysctl 配置文件
lsmod | grep bbr # 查询 TCP BBR 模块运行状况

网页服务器 Nginx

这可能是必备的高性能网页服务器。我只是罗列了一些通用的配置选项。

关闭日志

如果你不想关心 Nginx 服务器的日志内容,也不想日志文件塞满你狭小的服务器存储空间,可以尝试关闭他们。

1
2
3
log_not_found off;          # 关闭404日志
access_log off; # 关闭访问日志
error_log /dev/null; # 不可以关闭错误日志,但可以将其输出到 /dev/null

隐藏信息

总有一些奇怪的人类想打探我们服务到底是用什么程序跑起来的,而这是我们隐私,我们也可以假装将其隐藏起来。

1
2
3
server_tokens     off;             # 隐藏 Nginx 版本
proxy_hide_header X-Powered-By; # 隐藏后端服务头部信息
proxy_hide_header Server; # 隐藏后端网页服务器名称

安全传输

我们尊重用户的隐私,当然就要保障数据传输过程的安全性。

SSL session

如果设置一个合适的 SSL session 缓存周期,用户下一次加密连接可以快速启动。

1
2
3
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;

Mozilla Intermediate configuration (2020 年末推荐)

本站已经停用了 TLSv1.0 和 TLSv1.1。如果您已经正常访问本页面,恭喜您,您正在使用现代化的浏览器。

1
2
3
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

OCSP Stapling

某些浏览器会在网站加载时通过证书颁发机构验证网站证书的有效性,但可能会因此在用户的流畅浏览体验上打折扣。我们现在可以在服务器上缓存这样一个验证签名,直接在客户浏览器访问时交给它,节省了浏览器的处理时间,同时也能避免泄露用户浏览器正在访问的域名。

1
2
3
4
ssl_stapling        on;
ssl_stapling_verify on;
resolver 127.0.0.53 valid=60s;
resolver_timeout 2s;

Nginx 要监听至少一个 DNS 服务器,我使用的是操作系统提供的名称解析服务 127.0.0.53 地址,这需要你先开启系统上的名称解析服务。

开启名称解析服务

操作系统的名称解析服务同时监听上游的 DNS 服务器和本地的 /etc/hosts 文件,后者的优先级更高。如果有程序需要监听 DNS 地址,可以试着使用这个功能。

1
systemctl enable --now systemd-resolved.service

开启服务后,DNS 查询服务常驻 127.0.0.53:53/UDP