প্রতি আইপি ঠিকানায় সর্বাধিক সংযোগ এবং আইপটিবলের সাথে প্রতি সেকেন্ডে নতুন সংযোগ সীমাবদ্ধ করুন


37

আমাদের পোর্ট 80-তে httpd সহ একটি উবুন্টু 12.04 সার্ভার রয়েছে এবং আমরা সীমাবদ্ধ রাখতে চাই:

  • প্রতি আইপি ঠিকানাতে সর্বাধিক সংযোগগুলি httpd থেকে 10 এ
  • প্রতি সেকেন্ডে সর্বাধিক নতুন সংযোগগুলি প্রতি 150 সেকেন্ডে 150 থেকে 150 পর্যন্ত

আমরা iptables দিয়ে এটি কীভাবে করতে পারি?

উত্তর:


48
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 32 -j REJECT --reject-with tcp-reset  

এটি একটি উত্স আইপি থেকে 15 এর উপরে সংযোগগুলি প্রত্যাখ্যান করবে।

iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 150/second --limit-burst 160 -j ACCEPT  

এতে 160 টি নতুন সংযোগ (প্যাকেটগুলি সত্যই) প্রতি সেকেন্ডে 150 টি নতুন সংযোগ (প্যাকেট) প্রয়োগের আগে অনুমোদিত হয় are


1
উপরেরগুলি কেবল পোর্ট 80 নয়, সমস্ত বন্দরগুলিতে কাজ করার জন্য সেট আপ করা যেতে পারে?
এমিনেজ আর্টাস

1
আপনি কি নিশ্চিত যে এটি প্রতি আইপি?
ল্যাটিনসইউড

2
সমস্ত বন্দরগুলির জন্য এই নিয়মটি সেট করতে, কেবল --dport 80 সরান
ড্যান

5
দ্বিতীয় নিয়ম "নতুন সংযোগগুলি" তে কাজ করে না। এটি স্পষ্টভাবে বিদ্যমান ("ESTABLISHED") সংযোগগুলিকে প্রভাবিত করে। নতুন সংযোগগুলি করতে, আপনি - স্টেট নতুন চাইবেন। আপনি -m conntrack --ctstateএর জায়গায় ব্যবহার বিবেচনা করতে পারেন -m state --state। কনট্র্যাক নতুন এবং উন্নত বনাম রাজ্য।
ড্যান প্রিটস

2
NEWসংযোগগুলিতে ২ য় নিয়ম যুক্ত করার জন্য উপরের মন্তব্যটি - এটি করবেন না - এটি কার্যকরভাবে আপনার INPUTচেইনটিকে একটি ডিফল্টে রূপান্তরিত করে accept!!!
স্টুয়ার্ট কার্ডাল

8

আপনার আইপটিবেলে নিম্নলিখিত বিধিগুলি আপনার প্রশ্নের উভয় প্রয়োজনীয়তার উত্তর দিতে চান:

iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT

iptables -t filter -I INPUT -p tcp --dport 80 -m state \
  --state RELATED,ESTABLISHED -j ACCEPT

# Adjust "--connlimit-above NN" to limit the maximum connections per IP
#   that you need.
iptables -t filter -I INPUT -p tcp --syn --dport 80 -m connlimit \
  --connlimit-above 10 --connlimit-mask 32 -j DROP

# Adjust "--connlimit-above NNN" to the maximum total connections you
#   want your web server to support
iptables -t filter -I INPUT -p tcp --syn --dport 80 -m connlimit \
  --connlimit-above 150 -j DROP

কারণ আমরা -আই (ওপি অনুরোধ অনুসারে) ব্যবহার করছি আমরা তাদের বিপরীত ক্রমে করতে হবে যাতে নীচ থেকে তাদের 'পড়ুন'।

আমি --connlimit-mask NN 32 থেকে 24 পরিবর্তন করার বিষয়টি বিবেচনা করার পরামর্শ দিই। এটি একটি সম্পূর্ণ শ্রেণি-সি নেটওয়ার্ক (একই পরিসরে সর্বোচ্চ 256 আইপি ঠিকানা) 10 সংযোগে সীমাবদ্ধ করবে। আপনার পরিষেবাটি কীভাবে ব্যবহৃত হতে পারে তার উপর নির্ভর করে আপনি 22 বা 30 এর মতো অন্য কোনও শ্রেণীবদ্ধ নম্বরও ব্যবহার করতে পারেন।

এছাড়াও আপনি কিভাবে ক্লায়েন্ট আচরণ করতে চান তার উপর নির্ভর করে, আপনি পারে উপরে দুই নিয়ম "-J ড্রপ" পরিবর্তে ব্যবহার করতে "-J বাতিল --reject-সঙ্গে TCP পুনরায় সেট করার" বা এমনকি শুধুমাত্র 150 সংযোগ সর্বোচ্চ চান, নিয়ম.

যদি আপনি 80 টি পোর্ট ব্যবহার করে ব্রাউজার বা সফ্টওয়্যার সংযোগটি প্রত্যাখ্যান করেন তবে তা অবিলম্বে একটি "উপলভ্য নয়" স্থিতি প্রদর্শন করবে, তবে DROP বিকল্পটি ক্লায়েন্টকে অপেক্ষা না করে সাইটটি উপলব্ধ না হওয়ার রিপোর্ট করার আগে কয়েকবার চেষ্টা করবে ry অফলাইন সার্ভারের চেয়ে খারাপ সংযোগের মতো আচরণ করে বলে আমি নিজেই ড্রপকে ঝুঁকে দেখি।

এছাড়াও, সংযোগ সীমাটি যদি আবার চেষ্টা করার সময় 150 (বা 10) এর নিচে নেমে আসে তবে অবশেষে এটি আপনার সার্ভারে পৌঁছে যাবে।

প্রত্যাখ্যান বিকল্পটি আপনার সাইটে ভগ্নাংশ কম ট্র্যাফিকের কারণ হবে, কারণ ডিআআরপি এটি পুনরায় চেষ্টা করার সময় অতিরিক্ত প্যাকেট প্রেরণ করবে। সম্ভবত এটি প্রাসঙ্গিক নয়।

অন্যদিকে আপনার পোর্ট ৮০ ট্র্যাফিক যদি একটি ক্লাস্টারের অংশ হয় তবে REJECT ক্লাস্টার নিয়ামককে বলে যে এটি ডাউন হয়েছে এবং এটির পুনরায় চেষ্টা করার সময়কালের জন্য এতে ট্রাফিক প্রেরণ বন্ধ করবে।

আপনার পূর্বনির্ধারিত নিয়মটি সমস্ত ট্র্যাফিক (iptables -t ফিল্টার-পি ইনপুট ড্রপ) ব্লক করার অনুমিতির অধীনে সম্পর্কিত, ESTABLISHED নিয়ম রয়েছে। এটি কেবল স্বীকৃত সংযোগগুলির সাথে সম্পর্কিত আরও প্যাকেট গ্রহণ করে।

এছাড়াও - সিন এটি প্যাকেটগুলিতে (বা গণনা) টিসিপি সংযোগ স্থাপনের বিষয়ে মনোযোগ দিতে বলেছে।


এই কমান্ডগুলির minutia মাধ্যমে হাঁটার জন্য ধন্যবাদ।
txyoji

আমি কি কেবলমাত্র নির্দিষ্ট আইপি ঠিকানা এবং সম্পূর্ণ পরিসীমা নয়, অবরুদ্ধ করতে --connlimit-mask পেতে পারি?
এনালগ

--Connlimit-মাস্ক 32 হয় একটি একক ঠিকানার সবোর্চ্চ। অর্থাৎ এটি একটি / 32 নেটমাস্কের মতো। কিছু কম, 24 যেমন / 24 নেটমাস্কের মতো, নিম্ন 8 টি বিট উপেক্ষা করে।
ইয়ান ম্যাকিনটোস

5

আপনাকে connlimitমডিউলগুলি ব্যবহার করতে হবে যা আপনাকে প্রতি ক্লায়েন্টের আইপি অ্যাড্রেস (বা ঠিকানা ব্লক) এর জন্য একটি সার্ভারের সাথে সমান্তরাল টিসিপি সংযোগের সংখ্যা সীমাবদ্ধ করতে দেয়।

/sbin/iptables -I INPUT -p tcp --syn --dport 80 -m connlimit \
      --connlimit-above 10 -j DROP

আমি আপনার উত্তর আপডেট করেছি, আমি আশা করি এটি এখনও ঠিক আছে ("- সিন" প্রয়োজন কেন?) + এবং "সেকেন্ডে সর্বাধিক সংযোগ (পোর্ট 80, টিসিপি) থেকে 150 পর্যন্ত কীভাবে"? ধন্যবাদ!
ইকচ্রিস্টাইন

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