Nginx set_real_ip_from AWS ELB লোড ব্যালান্সারের ঠিকানা


22

আমাজন ইএলবি লোড ব্যালেন্সারের পিছনে আমার কাছে এনগিনেক্স সার্ভারের একটি সেট রয়েছে। আমি set_real_ip ব্যবহার করছি (থেকে HttpRealIpModule ) যাতে আমি এই সার্ভারে উদ্ভব ক্লায়েন্ট IP ঠিকানাটি অ্যাক্সেস করতে পারেন (ইন পিএইচপি-FPM প্রয়োজন এবং ব্যবহারের জন্য মাধ্যমে ক্ষণস্থায়ী জন্য HttpGeoIPModule )।

দেখে মনে হচ্ছে যে set_real_ip_fromএনগিনেক্স কনফিগারেশনে কেবল একটি আইপি ঠিকানা গ্রহণ করা যাবে। তবে, ইএলবি মেশিনের বিষয়ে আমাজন বলছে:

দ্রষ্টব্য: যেহেতু একটি লোডবালেন্সারের সাথে সম্পর্কিত আইপি ঠিকানাগুলির সেট সময়ের সাথে সাথে পরিবর্তিত হতে পারে, আপনার কোনও নির্দিষ্ট আইপি ঠিকানা দিয়ে কখনও "এ" রেকর্ড তৈরি করা উচিত নয়। আপনি যদি ইলাস্টিক লোড ব্যালেন্সিং পরিষেবাটির পরিবর্তে আপনার লোডবালান্সারের নামের পরিবর্তে বন্ধুত্বপূর্ণ ডিএনএস নাম ব্যবহার করতে চান, আপনার লোডবালেন্সার ডিএনএস নামের জন্য একটি সিএনএম রেকর্ড তৈরি করতে হবে, অথবা একটি হোস্টেড জোন তৈরি করতে আমাজন রুট 53 ব্যবহার করতে হবে। আরও তথ্যের জন্য, ইলাস্টিক লোড ব্যালেন্সিং সহ ডোমেন নাম ব্যবহার করে দেখুন

তবে যদি আমাকে কোনও আইপি ঠিকানা ইনপুট করতে হয় তবে আমি কোনও সিএনএম ব্যবহার করতে পারি না (হয় আমাজনের বা আমার নিজের)। এই সমস্যার কি কোন সমাধান আছে?

উত্তর:


40

আপনি যদি গ্যারান্টি দিতে পারেন যে সমস্ত অনুরোধগুলি ইএলবি থেকে আসবে (আমি এর সাথে পরিচিত নই) তবে আপনি চেষ্টা করতে পারেন:

real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;

এটি nginx কে কারও কাছ থেকে এক্স-ফরওয়ার্ড-ফর শিরোনামকে বিশ্বাস করতে বলা উচিত। খারাপ দিকটি হ'ল যদি কেউ সরাসরি আপনার সার্ভারটি অ্যাক্সেস করে তবে তারা এক্স-ফরওয়ার্ড-ফর শিরোনামটিকে ফাঁকি দিতে সক্ষম হবে এবং এনজিএনএক্স ভুল ক্লায়েন্ট আইপি ঠিকানা ব্যবহার করবে।


2
ধন্যবাদ - আমি একটি IP সেখানে পরিসীমা যোগ করতে পারিনি বুঝতে পারছি না ... যদি সেখানে একটি আরও নির্দিষ্ট ব্যাপ্তি ELB হতে পারে (আমার ধারণা আমি চেক করব 10.0.0.1/8কাজ করবে যদিও নির্দিষ্ট আরো কিছু হতে পারে)
vitch

বৈধ পরিসীমাটি কেউ জানে কিনা তা জানতে আমি একটি ফলোআপ প্রশ্ন যুক্ত করেছি: সার্ভারফল্ট.কোয়েশনস
7৩১697

যদি এটি একটি ভিপিসি ALB হয় তবে আপনার পরিসীমা (গুলি) আপনার সাবনেট রেঞ্জের সমান যা এলবি অংশ a
টালোনেক্স

17

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

real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;

২০১১ সাল থেকে প্রশ্ন হিসাবে দেখা সম্ভব যে বিকল্পটি তখন উপলব্ধ ছিল না। আমি কেবলমাত্র সমস্ত সম্ভাব্য ব্যক্তিগত নেটওয়ার্ক অন্তর্ভুক্ত করেছি কারণ বাইরের ব্যবহারকারীরা সহজে তাদের কাছে পাবেন না।
জর্ডান রিয়েটার

7

ভিপিসি সিআইডিআর ব্যবহার করুন set_real_ip_fromআপনি এটি ভিপিসি => আপনার ভিপিসির অধীনে অ্যামাজন কনসোলে খুঁজে পেতে পারেন ( <your VPC CIDR here>এটির সাথে প্রতিস্থাপন করুন ):

real_ip_header X-Forwarded-For;
set_real_ip_from <your VPC CIDR here>;

4

অ্যামাজন ইএলবিতে বিশ্বস্ত পরিসীমা 0.0.0.0/0 এ সেট করা নিশ্চিতভাবেই আপনাকে সমস্যায় ফেলতে চলেছে। আপনি গ্যারান্টি দিতে পারেন যে আপনি যদি আপনার এনজিএনএক্স সার্ভারের জন্য সুরক্ষা গোষ্ঠীটি কনফিগার করতে পারেন তবে অনুরোধগুলি ELB থেকে এসেছে তবে মূল অনুরোধটি কোনও সম্ভাব্য উত্স থেকে উদ্ভূত হবে (অ্যামাজন ইএলবিগুলি পাবলিক ইন্টারফেস)।

একটি সাধারণ পরীক্ষা এটি প্রকাশ করবে:

curl --header "X-Forwarded-For: 1.2.3.4" "http://your-elb-dns-address/"

আপনার এনগিনেক্স সার্ভারে থাকা লগগুলি তারপরে 1.2.3.4 কে আসল আইপি হিসাবে দেখাবে, এটি একটি স্পোফড। আরও উত্তরের জন্য আমাজন ইএলবির অভ্যন্তরীণ প্রাইভেট আইপির আইপি রেঞ্জ দেখুন ।


3
এটি কেবল তখনই সমস্যা হবে যদি আপনি রিয়েল_আইপ_আরসিভারসিভ চালু করেন, যা পূর্বনির্ধারিত নয় এবং এমনকি যখন আমি প্রাথমিকভাবে প্রশ্নের উত্তর দিয়েছিলাম তখনও উপস্থিত ছিল না।
কলবিজ্যাক

3

Realip_module বলে যে এক্স-ফরোয়ার্ড করা-জন্য ক্ষেত্রে, এই মডিউলের গত IP ঠিকানা ব্যবহার এক্স-ফরোয়ার্ড করা-জন্য প্রতিস্থাপন জন্য হেডার। কেবলমাত্র real_ip_headerএবং set_real_ip_formসেট করা থাকলে এই মডিউলটি কাজ করবে না । কারণ এই মডিউলটি ক্লায়েন্ট আইপির পরিবর্তে প্রক্সি আইপি ঠিকানা ব্যবহার করবে। এই real_ip_recursiveনির্দেশটি সমাধান করার জন্য সক্ষম করা উচিত।

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

সুতরাং আইপিভি 6 থাকাও জরুরী। সুতরাং Nginx কনফিগারেশন ফাইলের মধ্যে set_real_ip_f IP IP6 ঠিকানা থাকা উচিত।

real_ip_header X-Forwarded-For;
real_ip_recursive on;
set_real_ip_from <your VPC IPV4 CIDR here>;
set_real_ip_from <your VPC IPV6 CIDR here>;

যদি অতিরিক্ত সুরক্ষা প্রতিরোধের প্রয়োগ হয় তবে আমাদের set_real_ip_fromক্লাউডফ্রন্ট / এলবি / ইসি 2 সাবনেটগুলির জন্য ভিপিসি সিআইডিআর (উভয় আইপিভি 4 এবং আইপিভি 6) অন্তর্ভুক্ত করতে হবে ।

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