小编Syn*_*hro的帖子

您是否需要在 nginx 中使用单独的 IPv4 和 IPv6 侦听指令?

我看过各种配置示例,用于在 nginx 上处理双栈 IPv4 和 IPv6 虚拟主机。许多人建议这种模式:

listen 80;
listen [::]:80 ipv6only=on;
Run Code Online (Sandbox Code Playgroud)

据我所知,这与以下内容完全相同:

listen [::]:80 ipv6only=off;
Run Code Online (Sandbox Code Playgroud)

为什么要使用前者?我能想到的唯一原因是您是否需要特定于每个协议的其他参数,例如,如果您只想deferred在 IPv4上设置。

nginx ipv6 ipv4

86
推荐指数
4
解决办法
7万
查看次数

配置了 http2 的 Nginx 不提供 HTTP/2

我的 Nginx 配置有问题。我升级到 nginx 1.9.6 来测试 http/2 但它在我的服务器上不起作用。

我使用了 ubuntu 14.04.2 LTS

这是 nginx -V 输出:

nginx version: nginx/1.9.6
built with OpenSSL 1.0.2d 9 Jul 2015
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-pcre-jit --with-debug --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-http_v2_module --with-stream --with-ipv6 --with-mail --with-mail_ssl_module --with-openssl=/build/nginx-GFP362/nginx-1.9.6/debian/openssl-1.0.2d --add-module=/build/nginx-GFP362/nginx-1.9.6/debian/modules/nginx-auth-pam --add-module=/build/nginx-GFP362/nginx-1.9.6/debian/modules/nginx-echo --add-module=/build/nginx-GFP362/nginx-1.9.6/debian/modules/nginx-upstream-fair --add-module=/build/nginx-GFP362/nginx-1.9.6/debian/modules/nginx-dav-ext-module --add-module=/build/nginx-GFP362/nginx-1.9.6/debian/modules/nginx-cache-purge
Run Code Online (Sandbox Code Playgroud)

这是我的虚拟主机配置:

server {
    listen         80;
    server_name    localhost;
    return         301 https://$server_name$request_uri;
}

server { …
Run Code Online (Sandbox Code Playgroud)

nginx openssl

33
推荐指数
1
解决办法
2万
查看次数

Nginx 正则表达式 vhost 模式最终作为 PHP 服务器名称

我有一个带有正则表达式匹配的 nginx 服务器定义,如下所示:

server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
Run Code Online (Sandbox Code Playgroud)

这一切都运行良好,但是,该域托管使用 fastcgi 和 PHP-FPM 的各种 PHP 项目,它们在$_SERVER以下位置接收如下值:

SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST   => "myhost.example.com"
Run Code Online (Sandbox Code Playgroud)

如您所见,正则表达式模式被放入SERVER_NAME而不是它匹配的字符串中。这对我来说似乎有点问题,并且也代表了安全风险,因为它会泄露不必要的细节(在其他配置中,我匹配一组特定的名称而不是通配符)。

您可能会说“使用 HTTP_HOST 而不是 SERVER_NAME” - 如果只是这么简单 - 有些库希望 SERVER_NAME (毫不奇怪)包含服务器的名称。我真的看不到这种行为的良好用例。

nginx

12
推荐指数
1
解决办法
2183
查看次数

IPv6 隐私扩展 use_tempaddr=1 与 use_tempaddr=2

我了解隐私扩展,并且您可以通过设置 use_tempaddr 来启用它们。不幸的是我没有找到不同设置的任何解释。我阅读的每篇文章都使用了 1 或 2 或引用了 kernel.org,而没有进一步解释。

Kernel.org 文档*:

use_tempaddr - INTEGER
  Preference for Privacy Extensions (RFC3041).
    <= 0 : disable Privacy Extensions
    == 1 : enable Privacy Extensions, but prefer public
           addresses over temporary addresses.
    >  1 : enable Privacy Extensions and prefer temporary
     addresses over public addresses.
  Default:  0 (for most devices)
           -1 (for point-to-point devices and loopback devices)
Run Code Online (Sandbox Code Playgroud)

1但我还是不明白和之间的区别>1。公共 IP 与临时 IP 相比是什么?是用 DHCP 分配/静态设置的吗?或者是其他东西?

感谢您的帮助!

ipv6 privacy linux-networking

9
推荐指数
1
解决办法
5811
查看次数

邮件服务器的完美转发保密 (PFS)

Perfect Forward Secrecy是 SSL/TLS 通信的重要增强,即使攻击者拥有私钥,也有助于防止捕获的 SSL 流量被解密。在 Web 服务器中支持它很容易,但它也适用于任何其他 SSL 上下文,例如用于 SMTP、POP3 和 IMAP 的邮件服务器。

这最近(2014 年 9 月)在德国达到了顶峰,数据保护机构已经开始检查和罚款在其邮件服务器上不支持 PFS 的组织,以及 Heartbleed 和贵宾犬漏洞。Web 浏览器中的 PFS 支持有些参差不齐,尽管所有主要浏览器都支持它 - 但我正在寻找邮件服务器和客户端上的 PFS 兼容性信息,理想情况下类似于SSL Labs的握手测试提供的信息,但用于邮件服务器。

任何人都可以提供或指出邮件服务器 PFS 兼容性的良好来源吗?

澄清一下,我不是要询问特定的服务器,而是要查看在各种不同服务器上进行此类测试的结果,例如,了解 Outlook 2003 不支持 ECDHE 或 Android 会很有用2 不允许大于 2048 位的 DH 参数(我不知道这些是否属实,它们只是示例)。这样做的好处是知道如果我选择禁用某些特定的密码,它可能会影响哪些客户端,就像 SSL 实验室测试为 Web 客户端显示的那样。

security email ssl email-server tls

6
推荐指数
1
解决办法
1838
查看次数

MySQL /nonexistent home vs “没有目录,使用 HOME=/ 登录”

MySQL 的 Debian/Ubuntu 软件包中的 preinst 脚本将 MySQL 服务器的默认主目录设置为/nonexistent,大概是作为一种安全措施 - MySQL 服务器有自己的datadir路径,它像主目录一样使用。

但是,这样做的一个副作用是,当 MySQL 启动时,它会生成以下消息:

No directory, logging in with HOME=/
Run Code Online (Sandbox Code Playgroud)

我在这里担心的是,从安全的角度来看,这看起来并不好。它表明它会推动 MySQL 尝试在/; 显然,由于权限的原因,它应该无法做到这一点,但最好不要尝试。我已经看到通过创建主目录来“解决”这个问题的答案,但这似乎是荒谬的,因为这样做的全部意义在于它没有,尽管它可能是“安全的”,因为 MySQL 也被设置为/bin/false用作它的外壳.

将它设置为确实存在并且 MySQL 拥有所有权的东西是否更安全,例如/var/lib/mysql

或者创建文件夹,但不允许 MySQL 写入?

有更清洁的解决方案吗?

mysql security permissions

6
推荐指数
1
解决办法
4338
查看次数

应从何处获取 CAA 颁发者 ID?应如何对其进行验证?

证书颁发机构授权 (CAA) DNS 记录类型包括一个issue参数(也issuewild),该参数指定允许为您的域颁发证书的证书颁发机构的标识符。没关系,但有点模糊。

在您自己的 CAA 记录中设置值时,您应该如何找出您的 CA 的确切值?对于 letencrypt,他们在此处提供了一份文档其中提到了他们的问题标识符是letsencrypt.org,并且在他们的认证实践声明第 4.2.1 节中也有记录。如果我检查证书,我可以看到其中的各种字段,但是,尽管有一些包含它,但没有一个与此字符串完全匹配。这似乎不是确保 CA 与 CAA 记录中的内容相匹配的严格或可靠的方法——例如,是什么阻止了它被匹配letsencrypt.org.evilcorp.com

从人类的角度来看,这都是可行的,但机器可读性不是很强,并且是该 CA 独有的。

我也有来自 Comodo 的证书,我发现各种非权威来源说他们的 CAA 问题 ID 是comodoca.com(其他人说是comodo.com),但我还没有找到像 letencrypt 这样的官方文档。该comodoca.com字符串确实出现在我的证书的某些字段中,但不是出现在我希望能够可靠地找到它的上下文中 - 例如颁发者名称是COMODO ECC Domain Validation Secure Server CA (COMODO CA Limited from GB),CRL 是http://crl.comodoca.com/COMODOECCDomainValidationSecureServerCA.crl,OCSP URI 是http://ocsp.comodoca.com

SSLMate 有一个CAA 记录生成器,它包括一个 CA 列表及其颁发者 ID …

domain-name-system certificate-authority caa-record

6
推荐指数
1
解决办法
515
查看次数

在游戏之间共享 ansible 变量

这是对这个问题的跟进。

我有一个配置一堆 EC2 实例的游戏。根据需要,该hosts值为localhost(因为当它运行时没有主机),并且 play 组装一个名为 的新主机列表ec2hosts,并生成一个主机 ip 到主机名映射,因为这是该信息第一次也是唯一一次可用,并且使用set_fact. 这个主机列表然后是后续播放的主题。问题是我需要hostname_map在第二个播放中使用配置播放期间创建的字典,我看不到如何执行此操作。

这是第一场比赛:

- hosts: localhost
  connection: local
  gather_facts: False

  tasks:
    - name: Provision a set of instances
      ec2:
        key_name: marcus
        instance_type: t2.micro
        image: "{{ ami_id }}"
        wait: true
        exact_count: "{{ server_count }}"
        count_tag:
          Tutorial: "{{ tutorial_name }}"
        instance_tags:
          Tutorial: "{{ tutorial_name }}"
        groups: ['SSH', 'Web']
      register: ec2

    - name: Add all instance public IPs to host group …
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 ansible

6
推荐指数
1
解决办法
1万
查看次数

Apache 和多个 PHP-FPM 池

我有两个站点,我在 Ubuntu 12.04 上使用 PHP-FPM 5.4 从 apache 2.2 虚拟主机运行。到目前为止,我一直在使用服务器范围的(库存)mod_fastcgi 配置,但现在我想将其拆分为两个 FPM 池,以便我可以为每个池使用不同的 PHP 设置(例如,一个是开发站点,因此启用了错误显示) )。

我已经根据文档设置了两个具有不同名称和套接字位置的 FPM 池,禁用了全局 fastcgi 配置,将其复制到我的 vhost 中,并将其更改为指向每个 vhost 的不同池,如下所示:

<IfModule mod_fastcgi.c>
    <FilesMatch \.php$>
        SetHandler php-script
    </FilesMatch>
    Action php-script /php5.fcgi virtual
    Alias /php5.fcgi /var/fastcgi/php5.fcgi
    FastCGIExternalServer /var/fastcgi/php5.fcgi -socket /var/run/php5-fpm-www.sock
    <Directory "/var/fastcgi">
        Order allow,deny
        <Files "php5.fcgi">
            Order deny,allow
            Deny from all
            Allow from env=REDIRECT_STATUS
        </Files>
    </Directory>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

实际上有 4 个虚拟主机,因为每个主机名都有常规和 SSL 风格,并且每一对都指向一个 FPM 池。

我遇到的问题是 apache 抛出一个错误说:

FastCgiExternalServer: redefinition of previously defined class "/var/fastcgi/php5.fcgi"
Run Code Online (Sandbox Code Playgroud)

这应该怎么做?

php mod-fastcgi php-fpm apache-2.2

4
推荐指数
1
解决办法
2万
查看次数

覆盖特定位置的 CSP 标头

我有一个 nginx 配置,其中包含为所有请求提供服务的 CSP 标头。现在我需要在一个特定位置覆盖它(也恰好被重写)。我在想这样的事情:

server {
  listen 80;
  listen [::]:80;

  server_name example.com;
  root /var/www;
  index index.php;

  try_files $uri @rewrites;

  add_header Content-Security-Policy "default-src 'self' ; script-src 'self' ; style-src 'self' 'unsafe-inline' ; img-src * 'self' data: ; font-src 'self' ; media-src * 'self' ; form-action 'self'";

  location @rewrites {
    rewrite ^/special/([0-9]*) /special.php?id=$1 last;
    rewrite ^/foo/([a-z]+) /foo.php?method=$1 last;
  }

  location /special {
    add_header Content-Security-Policy "default-src 'self' ; script-src 'self' 'unsafe-inline' ; style-src 'self' 'unsafe-inline' ; img-src * 'self' data: ; font-src …
Run Code Online (Sandbox Code Playgroud)

nginx

3
推荐指数
1
解决办法
2945
查看次数

Ansible '错误!缺少目标主机

我正在尝试在 OS X 上使用 Ansible 2.1.1.0 获得一些非常基本的东西。

我的目标都是 Ubuntu 16.04,所以我要做的第一件事就是让它安装 python2.7,因为没有它,即使 'ping' 也无法工作。

我在以下位置设置了这样的库存servers

[dbservers]
192.168.x.x set_hostname=db

[webservers]

[servers:children]
dbservers
webservers
Run Code Online (Sandbox Code Playgroud)

这是我的游戏init.yml

---
- hosts: servers
  gather_facts: False
  become: yes
  tasks:
     - name: apt-get update
       raw: /usr/bin/apt-get update -qq
     - name: Install python 2.7
       raw: test -e /usr/bin/python || /usr/bin/apt-get install -q -y python2.7 python-simplejson
Run Code Online (Sandbox Code Playgroud)

我通过指定dbservers组来检查它是否选择了正确的主机,该组是servers(无论如何只有 1 个)的一个子集,这对我来说是正确的:

# ansible dbservers -i servers --list-hosts
  hosts (1):
    192.168.x.x
Run Code Online (Sandbox Code Playgroud)

我正在运行的命令是这样的:

# ansible dbservers -i …
Run Code Online (Sandbox Code Playgroud)

ansible

2
推荐指数
1
解决办法
2万
查看次数