Score:0

Ip ไคลเอนต์จริงพร้อม Cloudflare, Docker, Traefik และ nginx ตั้งค่าเป็นเมลพร็อกซี (ไคลเอ็นต์-Ip ในสคริปต์ PHP ไม่ใช่ในเซิร์ฟเวอร์เมลอัปสตรีม)

ธง id

ฉันตั้งค่า nginx เป็นเมลพร็อกซี แต่ฉันมีปัญหาในการตรวจหาของจริง Client-Ip ในสคริปต์การตรวจสอบสิทธิ์ php ที่เรียกโดย nginx ผ่าน auth_http.
ฉันไม่สนใจรับ IP จริงบนเซิร์ฟเวอร์อีเมลอัปสตรีม

นี่คือกองของฉัน:

  • Cloudflare จัดการ DNS
  • ส่วนที่เหลือจัดการด้วย Docker ทั้งหมด

นักเทียบท่า-compose.yml:

รุ่น: '3.9'

บริการ:
  เทรฟิค:
    ชื่อคอนเทนเนอร์: traefik
    รูปภาพ: traefik:v2.6.0
    พอร์ต:
      - "80:80"
      - "443:443"
      - "465:465"
      - "993:993"
      - "995:995"
      ...
    ป้ายกำกับ:
      - traefik.enable=จริง
      - traefik.http.routers.traefik-public-https.tls=true
      ...
    ปริมาณ:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      ...
    สั่งการ:
      - --providers.docker
      - --providers.docker.exposedbydefault=false
      - --entrypoints.http.address=:80
      - --entrypoints.https.address=:443
      - --entrypoints.entrypoint-nginx-mail-465.address=:465
      - --entrypoints.entrypoint-nginx-mail-993.address=:993
      - --entrypoints.entrypoint-nginx-mail-995.address=:995
      - --entrypoints.entrypoint-forwardedHeaders-trustedIPs.forwardedHeaders.trustedIPs=${TRAEFIK_TRUSTED_IPS}
      ...

  จิงซ์:
    ชื่อคอนเทนเนอร์: nginx
    ภาพ: nginx:1.21
    ปริมาณ:
      - ${PWD}/sys/nginx/vhosts:/etc/nginx/conf.d
      - ${PWD}/sys/nginx/custom.d:/etc/nginx/custom.d
      ...
    ป้ายกำกับ:
      - traefik.enable=จริง

      - traefik.tcp.routers.router-nginx-mail-465.entrypoints=entrypoint-nginx-mail-465
      - traefik.tcp.routers.router-nginx-mail-465.rule=HostSNI(`*`)
      - traefik.tcp.routers.router-nginx-mail-465.tls=true
      - traefik.tcp.routers.router-nginx-mail-465.tls.certresolver=le
      - traefik.tcp.routers.router-nginx-mail-465.service=service-nginx-mail-465
      - traefik.tcp.services.service-nginx-mail-465.loadbalancer.server.port=587

      - traefik.tcp.routers.router-nginx-mail-993.entrypoints=entrypoint-nginx-mail-993
      - traefik.tcp.routers.router-nginx-mail-993.rule=HostSNI(`*`)
      - traefik.tcp.routers.router-nginx-mail-993.tls=true
      - traefik.tcp.routers.router-nginx-mail-993.tls.certresolver=le
      - traefik.tcp.routers.router-nginx-mail-993.service=service-nginx-mail-993
      - traefik.tcp.services.service-nginx-mail-993.loadbalancer.server.port=143

      - traefik.tcp.routers.router-nginx-mail-995.entrypoints=entrypoint-nginx-mail-995
      - traefik.tcp.routers.router-nginx-mail-995.rule=HostSNI(`*`)
      - traefik.tcp.routers.router-nginx-mail-995.tls=true
      - traefik.tcp.routers.router-nginx-mail-995.tls.certresolver=le
      - traefik.tcp.routers.router-nginx-mail-995.service=service-nginx-mail-995
      - traefik.tcp.services.service-nginx-mail-995.loadbalancer.server.port=110

      ...
  php-fpm:
    ชื่อคอนเทนเนอร์: php-fpm
    ภาพ: bitnami/php-fpm:7.4
    userns_mode: 'โฮสต์'
    ป้ายกำกับ:
      - traefik.enable=false
    ...

.env:

#https://www.cloudflare.com/ips
# ปรับปรุงล่าสุด: 8 เมษายน 2564
TRAEFIK_TRUSTED_IPS=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/ 13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22,2400:cb00::/32,2606:4700::/32,2803:f800::/32,2405:b500::/32,2405:8100: :/32,2a06:98c0::/29,2c0f:f248::/32
...

sys/nginx/vhosts/00-main.conf:

เซิร์ฟเวอร์ {
    ฟัง [::]:80;
    ฟัง 80;

    server_name localhost;

    รูท /app/public;

    ดัชนี index.php;

    ที่ตั้ง ~ /\ {
        ปฏิเสธทั้งหมด
    }

    ตำแหน่ง ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        รวม fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

sys/nginx/custom.d/mail.conf:

จดหมาย {
    ชื่อเซิร์ฟเวอร์ _;
    auth_http localhost:80/proxy.php;
    เปิด proxy_pass_error_message;

    imap_capabilities IMAP4 IMAP4rev1 ล็อกอิน-ผู้อ้างอิง SASL-IR เปิดใช้งาน ID LITERAL+;
    pop3_capabilities CAPA RESP-CODES USER TOP AUTH-RESP-CODE PIPELINING UIDL;
    smtp_capabilities การวางท่อ "ขนาด ***" ETRN ENHANCEDSTATUSCODES 8BITMIME DSN CHUNKING;
    ...

    เซิร์ฟเวอร์ {
        ฟัง 110;
        โปรโตคอล pop3;
        สะดุ้งเมื่อ;
        auth_http_header X-Auth-พอร์ต 110;
        auth_http_header User-Agent "พร็อกซี POP3";
    }

    เซิร์ฟเวอร์ {
        ฟัง 143;
        โปรโตคอล imap;
        สะดุ้งเมื่อ;
        auth_http_header X-Auth-พอร์ต 143;
        auth_http_header User-Agent "พร็อกซี IMAP";
    }

    เซิร์ฟเวอร์ {
        ฟัง 587;
        โปรโตคอล smtp;
        สะดุ้งเมื่อ;
        auth_http_header X-Auth-พอร์ต 587;
        auth_http_header User-Agent "SMTP พร็อกซี";
    }
}

getallheaders() ภายใน proxy.php:

อาร์เรย์ (
  'User-Agent' => 'พร็อกซี IMAP',
  'X-Auth-Port' => '143',
  'ไคลเอ็นต์-ไอพี' => '172.27.0.2',
  'Auth-เข้าสู่ระบบ-พยายาม' => '1',
  'Auth-โปรโตคอล' => 'imap',
  'Auth-Pass' => '***',
  'Auth-User' => '***',
  'Auth-Method' => 'ธรรมดา',
  'โฮสต์' => 'โลคัลโฮสต์',
  'ความยาวเนื้อหา' => '',
  'ประเภทเนื้อหา' => '',
)

$_SERVER ภายใน proxy.php:

อาร์เรย์ (
  'HTTP_USER_AGENT' => 'พร็อกซี IMAP',
  'HTTP_X_AUTH_PORT' => '143',
  'HTTP_CLIENT_IP' => '172.27.0.2',
  'HTTP_AUTH_LOGIN_ATTEMPT' => '1',
  'HTTP_AUTH_PROTOCOL' => 'imap',
  'HTTP_AUTH_PASS' => '***',
  'HTTP_AUTH_USER' => '***',
  'HTTP_AUTH_METHOD' => 'ธรรมดา',
  'HTTP_HOST' => 'โลคัลโฮสต์',
  'REDIRECT_STATUS' => '200',
  'SERVER_NAME' => 'โลคอลโฮสต์',
  'SERVER_PORT' => '80',
  'SERVER_ADDR' => '127.0.0.1',
  'REMOTE_PORT' => '49360',
  'REMOTE_ADDR' => '127.0.0.1',
  'SERVER_SOFTWARE' => 'nginx/1.21.3',
  'GATEWAY_INTERFACE' => 'CGI/1.1',
  'REQUEST_SCHEME' => 'http',
  'SERVER_PROTOCOL' => 'HTTP/1.0',
  'DOCUMENT_URI' => '/proxy.php',
  'REQUEST_URI' => '/',
  'SCRIPT_NAME' => '/proxy.php',
  'CONTENT_LENGTH' => '',
  'CONTENT_TYPE' => '',
  'REQUEST_METHOD' => 'รับ',
  'QUERY_STRING' => '',
  'FCGI_ROLE' => 'ตอบกลับ',
  'PHP_SELF' => '/proxy.php',
  ...
)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา