প্রায় 1 মিলিয়ন আইপি ঠিকানাগুলি কালো তালিকাভুক্ত করার জন্য আইপেটেবল বা নাল রুট ব্যবহার করবেন?


22

আমি এমন একটি পরিস্থিতি পেরিয়ে এসেছি যেখানে ক্লায়েন্টকে কেবলমাত্র 1 মিলিয়ন স্বতন্ত্র আইপি অ্যাড্রেসের (কোনও সাবনেট নেই) একটি সেটকে কালো তালিকাভুক্ত করতে হবে, এবং নেটওয়ার্ক কর্মক্ষমতা একটি উদ্বেগ। যদিও আমি অনুমান করতে পারি যে IPTables বিধিগুলির রুটের তুলনায় কার্যকারিতা প্রভাব কম হবে, এটি কেবল অনুমান করা।

আইপি ঠিকানাগুলিকে দীর্ঘ তালিকাভুক্ত করার জন্য কালো তালিকাভুক্তির সমাধান হিসাবে আইপি টেবিলের পক্ষে বা নাল রাউটিংয়ের পক্ষে কারও কাছে কোন প্রমাণ বা অন্য কোন যুক্তি রয়েছে? এক্ষেত্রে সবকিছু স্বয়ংক্রিয় হয়, সুতরাং ব্যবহারের সহজলভ্যতা আসলেই উদ্বেগ নয়।

সম্পাদনা 26-নভেম্বর -11

কিছু পরীক্ষা এবং বিকাশের পরে, এটি প্রদর্শিত হয় যে এই বিকল্পগুলির কোনওটিই কার্যক্ষম নয়। এটি প্রদর্শিত হয় যে উভয় রুট লকআপ এবং আইপটিবলগুলি নিয়মসেটের মাধ্যমে লিনিয়ার অনুসন্ধানগুলি করে এবং এগুলি অনেক নিয়ম প্রক্রিয়া করতে খুব দীর্ঘ সময় নেয়। আধুনিক হার্ডওয়্যারগুলিতে, iptables ব্ল্যাকলিস্টে 1 এম আইটেম স্থাপন করা সার্ভারকে সেকেন্ডে প্রায় 2 ডজন প্যাকেট কমিয়ে দেয়। সুতরাং আইপেটেবল এবং নাল রুটগুলি বাইরে।

ipset, জিমি হেডম্যানের প্রস্তাবিত হিসাবে দুর্দান্ত হবে, এটি ছাড়াও এটি আপনাকে কোনও সেটে 65536 এর বেশি ঠিকানা ট্র্যাক করতে দেয় না, সুতরাং কারও কোনও ধারণা না থাকলে আমি এটি ব্যবহারের চেষ্টাও করতে পারি না।

আপাতদৃষ্টিতে এই অনেকগুলি আইপি ব্লক করার একমাত্র সমাধানটি অ্যাপ্লিকেশন স্তরে একটি সূচিযুক্ত লক করা হচ্ছে। তা কি তাই না?


অধিক তথ্য:

এই উদাহরণস্বরূপ ব্যবহারের কেসটি একটি ওয়েব সার্ভারে স্ট্যাটিক সামগ্রী অ্যাক্সেস করা থেকে আইপি অ্যাড্রেসের একটি "জ্ঞাত অপরাধী" তালিকাটিকে ব্লক করছে। এফডাব্লুআইডাব্লু, অ্যাপাচি এর মাধ্যমে ব্লক Deny fromকরা সমান ধীর (আরও বেশি না হলে) এটি লিনিয়ার স্ক্যানও করে।


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


5
আইপসেট ( ipset.netfilter.org ) এই ধরণের সমস্যাটি পরিচালনা করার জন্য আরও কম ডিজাইন করা হয়নি?
জিমি হেডম্যান

@ জিমিহেডম্যান: আপনার উত্তর দেওয়া উচিত। এবং তারপরে সমস্ত 3 উপায়ে এটি করে বেঞ্চমার্কে একটি পরামর্শ যুক্ত করুন :)
মাইকিবি

আমি কৌতূহল করছি যদি আপনি কোন সমস্যার সমাধানের চেষ্টা করছেন সে সম্পর্কে আপনি আরও কিছু তথ্য দিতে পারেন? সম্ভবত 1 এম আইপি ঠিকানাগুলি ব্লক করা সমস্যার সমাধান করার উপায় নয়?
স্পেসম্যানস্পিফ

আপনি কেন এই অনেক ঠিকানা আটকাতে চান এবং আপনি ইনপুট বা পূর্ববর্তী ট্র্যাফিক ফিল্টার করতে চান তা জানতে এটি অনেকখানি সহায়তা করবে।
জুলিয়ানো

এখানে আপনি দেখতে পারেন কীভাবে আইপসেট নিয়মিত iptables নিয়মগুলির চেয়ে প্রায় 11x দ্রুত iptables নিয়ম করে। ডেমনকিপার.নাট / 178১ / ম্যাস-ব্লকিং-আইপি-অ্যাড্রেসস-উইথ-এপসেট আশা করি এই সাহায্য করবে।
এলিয়েন টরেস

উত্তর:


15

অনুসন্ধানের সংখ্যা হ্রাস করতে iptables ব্যবহার এবং বহু-স্তরের গাছ তৈরি করার চেষ্টা করুন।

iptables -N rules_0_0_0_0_2
iptables -N rules_64_0_0_0_2
iptables -N rules_128_0_0_0_2
iptables -N rules_192_0_0_0_2
iptables -N rules_0_0_0_0_4
iptables -N rules_16_0_0_0_4

iptables -A INPUT -p tcp --dport 80 -s 0.0.0.0/2 -j rules_0_0_0_0_2
iptables -A INPUT -p tcp --dport 80 -s 64.0.0.0/2 -j rules_64_0_0_0_2
iptables -A INPUT -p tcp --dport 80 -s 128.0.0.0/4 -j rules_128_0_0_0_2
iptables -A INPUT -p tcp --dport 80 -s 192.0.0.0/4 -j rules_192_0_0_0_2

iptables -A rules_0_0_0_0_2 -s 0.0.0.0/4 -j rules_0_0_0_0_4
iptables -A rules_0_0_0_0_2 -s 16.0.0.0/4 -j rules_16_0_0_0_4

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


এটি কার্যকরভাবে কার্যকর হতে পারে, কার্যকরভাবে iptables এ অনুসন্ধানের গাছ তৈরি করে ও (এন) থেকে ও (লগ এন) পর্যন্ত ফায়ারওয়াল নিয়ম অনুসন্ধানের সময়ের জটিলতা হ্রাস করে এমন শব্দ করে।
পার ভন জুইগবার্গ

যদি আপনি এই রুটে যাওয়ার সিদ্ধান্ত নেন, সম্ভবত আইপি অ্যাড্রেসের তালিকা থেকে ভারসাম্য বাইনারি অনুসন্ধান গাছ তৈরি করতে কিছুটা অ্যালগরিদম ব্যবহার করা কার্যকর হবে এবং তারপরে কেবল সেই অনুসন্ধান গাছের কাঠামোকে আইপ্যাটিবলস বিধিগুলির সেট হিসাবে ফেলে দেওয়া হবে।
পার ভন জুইগবার্গ

@ পার ভন জুইগবার্গ্ক - প্রকৃতপক্ষে ... বা কেবল গাছের ছাঁটাই করুন যেখানে গভীর অনুসন্ধান করার দরকার নেই। যদিও সেই অধার্মিক পরিমাণ নিয়ম লোড করতে অনেক সময় লাগবে।
pQd

এটি একটি খুব ভাল পদ্ধতির। স্পষ্টতই এটি বজায় রাখতে কিছুটা প্রক্রিয়াজাতকরণ প্রয়োজন, তবে এটি সঠিক ধারণা, আমি মনে করি।
টাইলারল

3
@pQd iptables et al। এর সাথে পূর্ববর্তী ব্যর্থতার পরে, আমি বার্কলে ডাটাবেসের সাথে রিরাইটর্যাপটি ব্যবহার করে অ্যাপাচে সমাধান সমাধান করেছি । তবে আমার দ্রুততম প্রক্রিয়াটি প্রতি সেকেন্ডে প্রায় 100 টি নিয়ম লোডে আইপটবেবলগুলি ব্যবহার করে, যখন আইপটিবলগুলি পুনরুদ্ধার করে প্রায় 4 সেকেন্ডের মধ্যে পুরো সেটটি করে। এটি একটি শীর্ষ-লাইন ডেস্কটপ কম্পিউটারে রয়েছে। RewritMap প্রক্রিয়া কর্মক্ষমতা উপর একটি undetectably কম প্রভাব আছে।
টাইলার

11

এই ঠিক কি ipsetজন্য হয়।

এর ওয়েবসাইট http://ipset.netfilter.org/ থেকে :

যদি তুমি চাও

  • একাধিক আইপি ঠিকানা বা পোর্ট নম্বর সংরক্ষণ করুন এবং আইপটবেবলগুলি সংগ্রহের বিরুদ্ধে এক চলাফেরায় মেলে;
  • পারফরম্যান্স জরিমানা ছাড়াই আইপি অ্যাড্রেস বা পোর্টগুলির বিরুদ্ধে আইপিটিবেলের নিয়মগুলি গতিশীলভাবে আপডেট করুন;
  • একটি একক iptables নিয়ম সহ জটিল আইপি ঠিকানা এবং পোর্ট ভিত্তিক রোলসেটগুলি প্রকাশ করুন এবং আইপি সেটগুলির গতি থেকে উপকার পাবেন

তাহলে আইপসেট আপনার জন্য উপযুক্ত হাতিয়ার হতে পারে।

এটি নেটফিল্টার কোর দলের সদস্য জোসেফ কাদলেসিক লিখেছেন (যিনি REJECT টার্গেটও লিখেছিলেন) তাই আমি ভাবতে পারি এটি সেরা পছন্দ।

এটি সাম্প্রতিক কার্নেলের মধ্যে অন্তর্ভুক্ত রয়েছে।


যতদূর আমি দেখেছি, ipset 65k IP ঠিকানায় শীর্ষে রয়েছে। এমন কোনও সেট টাইপ রয়েছে যা 1 এম এন্ট্রি পরিচালনা করতে পারে?
টাইলার

7
আপনি যদি হ্যাশ: আইপ সেট টাইপ ব্যবহার করেন তবে আপনার খুব সংখ্যক ঠিকানা থাকতে পারে। আমি 1000000 চেষ্টা করেছিলাম এবং অভিনয়টি বেশ ভাল ছিল। আপনি যদি আপনার সেটটি যাচাই করার আগে একটি -m স্টেট - স্টেট ESTABLISHED রুল সেটআপ করেন তবে আপনি নিশ্চিত করতে পারবেন যে আপনি কেবলমাত্র নতুন সংযোগের সেটটি পরীক্ষা করে নিন যা প্রচুর সংখ্যক প্যাকেটের সাথে ডিল করার সময় কর্মক্ষমতা বাড়িয়ে তোলে।
ম্যাথু ইফি

যদিও এটি উল্লেখযোগ্য যে 1M ঠিকানা সহ একটি আইপসেটের মেমরির ব্যবহার বড় হতে শুরু করে। নেটফিল্টার মেলিং তালিকার এই পোস্ট অনুসারে আইপসেট হ্যাশ আকারের বর্তমান 2015 সূত্রটি H * 40byte + (N/4 + N%4) * 4 * element size1.5 মি স্লট হ্যাশের 1 এম ঠিকানার জন্য প্রায় 64MB এ আসে। অ্যাপাচি / বার্কডিবি দ্রবণটি ডিস্কে ডেটা সঞ্চয় করে এবং কেবল সক্রিয় ঠিকানাগুলির পৃষ্ঠা লোড করে।
এম কনরাড

5

আমি নিজে এটি পরীক্ষা করে দেখিনি, তবে আপনার সমস্যার বর্ণনা শুনে আমি তাত্ক্ষণিকভাবে ভেবেছিলাম " pf" (ওপেনবিএসডি থেকে হিসাবে)।

pfঠিকানার টেবিলগুলির ধারণা রয়েছে যা আপনি যা খুঁজছেন তা হতে পারে।

আমি যে কিছু অত্যন্ত অভিসম্পূর্ণ গবেষণা করেছি তার মতে , এটির থেকে আরও ভাল স্কেল করার সম্ভাবনা রয়েছে বলে মনে হবে ipsetরানটাইম বিকল্পগুলির উপর পিএফএএফএএকের অধ্যায় অনুসারে , টিউন না করে বাক্সের বাইরে, পিএফ ডিফল্টভাবে সমস্ত টেবিল জুড়ে মোট 200,000 এন্ট্রি সহ মোট 1000 টি টেবিল সমর্থন করে। (যদি সিস্টেমের <100MB দৈহিক মেমরি থাকে তবে 100,000)। এটি আমাকে বিশ্বাস করতে পরিচালিত করে যে এটি কোনও ধরণের দরকারী স্তরে কাজ করে কিনা তা পরীক্ষা করার চেষ্টা করার বিষয়টি বিবেচনা করার পক্ষে অন্তত মূল্যবান।

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


ক্লায়েন্টের সার্ভার আর্কিটেকচারকে BSD এ রূপান্তর করা আসলে কোনও বিকল্প নয়। কমপক্ষে, যদিও বাক্স থেকে চিন্তা করা।
টাইলারল

2
আপনাকে পুরো সার্ভার আর্কিটেকচারকে বিএসডি তে রূপান্তর করতে হবে না, আসল সার্ভারের সামনে রাখতে ফায়ারওয়াল তৈরি করা যথেষ্ট build (ভিএম-তে করা যথেষ্ট সহজ))
পার ভন জুইগবার্গ

2

আপনি FIB_HASH এর পরিবর্তে FIB_TRIE ব্যবহার করে তদন্ত করেছেন?

আপনার উপসর্গের গণনাগুলির জন্য FIB_TRIE এর আরও ভাল স্কেল করা উচিত। (/ 32 এর নাল রুটগুলি এখনও উপসর্গ, কেবল খুব নির্দিষ্ট)

এটি ব্যবহার করতে আপনার নিজের কার্নেলটি সংকলনের প্রয়োজন হতে পারে তবে এটি সহায়তা করে।

FIB_TRIE নোটস


2

উত্তরোত্তর জন্য: ipsetডক্স অনুসারে একটি সেটের ডিফল্ট আকার 65536 হয়, এটি বিকল্পগুলি দ্বারা পরিবর্তন করা যেতে পারে।

ম্যাক্সেম এই পরামিতিটি সমস্ত হ্যাশ প্রকারের সেটের তৈরি আদেশের জন্য বৈধ। এটি সর্বাধিক সংখ্যক উপাদান নির্ধারণ করে যা ডিফল্ট 65536 সেটে সংরক্ষণ করা যায় Example উদাহরণ:ipset create test hash:ip maxelem 2048.

আমি এটি এখানে রেখেছি কারণ আমি এখনও মন্তব্য করতে পারি না।


1

যে কেউ ভবিষ্যতে এই সমস্যাটির পিছনে হোঁচট খায় তার জন্য কিছু সহায়ক নোট:

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

দ্বিতীয়ত, ইপিটবেলে এক মিলিয়ন বিধি স্থাপন করতে দীর্ঘ সময় লাগে: কয়েক মিনিট। যদি আপনাকে অনেকগুলি সত্ত্বা ট্র্যাক করতে হয় তবে আপনি সম্ভবত এটি নেটফ্লিটারের বাইরে রাখবেন। রুলসেটের নিছক আকার একটি পার্থক্য করে।

তৃতীয়, লক্ষ্য লিনিয়ার স্ক্যানগুলি এড়ানো; তবে দুর্ভাগ্যক্রমে, iptables এবং iproute2 উভয়ই সহজাতভাবে রৈখিক। আপনি আপনার নিয়মগুলি বাইনারি-ট্রি-স্টাইলের বাইরে প্রচুর পরিমাণে শৃঙ্খলে বিভক্ত করতে পারেন যা আপনাকে পরামর্শ করার নিয়মের সংখ্যাকে সীমাবদ্ধ করে, তবুও, iptables এই আকারের সমস্যার পক্ষে উপযুক্ত নয়। এটি কাজ করবে , তবে এটি মূল্যবান সম্পদের অপচয় waste

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

আপনি iptables -j QUEUEএর সাথে লক্ষ্য হিসাবে ব্যবহার করে অনুরূপ ইউজারস্পেস হেরফের করতে পারেন libnetfilter_queue। এই সরঞ্জামটি শক্তিশালী, সরল এবং দুর্বল নথিভুক্ত। যতটা সম্ভব আপনি খুঁজে পেতে পারেন উত্স থেকে যতটা সম্ভব পড়ার পরামর্শ দেব, কারণ ওয়েব জুড়ে প্রচুর আকর্ষণীয় উপাদান রয়েছে যা কোনও অফিসিয়াল ডকুমেন্টেশনের অংশ নয়।

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