रिमोट आईपी HAProxy के साथ


19

मैं एक नए वेब सर्वर सेटअप का परीक्षण कर रहा हूं जिसमें कुछ मुद्दे हैं। अनिवार्य रूप से, हमारे पास एक वेब सर्वर है, जहां कोड कुछ दिलचस्प चीजों के लिए रिमोट आईपी का उपयोग करता है, और कुछ अपाचे निर्देशिकाओं को कुछ निश्चित आईपी (हमारे कार्यालय आदि) तक सुरक्षित किया जाता है।

हालाँकि, हमने अभी इसे ha_proxy के पीछे लगाया है, इसलिए हम कुछ और ऐप सर्वरों को जोड़कर देख सकते हैं, लेकिन अब रिमोट आईपी हमेशा प्रॉक्सी आईपी के रूप में आता है, वास्तविक रिमोट उपयोगकर्ता के रूप में नहीं। इसका मतलब है कि हम कुछ स्थानों पर नहीं पहुंच सकते हैं, और हमारा ऐप थोड़ा अजीब तरह से व्यवहार कर रहा है जहां उपयोगकर्ता आईपी महत्वपूर्ण है।

हमारा विन्यास इस प्रकार है:

global
      maxconn 4096
      pidfile /var/run/haproxy.pid
      daemon

defaults
      mode http
      retries 3
      option redispatch
      maxconn 2000
      contimeout 5000
      clitimeout 50000
      srvtimeout 50000

listen farm xxx.xxx.xxx.xxx:80
      mode http
      cookie GALAXY insert
      balance roundrobin
      option httpclose
      option forwardfor
      stats enable
      stats auth username:userpass

      server app1 xxx.xxx.xxx.xxx:80 maxconn 1 check

जवाबों:


31

Hproroxy डॉक्टर से haproxy.1wt.eu पर उद्धृत

- यदि एप्लिकेशन को मूल क्लाइंट के आईपी को लॉग इन करना है, तो इसका उपयोग करें
  "फ़ॉरवर्ड" विकल्प जो "एक्स-फॉरवर्ड-फॉर" हेडर के साथ जोड़ देगा
  मूल ग्राहक का आईपी पता। यह सुनिश्चित करने के लिए आपको "httpclose" का भी उपयोग करना चाहिए
  आप हर अनुरोध को फिर से लिखेंगे और न केवल प्रत्येक का पहला
  सत्र:
        विकल्प httpclose
        विकल्प आगे

यह कहा जाता है कि क्लाइंट आईपी पता जानने के लिए एप्लिकेशन को एक्स-फॉरवर्ड-फॉर HTTP हैडर का इलाज करना चाहिए। अपने मामले में जाने का एकमात्र तरीका लगता है।

HAProxy 1.4 के लिए अपडेट किया गया

Haproxy 1.4 ने "विकल्प http-server-close" के साथ एक नया मोड पेश किया। इसने अभी भी सर्वर से कनेक्शन को बंद कर दिया है, लेकिन यदि संभव हो और उपयोग किया जाता है, तो ग्राहक के प्रति बनाए रखना है। अधिकांश सेटअप पर, आप शायद इसका उपयोग करना चाहते हैं क्योंकि यह आपके कनेक्शन के एकल-विलंबता भाग (हाप्रोसी और क्लाइंट के बीच) पर विलंबता के साथ मदद करता है।

   option http-server-close
   option forwardfor

2
बेहतर उपयोग option forwardfor header X-Real-IPऔर reqidel ^X-Real-IP:, यह आपके लॉग में फ़ेकिंग आईपी को रोकता है। FYI करें: विकल्प के X-Real-IPलिए डिफ़ॉल्ट शीर्ष लेख है । NginXset_real_ip_from
तिनो

प्रश्न nginx का उल्लेख नहीं करता है। एक्स-रियल-आईपी काम नहीं करेगा।
रिक फ्लेचर

1. क्या इन दोनों विकल्पों को फ्रंटएंड या बैकएंड कॉन्फिगर सेक्शन में सेट करना है? (क्योंकि वे यहाँ काम नहीं करते हैं) 2. क्या टॉमकैट-स्तर पर किसी भी प्रकार के विन्यास की आवश्यकता है?
यगलोड

6

Tproxy को शामिल करने के लिए HAproxy को फिर से जोड़ने का एक तरीका है जो स्रोत पते को अग्रेषित करने की अनुमति देगा।

इसके बारे में यहाँ एक ब्लॉग पोस्ट है: http://blog.loadbalancer.org/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/

कुछ नोट:

नवीनतम लिनक्स कर्नेल (2.6.28-11-सर्वर) में टीपीरोक्सी के लिए समर्थन शामिल है, इसलिए कर्नेल को फिर से स्थापित करना आवश्यक नहीं है।

अपने वेब फ़ार्म में सर्वरों को एक डिफ़ॉल्ट गेटवे पते से कॉन्फ़िगर करना सुनिश्चित करें जो HAProxy सर्वर की ओर इशारा करता है।


2

उपयोग rpaf अपाचे मॉड्यूल http://stderr.net/apache/rpaf/ मैं जानता हूँ कि यह वह जगह है और पुराने पोस्ट लेकिन यह मुझे इस लगाने के लिए दिन का समय लगा। यह किसी भी एप्लिकेशन को एक्स-फॉरवर्डेड-फॉर आईपी के लिए प्रस्तुत करेगा।


1

ध्यान दें कि ऐसा प्रतीत होता है कि आप यह देख सकते हैं कि अपाचे हेडर को बदलने से एप्लिकेशन को क्या दिखाई देता है:

SetEnvIf X-Forwarded-For (.*) REMOTE_ADDR=$1
SetEnvIf X-Forwarded-For (.*) REMOTE_IP=$1

हालांकि, यह "अनुमति से" आदि के माध्यम से अपाचे पहुंच के लिए काम नहीं करता है।


यदि क्लाइंट किसी मौजूदा X-Forwarded-Forहेडर को भेजता है तो यह अप्रत्याशित परिणाम दे सकता है क्योंकि कॉमा और स्पेस द्वारा अलग किए गए मौजूदा सूची के अंत में नया आईपी एड्रेस जोड़ा जाता है। बदले (.*)के लिए ([^ ]*)$केवल पिछले आईपी ... या उपयोग हड़पने के लिए mod_rpafया mod_remoteipअपाचे 2.4 के लिए या बाद में।
लद्दादाद

1

डिजाइन द्वारा HAProxy, मूल आईपी पते को वास्तविक सर्वर पर अग्रेषित नहीं कर सकता है, किसी भी अन्य प्रॉक्सी की तरह ही।

एक समाधान हो सकता है, अगर आपकी एकमात्र समस्या वेब सर्वर के साथ है, एक्स-फॉरवर्डेड-फॉर HTTP हेडर में देखने के लिए, जिसमें क्लाइंट का पता होना चाहिए। अब, यह बहुत अधिक अनुप्रयोग / भाषा विशिष्ट है, लेकिन php में इस उदाहरण पर एक नज़र डालें:

$headers = apache_request_headers();

$real_client_ip = $headers["X-Forwarded-For"];

यदि आप मूल पता भी लॉग इन करना चाहते हैं, तो आप कुछ इस तरह से देखने के लिए httpd.conf में LogFormat को संशोधित कर सकते हैं:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{X-Forwarded-For}i\"" common


गलत, आप विकल्प "फॉरवर्ड" के साथ कर सकते हैं
विट

हां, और यह विकल्प डिफ़ॉल्ट रूप से आता है, लेकिन यह क्या करता है एक्स-फॉरवर्डेड-फॉर HTTP हेडर सेट कर रहा है। मैं क्या कह रहा था, और यह मुझे दिखता है कि पूछने वाला वास्तव में क्या पूछ रहा था, आईपी पैकेट के वास्तविक स्रोत पते के बारे में था
थियागोद्रव

0

खैर, ऐसा लगता है कि एक्स-फॉरवर्डेड आपके सेटअप के लिए अच्छा काम नहीं करता है। तो, क्या आपके पास haproxy के साथ रहने का कोई विशेष कारण है? ऐसा लगता है कि IPVS आपकी आवश्यकताओं के लिए अधिक उपयुक्त है (मैं वास्तव में ldirector का उपयोग करता हूं जो बदले में ipvs का उपयोग करता है)।

पर एक नज़र डालें:

http://kb.linuxvirtualserver.org/wiki/IPVS

तथा

http://www.vergenet.net/linux/ldirectord/

'आईपी टनलिंग' या 'डायरेक्ट रूटिंग' मोड में आईपीवीएस का उपयोग करने से ग्राहक का पता सुरक्षित रहता है।


0

से mod_extract_forwarded कोशिश http://www.openinfo.co.uk/apache/

LoadModule extract_forwarded_module modules/mod_extract_forwarded.so
MEFOrder refuse,accept
MEFRefuse all
MEFAccept xxx.xxx.xxx.xxx

-1

मोड tcp और nginx में haproxy के साथ आसान तरीका:

सर्वर विकल्प के रूप में भेजें-प्रॉक्सी जोड़ें:

haproxy.conf:

सुनिए ssl 0.0.0.0:443

मोड tcp

संतुलन कम से कम

विकल्प httpchk GET / पिंग

विकल्प लॉग-हेल्थ-चेक

सर्वर w1 192.168.1.1:443 सेंड-प्रॉक्सी चेक चेक-एसएसएल कोई भी सत्यापित नहीं करता है

सर्वर w2 192.168.1.1:443 सेंड-प्रॉक्सी चेक चेक-एसएसएल कोई नहीं सत्यापित करें

Nginx को प्रॉक्सी-प्रोटोकॉल का समर्थन चाहिए

nginx.conf:

192.168.1.1:443 ssl प्रॉक्सी_प्रोटोकॉल सुनें;

set_real_ip_from 192.168.1.0/24;

real_ip_header प्रॉक्सी_प्रोटोकॉल;

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.