nginx রিয়েল_আইপ_হেডার এবং এক্স-ফরওয়ার্ড-ফর ভুল মনে হচ্ছে


58

HTTP শিরোনামের উইকিপিডিয়া বর্ণনাটি X-Forwarded-Forহ'ল:

এক্স-ফরওয়ার্ড-এর জন্য: ক্লায়েন্ট 1, প্রক্সি 1, প্রক্সি 2, ...

দিকনির্দেশনার জন্য এনজিনেক্স ডকুমেন্টেশন real_ip_headerঅংশে:

এই নির্দেশিকাটি প্রতিস্থাপনের আইপি ঠিকানা স্থানান্তর করতে ব্যবহৃত শিরোনামের নাম সেট করে।
এক্স-ফরওয়ার্ড-ফর ক্ষেত্রে, এই মডিউলটি প্রতিস্থাপনের জন্য এক্স-ফরওয়ার্ড-ফর শিরোনামের সর্বশেষ আইপি ব্যবহার করে । [জোর আমার]

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

আমার বোঝাপড়াটি X-Real-IPহ'ল প্রক্সি নয় বরং প্রকৃত ক্লায়েন্টের আইপি ঠিকানা নির্ধারণ করার জন্য এটি ব্যবহার করার কথা । আমি কি কিছু মিস করছি, বা এটি কোনও এনগেক্সে বাগ আছে?

এবং এর বাইরেও, কারও কাছে কীভাবে কোনও সংজ্ঞা আছে যে কীভাবে শিরোনামকে সংজ্ঞা দ্বারা নির্দেশিত হিসাবে বাম- সর্বাধিক মানটি X-Real-IPপ্রদর্শন করা যায় ?X-Forwarded-For

উত্তর:


95

আমি বিশ্বাস করি যে একাধিক আইপি বেঁধে দেওয়া হলে এক্স-ফরওয়ার্ডড-ফর ঝামেলা সমাধানের মূলটি হ'ল সম্প্রতি চালু করা কনফিগারেশন বিকল্প, real_ip_recursive(এনজিনেক্স ১.২.১ এবং ১.৩.০ এ যুক্ত)। থেকে nginx realip ডক্স :

যদি পুনরাবৃত্ত অনুসন্ধান সক্রিয় করা থাকে, তবে একটি আসল ক্লায়েন্টের ঠিকানা যা বিশ্বস্ত ঠিকানার একটির সাথে মিলে যায় যা অনুরোধ শিরোনাম ক্ষেত্রটিতে প্রেরিত সর্বশেষ অবিশ্বস্ত ঠিকানা দ্বারা প্রতিস্থাপিত হয়।

nginx চেইনে সর্বশেষ আইপি ঠিকানাটি ডিফল্টরূপে দখল করছিল কারণ কেবলমাত্র এটিই বিশ্বাসযোগ্য বলে ধরে নেওয়া হয়েছিল। তবে নতুন real_ip_recursiveসক্ষম ও একাধিক set_real_ip_fromবিকল্পের সাহায্যে আপনি একাধিক বিশ্বস্ত প্রক্সিগুলি সংজ্ঞায়িত করতে পারেন এবং এটি সর্বশেষ অবিশ্বাস্য আইপি আনবে।

উদাহরণস্বরূপ, এই কনফিগারেশন সহ:

set_real_ip_from 127.0.0.1;
set_real_ip_from 192.168.2.1;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

এবং একটি এক্স-ফরওয়ার্ড-ফর শিরোনাম যার ফলে:

X-Forwarded-For: 123.123.123.123, 192.168.2.1, 127.0.0.1

nginx এখন ক্লায়েন্টের আইপি ঠিকানা হিসাবে 123.123.123.123 বেছে নেবে।

কেন এনজিনেক্স কেবল বাম-সর্বাধিক আইপি ঠিকানা বাছাই করে না এবং আপনার বিশ্বস্ত প্রক্সিগুলি স্পষ্টভাবে সংজ্ঞায়িত করা প্রয়োজন, এটি সহজে আইপি স্পুফিং রোধ করতে পারে।

ধরা যাক কোনও ক্লায়েন্টের আসল আইপি ঠিকানা 123.123.123.123। আসুন আমরা এটাও বলি যে ক্লায়েন্টটির কোনও লাভ নেই, এবং তারা তাদের আইপি ঠিকানাটি ফাঁকি দেওয়ার চেষ্টা করছে 11.11.11.11। তারা ইতিমধ্যে স্থানে থাকা এই শিরোনামটির সাথে সার্ভারে একটি অনুরোধ পাঠিয়েছে:

X-Forwarded-For: 11.11.11.11

যেহেতু বিপরীত প্রক্সিগুলি কেবল এই এক্স-ফরওয়ার্ড-ফর চেইনে আইপি যুক্ত করে, আসুন আমরা বলি যে এনজিনেক্স যখন এটি পেয়ে যায় তখন এটি এ জাতীয় চেহারা শেষ করে:

X-Forwarded-For: 11.11.11.11, 123.123.123.123, 192.168.2.1, 127.0.0.1

আপনি যদি কেবল বাম-সর্বাধিক ঠিকানাটি দখল করে থাকেন তবে এটি ক্লায়েন্টকে সহজেই তাদের আইপি ঠিকানাটি ফাঁকি দিতে পারে। তবে উপরোক্ত উদাহরণ হিসাবে এনগিনেক্স কনফিগারেশন, এনজিনেক্স কেবলমাত্র শেষ দুটি ঠিকানাতে প্রক্সি হিসাবে বিশ্বাস করবে। এর অর্থ এনজিঙ্কস সঠিকভাবে 123.123.123.123আইপি ঠিকানা হিসাবে বেছে নেবে , যদিও এই স্পোফড আইপি আসলে বাম-সর্বাধিক হয়ে থাকে।


1
এর জন্য আপনাকে অনেক ধন্যবাদ, এটি সত্যই আমাকে সাহায্য করেছিল। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
হোসে এফ রোমানিলো

1
ডিফল্টরূপে এক্স-রিয়েল-আইপি অনুযায়ী হবে বলে মনে হচ্ছে real_ip_header nginx.org/en/docs/http/ngx_http_realip_module.html এটি দূষিত ব্যবহারকারী মানে কি শুধু র্যান্ডম এক্স-রিয়েল-আইপি দিয়ে অনুরোধ পাঠাতে পারেন এবং যে $ remote_addr হিসেবে ব্যবহার করা হবে এনগিনেক্সে (এবং সম্ভবত অ্যাপ্লিকেশনটিতেও পাস করা হয়েছে)?
গ্যানসরেস্ট

@gansbrest না, কারণ set_real_ip_from বিশ্বস্ত হোস্টকে সীমাবদ্ধ করে।
এল ইয়াবো

9

X-Forwarded-Forশিরোনামটির বিশ্লেষণ প্রকৃতপক্ষে nginx রিয়েল_আইপি মডিউলে ত্রুটিযুক্ত।

len = r->headers_in.x_forwarded_for->value.len;
ip = r->headers_in.x_forwarded_for->value.data;

for (p = ip + len - 1; p > ip; p--) {
  if (*p == ' ' || *p == ',') {
    p++;
    len -= p - ip;
    ip = p;
    break;
  }
}

এটি শিরোনামের স্ট্রিংয়ের একেবারে ডানদিকে শুরু হয় এবং এটি কোনও স্থান বা কমা দেখার সাথে সাথে এটি অনুসন্ধান করা বন্ধ করে দেয় এবং আইপি ভেরিয়েবলের স্থান বা কমাতে ডানদিকে অংশটি আটকে দেয়। সুতরাং, চিকিত্সা কি সাম্প্রতিকতম যেমন প্রক্সি ঠিকানা মূল ক্লায়েন্ট ঠিকানা।

এটি অনুমান অনুযায়ী ভাল খেলছে না; এটি কোনও আরএফসিতে বেদনাদায়ক স্পষ্ট শর্তে বানান না করাই বিপদ।

পাশে: এমনকি ফর্ম্যাটটিতে একটি ভাল প্রাথমিক উত্স পাওয়া শক্ত, যা মূলত স্কুইড দ্বারা সংজ্ঞায়িত হয়েছিল - তাদের ডকুমেন্টেশনের মাধ্যমে একটি খনন আদেশটিকে নিশ্চিত করে; বামতমটি মূল ক্লায়েন্ট, ডানদিকে সবচেয়ে সাম্প্রতিক সংযোজন। আমি উইকিপিডিয়া পৃষ্ঠায় একটি [উদ্ধৃতি প্রয়োজনীয়] যুক্ত করার জন্য অত্যন্ত প্ররোচিত হই । একটি অনামী সম্পাদনা বিষয়টিতে ইন্টারনেটের কর্তৃত্ব বলে মনে হচ্ছে।

যদি সম্ভব হয়, আপনি কি নিজের মধ্যবর্তী প্রক্সিগুলি কেবলমাত্র সত্যিকারের ক্লায়েন্টের ঠিকানা দিয়ে রেখে হেডারের শেষে নিজেকে যুক্ত করা বন্ধ করতে পারেন?


উত্তরের জন্য ধন্যবাদ, শেন আসলে, এনজিনেক্সে পৌঁছানোর সময় একটি X-Forwarded-Forইতিমধ্যে উপস্থিত রয়েছে। (এটি সঠিক ক্লায়েন্টের আইপি ঠিকানা) নিজেই এনজিঙ্ক্স পরে আমাদের লোড ব্যালেন্সারের আইপি ঠিকানাটি (পূর্ববর্তী হপ) X-Forwarded-Forশিরোনামে যুক্ত করতে এগিয়ে যায় । (সম্ভবত এটি "দূরবর্তী ঠিকানা" হিসাবে যা দেখায় তা সংযোজন করা) যদি এটি কেবল এটি না করে, আমি কেবল X-Forwarded-Forআগের মতো শিরোনামটি ব্যবহার করতে সক্ষম হব । (আমরা সম্প্রতি এনগিনেক্সে স্থানান্তরিত হয়েছি)
কर्क ওল

@ কিরক তাই, যখন এনজিনেক্স শিরোনামটি পাবে, এটি কেবল আসল ক্লায়েন্টের ঠিকানা? তবে এটি প্রক্রিয়া করার সময় এটি সংযোগকারী প্রক্সি সার্ভারের শিরোনামে যুক্ত হয়? এটি যুক্ত হয় না - কেবলমাত্র একবারে সেই শিরোনামটিকে স্পর্শ করা উচিত যখন এটি কোনও অন্য প্রক্সিতে সংযোগ প্রেরণ করা হয় proxy_pass- এবং তারপরেও কেবল proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;স্থানের সাথে।
শেন ম্যাডেন

এমনকি ডাব্লু 3 সি এটিও ভুল করে : তাদের ডকুমেন্টেশনে বলা হয়েছে যে "প্রক্সিগুলিতে এইচটিটিপি-এর জন্য একটি এক্স-ফরওয়ার্ডেড-ফর শিরোনাম ক্ষেত্রের মধ্যে কমা দ্বারা বিচ্ছিন্ন তালিকার শেষে অনুরোধের সূচনাকারীর আইপি ঠিকানা যুক্ত করা উচিত ", এটি সূচনা হওয়া উচিত ।
ইয়ান কেম্প

3
@IanKemp, না, শেষ সঠিক। প্রক্সিটির সার্ভারের দিকে, অনুরোধের সূচনাকারী (অর্থাত্ টিসিপি অনুরোধ) হ'ল পূর্ববর্তী প্রক্সি (যদি থাকে তবে)। পূর্ববর্তী প্রক্সিটি সম্ভবত ইতিমধ্যে X-Forwarded-Forসম্ভবত বামদিকে মূল ক্লায়েন্টের ঠিকানা সহ সম্ভবত একটি শিরোনাম প্রেরণ করেছে এবং সম্ভবত এর সাথে সংযুক্ত কোনও পূর্ববর্তী প্রক্সি রয়েছে। সুতরাং বর্তমানে পরিবেশন করা প্রক্সিটি সেই তালিকাটির শেষে পূর্ববর্তী প্রক্সি (= প্রবর্তক) যুক্ত X-Forwarded-Forকরবে এবং পরবর্তী প্রবাহের হপে এইভাবে বর্ধিত শিরোনাম পরিবেশন করবে । মঞ্জুর, তারা আরও স্পষ্ট শব্দবাচক চয়ন করতে পারে।
blubberdiblub

5

এক্স-রিয়েল-আইপি হ'ল প্রকৃত ক্লায়েন্টের আইপি ঠিকানা যা সার্ভারের সাথে কথা বলছে (সার্ভারের "প্রকৃত" ক্লায়েন্ট), এটি প্রক্সি সংযোগের ক্ষেত্রে প্রক্সি সার্ভার। এজন্য এক্স-রিয়েল-আইপিতে এক্স-ফরওয়ার্ড-ফর শিরোনামে সর্বশেষ আইপি থাকবে।


1
ঠিক আছে, তবে, আমার জন্য, এটি কখনই দরকারী তথ্য নয়। আমি ক্লায়েন্টের মূল আইপি ঠিকানাটি পেতে চাই - এটি অত্যন্ত গুরুত্বপূর্ণ এবং আমি যা কিছু পড়েছি তার অনুসারে, এই শিরোনামগুলির উদ্দেশ্য। আমি কেন আমাদের প্রক্সি সার্ভারের আইপি ঠিকানা জানতে চাই?
কर्क ওল

যদি এটি আপনার পক্ষে কার্যকর না হয় তবে এটি আপনার পক্ষে নয়। আপনাকে এক্স-রিয়েল-আইপি ব্যবহার করতে কেউ বাধ্য করছে না। আপনার অ্যাপ্লিকেশনটিতে যদি আপনার ব্যবহারকারীর আইপি দরকার হয়, তবে আপনার অ্যাপ্লিকেশনটি পার্স করুন এক্স-ফরওয়ার্ড-ফর (যা সর্বদা নির্ভরযোগ্য নয় কারণ কিছু প্রক্সি রয়েছে (ইন্টারনেট সুরক্ষা অ্যাপ্লায়েন্স / ফায়ারওয়াল) যা এক্স-ফরওয়ার্ড- সেট করে না- জন্য)। এনগিনেক্সের প্রসঙ্গে, এক্স-ফরওয়ার্ড-ফর গুরুত্বপূর্ণ নয় কারণ এটি শেষ মুহূর্তে (এক্স-রিয়েল-আইপি) যা এনগিনেক্সের ক্লায়েন্ট, সেগুলি বাদ দিয়ে এই ক্লায়েন্টদের সাথে কথা বলছে না। আপনার যদি এটির প্রয়োজন না হয় তবে এটি সেট করবেন না, আনসেট করুন বা কেবল এটি উপেক্ষা করুন: /
ব্যবহারকারী 558061

2
না, আমি কি বলতে চাচ্ছি, কেন হবে X-Real-IPফিরে আমার নিজের প্রক্সি সার্ভার IP ঠিকানার কি কখনো উপযোগী হতে?
কर्क ওল

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