আমি কীভাবে এসএসএলের সাথে এইচএপ্রক্সি ব্যবহার করতে পারি এবং এক্স-ফরোয়ার্ড-ফর শিরোনাম পেতে পারি এবং পিএইচপি কে বলতে পারি যে এসএসএল ব্যবহৃত হচ্ছে?


20

আমার নিম্নলিখিত সেটআপ আছে:

(internet) ---> [  pfSense Box  ]    /-> [ Apache / PHP server ]
                [running HAproxy] --+--> [ Apache / PHP server ]
                                    +--> [ Apache / PHP server ]
                                     \-> [ Apache / PHP server ]

এইচটিটিপি অনুরোধের জন্য এটি দুর্দান্ত কাজ করে , অনুরোধগুলি আমার অ্যাপাচি সার্ভারগুলিতে ঠিকঠাক বিতরণ করা হয়। এসএসএল অনুরোধগুলির জন্য, আমার কাছে এইচআরসি টিসিপি লোড ব্যালেন্সিং ব্যবহার করে অনুরোধগুলি বিতরণ করেছিল এবং এটি কাজ করেছে যেহেতু এইচআরসি প্রক্সি হিসাবে কাজ করে নি, এটি X-Forwarded-Forএইচটিটিপি শিরোনামটি যুক্ত করে না , এবং অ্যাপাচি / পিএইচপি সার্ভারগুলি ক্লায়েন্টটির জানত না আসল আইপি ঠিকানা

সুতরাং, আমি stunnelএইচএপ্রক্সির সামনে যুক্ত করেছি, এই স্ট্রানেলটি X-Forwarded-Forএইচটিটিপি শিরোনাম যুক্ত করতে পারে reading যাইহোক, আমি যে প্যাকেজটি পিএফসেন্সে ইনস্টল করতে পারি তা এই শিরোলেখটিকে যুক্ত করে না ... এছাড়াও, এটি আপাতদৃষ্টিতে আমার কিপএলাইভ অনুরোধগুলি ব্যবহার করার ক্ষমতা হারাবে যা আমি সত্যিই রাখতে চাই। তবে যে ধারণাটি হত্যা করেছিল তার মধ্যে সবচেয়ে বড় সমস্যাটি হ'ল স্ট্রিনাল এইচটিটিপিএস অনুরোধগুলিকে সরল এইচটিটিপি অনুরোধে রূপান্তর করেছিল, তাই পিএইচপি জানত না যে এসএসএল সক্ষম হয়েছিল এবং এসএসএল সাইটে পুনর্নির্দেশের চেষ্টা করেছিল।

বেশ কয়েকটি এসএসএল সার্ভারগুলিতে ভারসাম্য লোড করতে আমি এইচএপ্রক্সি কীভাবে ব্যবহার করতে পারি, সেই সার্ভারগুলিকে ক্লায়েন্টের আইপি ঠিকানা উভয়ই জানতে এবং এসএসএল ব্যবহার করা হচ্ছে তা জানতে দেয়? এবং যদি সম্ভব হয় তবে আমি কীভাবে এটি আমার পিএফএসেন্স সার্ভারে করতে পারি?

বা আমি এই সব ছেড়ে এবং শুধু nginx ব্যবহার করা উচিত?


3
লিখেছেন: stunnel এবং X-Forwarded-Forদেখুন এখানে
শেন ম্যাডেন

@ শানে: ধন্যবাদ ঠিক সেখানেই আমি পড়েছি যে আমি কীপলাইভ :-) হারাতে পেরেছি
জোশ

2
চমৎকার ASCII ডায়াগ্রামিংয়ের জন্য +1। :-)
কাইলফারিস

@ অ্যালানহ্যামলেট, আপনার লিঙ্কটি 404
ভাগ্যডোনাল্ড

@ লাকিডোনাল্ড ধন্যবাদ, একটি আপডেট লিঙ্ক এখানে। আপনি আপনার হ্যাপ্রোক্সি কনফিগারেশনে প্রেরণ-প্রক্সি কীওয়ার্ড যুক্ত করে প্রক্সি প্রোটোকল ব্যবহার করতে পারেন। আমি এখানে উদাহরণ সহ একটি ব্লগ পোস্ট লিখেছি: wakatime.com/blog/23-how-to-scale-ssl-wproxy-and-nginx
অ্যালান হ্যামলেট

উত্তর:


17

আপনার সমস্ত কিছু ফেলে দেওয়ার দরকার নেই, আপনি আপনার সমস্ত ভারসাম্য রক্ষাকারীকরণের কনফিগারেশন রেখে এসএসএল সমর্থনের জন্য হ্যাপ্রোক্সিটির সামনে এনগিনেক্স ব্যবহার করতে পারেন। আপনি না চাইলে এমনকি HTTP- র জন্য nginx ব্যবহার করার দরকার নেই to এনগিনেক্স এক্স-ফরওয়ার্ড-ফর উভয় পাশ করতে পারে এবং এসএসএল নির্দেশিত একটি কাস্টম শিরোলেখ ব্যবহৃত হয় (এবং আপনি চাইলে ক্লায়েন্ট শংসাপত্রের তথ্য)। Nginx কনফিগার স্নিপেট যা প্রয়োজনীয় তথ্য প্রেরণ করে:

proxy_set_header SCHEME $scheme;      # http/https
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header CLIENT_CERT $ssl_client_raw_cert;

37

কেবল রেকর্ডের জন্য, যেমন এই থ্রেডটি প্রায়শই HAProxy + SSL সম্পর্কিত উল্লেখ করা হয়, HAProxy 1.5-dev12 থেকে উভয় পক্ষের নেটিভ এসএসএলকে সমর্থন করে। এক্স-ফরওয়ার্ড-ফর থাকার কারণে, এইচটিটিপি জীবিত রাখার পাশাপাশি সার্ভারকে এই শিরোনাম দেয় যে সংযোগটি এসএসএল-এর মাধ্যমে তৈরি হয়েছিল নিচের মতোই সহজ:

listen front
    bind :80
    bind :443 ssl crt /etc/haproxy/haproxy.pem
    mode http
    option http-server-close
    option forwardfor
    http-request set-header X-Forwarded-Proto https if { ssl_fc }
    server srv1 1.1.1.1:80 check ...
    ...

আমি নিশ্চিত যে আপনি যখনই অন্যরকম কিছু নিয়ে এসেছেন, তবে কমপক্ষে নতুন দর্শক এখন সহজ সমাধানটি পাবেন :-)


ধন্যবাদ, এটি ভাল সাধারণ তথ্য ... আমার প্রশ্নটি পিএফসেন্সে চলমান এইচআরসি সম্পর্কিত ছিল তাই আপাতত এখনও আমার এইচএপ্রক্সির সামনে এনজিনেক্স ব্যবহার করা দরকার, যেহেতু পিএফসেন্স HAProxy (এখনও) এর এই সংস্করণটিকে সমর্থন করে না
জোশ

দুঃখিত জোশ, আপনি এটিতে উপাদানগুলি আপডেট করতে পারেন কিনা তা জানার জন্য আমি পিএফসেন্স সম্পর্কে যথেষ্ট জানেন না এবং যেহেতু আপনি প্যাকেজ ইনস্টল করার কথা বলছিলেন, আমি বিশ্বাস করি এটিই কেস। গতবার চেষ্টা করেছিলাম প্রায় 5 বছর আগে তাই আমার সমস্ত বিবরণ মনে নেই।
উইলি তারেরউ

1
আমি আপাতত হ্যাপ্রোক্সি কনফিগারেশন সম্পর্কে খুব বেশি বুঝতে পারি না, তবে সর্বশেষতম সংস্করণ সহ, আমাকে একটি এসিএল যুক্ত করতে হয়েছিল: acl is-ssl dst_port 443এবং একটি লাইন পুনরায় লিখতে হবে: reqadd X-Forwarded-Proto:\ https if is-ssl
এনগিনেক্স

এটা চমত্কার ভাবে কাজ করেছে. কোন nginx প্রয়োজন।
জে টেলর

1
@ গ্রেগ0 টায়ার কারণ এটি সর্বশেষ হ্যাপ্রোক্সি সহ এসএসএল_এফসি এর পরিবর্তে কোনও এসএসএল_ফসি নেই
জোছ

12

এই প্রশ্নটি খুঁজে পাওয়া অন্য কারও জন্য আমি ওচোটোর পরামর্শ অনুসরণ করে এনজিনেক্স ব্যবহার করেছি। আমার পিএফসেন্স রাউটারে এই কাজটি করার জন্য আমি নির্দিষ্ট পদক্ষেপগুলি এখানে ব্যবহার করেছি :

  1. Pfsense ওয়েব ইন্টারফেস ব্যবহার করে, আমি সিস্টেম> প্যাকেজগুলির অধীনে pfsense PfJailctl প্যাকেজ এবং "জেল_টেমপ্লেট" প্যাকেজটি ইনস্টল করেছি যাতে আমি একটি ফ্রিবিএসডি জেল তৈরি করতে পারি যার অধীনে পিফসেনস সিস্টেমে এনজিনেক্স সংকলন এবং ইনস্টল করতে পারি।

  2. আমি সার্ভিস> জেলস এর অধীনে আমার এনগিনেক্স সার্ভারের জন্য একটি জেল কনফিগার করেছি , নতুন জেলটি ভার্চুয়াল আইপি ওরফে একই হোস্টনাম এবং আইপি ঠিকানা দিয়েছিল যা আমার HAproxy চলছিল। আমি জেলটি WAN ইন্টারফেসের সাথে আবদ্ধ করেছি। আমি ডিফল্ট জেল টেম্পলেট এবং নালফের পরিবর্তে ইউনিয়নফকে সক্ষম করেছি।

  3. একবার জেল শুরু হয়ে গেলে, আমি এসএসএইচডে পিফসেন্স বাক্সে প্রবেশ করি এবং jlsজেলের নম্বরটি খুঁজতে দৌড়ে যাই । আমি তখন ছুটে গেলাম jexec 1 shকারাগারের ভিতরে শেল পেতে। সেখান থেকে আমি বিএসডি বন্দরগুলি স্থাপন করেছি এবং ব্যবহার করে এনজিনেক্স ইনস্টল করেছি:

    portsnap extract
    portsnap fetch update
    cd /usr/ports/www/nginx
    make install clean
    
  4. তারপরে আমি 443 পোর্টে শুনতে এনজিনেক্সকে কনফিগার করেছি এবং এইচটিটিপি শিরোনামের মধ্যে আসল আইপি এবং এসএসএল স্ট্যাটাস সহ 80 পোর্টের এইচএপ্রক্সিতে সমস্ত অনুরোধগুলি পাস করেছি। আমার usr/local/etc/nginx/nginx.confদেখতে দেখতে:

    worker_processes  1;
    
    events {
        worker_connections  2048;
    }
    
    http {
        upstream haproxy {
            server 209.59.186.35:80;
        }
    
        server {
            listen       443;
            server_name  my.host.name default_server;
            ssl                  on;
            ssl_certificate      my.crt;
            ssl_certificate_key  my.key;
            ssl_session_timeout  5m;
    
            ssl_protocols  SSLv3 TLSv1;
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers   on;
    
            location / {
                proxy_pass http://haproxy;
    
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
                proxy_set_header X-Forwarded-Proto https;
            }
        }
    
    }
    
  5. তারপরে আমি X-Forwarded-Protoএইচটিটিপি শিরোনাম সনাক্ত করতে আমার পিএইচপি অ্যাপ্লিকেশনটি সংশোধন করেছি :

    function usingSSL()
    {
        return (
           (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' )
            || (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
                   && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https' ));
    }
    

সুতরাং চূড়ান্ত সেটআপটি হ'ল:

(internet) ---> [ -> nginx -> haproxy -]--> (pool of apache servers)
                [    (pfSense server)  ]

2
আপনার সত্যিকারের প্রয়োজন না হলে আপনার SSLv2 অক্ষম করা উচিত। gnu.org/software/gnutls/manual/html_node/… আমি জানি না কেন Nginx এখনও এটির ডিফল্ট কনফিগারেশনে সমর্থন করে।
ওচোটো

এছাড়াও বুঝতে পারেন যে 1024 কর্মী সংযোগের মাধ্যমে আপনি সর্বাধিক 512 একযোগে ক্লায়েন্ট সমর্থন করবেন।
ওচোটো

@ ওকোটো: এই দুটি টিপসের জন্য ধন্যবাদ! আমি HAproxy এ নতুন তবে Nignx এর সাথে আরও কম পরিচিত ...
জোশ

7

হ্যাপ্রোক্সিটির 1.5-ডেভ -17 সংস্করণের জন্য আমার কনফিগারেশন:

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy
        user haproxy
        group haproxy
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        option  http-server-close
        retries 3
        option redispatch
        fullconn 1000        
        maxconn 1000
        timeout queue 600s
        timeout connect 5s
        timeout client 600s
        timeout server 600s

frontend http-in
        bind *:80
        bind *:443 ssl crt /usr/local/etc/ssl/certs
        reqadd X-Forwarded-Proto:\ https if { ssl_fc }
        default_backend varnish-ha
        option forwardfor
backend varnish-ha
  server hafront1 10.1.69.1:6081  minconn 100 maxqueue 10000

এটি ssl_fcএসিএল ব্যবহার করে । দয়া করে মনে রাখবেন যে option http-server-closeঅংশটি খুব গুরুত্বপূর্ণ।


ধন্যবাদ! আমি HAProxy v1.4 চালাচ্ছি তাই আমি মনে করি না যে আমি এটি করতে পারি তবে এটি অন্যকে সাহায্য করতে পারে।
জোশ

হ্যাঁ, এবং 1.5 টি খুব শীঘ্রই বাইরে বেরিয়ে আসা উচিত।
গ্রেগ 01 ই

5

হ্যাপ্রক্সি কাঁচা টিসিপি মোড ব্যবহার না করে হারানো কোনও এসএসএল ব্যাকএন্ডে আঘাত করতে পারে না X-Forwarded-For, তবে, আপনি ব্যাকএন্ড ট্রানজিটের জন্য শোনার স্টানাল দিয়ে ট্র্যাফিকটিকে পুনরায় এনক্রিপ্ট করতে পারেন। কুৎসিত, যদিও।

আমি ক্যাচিয়েট সহ ওচোটোর পদ্ধতির চেয়ে ভাল পছন্দ করি: এনজিনেক্স পুরোপুরি সক্ষম লোড ব্যালেন্সার; আপনি যদি এটি ব্যবহার করে থাকেন তবে আমি বলব যে এটি সবকিছুর জন্য ব্যবহার করুন। সুষম এইচটিটিপিএস ব্যাকেন্ডগুলি লোড করতে আপনার আগত এইচটিটিপিএসের প্রক্সি করুন - এবং এইভাবে, এসএসএল তথ্যের জন্য কাস্টম শিরোনামের প্রয়োজন নেই (যদি না আপনি ক্লায়েন্টের শংসাপত্রের প্রয়োজন না হয়)।


আমি নিশ্চিত না কেন আমি এইচএপ্রক্সিতে আটকে আছি। আমি মনে করি এটি কারণ pfSense এর জন্য একটি প্যাকেজ রয়েছে এবং এসওআইএস এটি ব্যবহার করে। একটিও দুর্দান্ত কারণ নয় is :-)
জোশ

আমি একটি উপযুক্ত লোড ব্যালেন্সারকে মেশানো এনজিন্স থেকে খুঁটিয়েছি, যদি না আপনি মানসম্মত মডিউল upstream_fair ব্যবহার না করেন তবে গন্তব্য ব্যাকএন্ড ইতিমধ্যে অনুরোধগুলিতে ব্যস্ত থাকে এবং এইভাবে ব্যাকএন্ডে ক্রম বাড়ার সময় যদি অ্যাকাউন্টটি গ্রহণ না করে এটি একটি সাধারণ রাউন্ড রবিন (বা ক্লায়েন্ট আইপি হ্যাশ) করে না when অন্যান্য ব্যাকেন্ডগুলি নিখরচায় রয়েছে এবং একটি কাজের জন্য অপেক্ষা করছে। HAProxy এগুলি সম্পর্কে ব্যাকেন্ডগুলি এবং পরিসংখ্যানগুলিও দুর্দান্তভাবে পর্যবেক্ষণ করে।
ওচোটো

নিম্নলিখিতগুলির মধ্যে কেবল কোনও একটি সত্য হয়ে
উঠলে

আমি এসএসএলের জন্য এনগিনেক্স -> হ্যাপ্রোক্সি -> এনজিনেক্স -> ব্যাকএন্ড ব্যবহার করে একটি সেটআপ স্থাপন করেছি, এটি এখানে আলোচিত হেরপোক্সিতে এইচটিটিপিএস সমর্থনের অভাবের কারণে, তবে এনজিএনএক্স http স্বাস্থ্য পরীক্ষার স্ক্রিপ্টগুলিকে সমর্থন করে না বলেও এটি ঘটেছে।
জেফ্রি

2

আমি গত বছর পিএফএসেন্সির সাথে এইচপি প্রক্সিকে সংহত করার জন্য একটি সমাধান প্রয়োগ করেছি যাতে এটি HAProxy এর সমস্ত বৈশিষ্ট্যের ক্ষতি করে এবং পিএফসেন্সের সাথে একটি ভাল বিচ্ছিন্নতা বজায় রাখে। যাতে এটি উত্পাদন পরিবেশের জন্য একটি কার্যকর বিকল্প । এসএলএল HAProxy এ সমাপ্ত হয় । আমি ইজেজেল এবং পোর্টস কালেকশন ব্যবহার করে পিএফসেন্সে একটি কারাগারের অভ্যন্তরে HAProxy ইনস্টল করেছি । এইভাবে উভয় উপাদান স্বাধীনভাবে বজায় রাখা খুব সহজ। এবং আপনি যা চান সংস্করণ ইনস্টল করতে পারেন। আমি 1.5-dev13 দিয়ে শুরু করেছি। এবং তারপর থেকে এটি আমার জন্য নিখুঁতভাবে কাজ করছে। আমি এখানে পুরো জিনিস নথিভুক্ত করেছি।

পিএফসেন্সে HAProxy ইনস্টল করা

বিটিডাব্লু উইলি, এই জাতীয় একটি দুর্দান্ত পণ্যের জন্য আপনাকে অনেক ধন্যবাদ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.