নির্দিষ্ট ইন্টারফেসে কেবল নির্দিষ্ট আউটবাউন্ড ট্র্যাফিকের অনুমতি দিন


15

আমি বরং একটি বিজোড় সমস্যা আছে। আমার দুটি নেটওয়ার্ক ইন্টারফেস eth0এবং সহ একটি সার্ভার রয়েছে eth1। প্রত্যেকে একটি আলাদা নেটওয়ার্কের সাথে সংযুক্ত থাকে। প্রতিটি নেটওয়ার্কের একটি ইন্টারনেট গেটওয়ে রয়েছে। সার্ভারের বিভিন্ন আউটবাউন্ড সংযোগ রয়েছে: HTTP (সার্ভার স্ক্র্যাপ ওয়েবসাইটগুলির কিছু স্ক্রিপ্ট), এনএফএস ক্লায়েন্ট, সাম্বা ক্লায়েন্ট, ডিএনএস ক্লায়েন্ট এবং একটি ইমেল আনার জন্য নাম তবে কয়েকটি।

যে কারণে আমি goুকব না, এই আউটবাউন্ড ক্লায়েন্টগুলিকে বিভক্ত করতে হবে তাই বিদেশের http, এনএফএস, সাম্বা এবং ডিএনএস ট্র্যাফিক কেবল তখনই অনুরোধ করা হয় eth0যখন অন্য সমস্ত কিছু বন্ধ হয়ে যায় eth1

আমি কয়েকটি গুগল সন্ধানের কাছাকাছি পড়েছি এবং দেখে মনে iptablesহচ্ছে আমার যা প্রয়োজন তা কিন্তু আমি সত্যিই একটি ক্লু পাইনি। আমি কেবল ইনবাউন্ড ফায়ারওয়াল নিয়মগুলি পরিচালনা করতে অভ্যস্ত ufw

কেউ কি কয়েকটি উদাহরণ বিধি দিয়ে আমাকে শুরু করতে পারেন এবং কীভাবে বুট করার সময় এই নিয়মগুলি প্রয়োগ করতে সিস্টেমকে পাবেন? মূলত আমার SSH সংযোগ থেকে বের লক ছাড়া (আমি করতে শারীরিক প্রবেশাধিকার পেতে, কিন্তু আমি বরং চাই না)।

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

উত্তর:


12

আমি একটি পৃথক রাউটিং টেবিল সেটআপ করব এবং সেই টেবিলটি ব্যবহার করে চিহ্নিত প্যাকেটগুলিকে রুট করার জন্য একটি নীতি করব এবং নির্দিষ্ট প্যাকেটগুলি iptables / নেটফিল্টার রাখব।

একটি টেবিল তৈরি করুন: echo 1 known >> /etc/iproute2/rt_tables

একটি রাউটিং বিধি তৈরি করুন ( ipকমান্ডটি আইপ্রেট 2 থেকে এসেছে ): ip rule add from all fwmark 1 table known

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

ip route add default dev eth0 table known

Iptables নিয়ম তৈরি করুন:

iptables -t mangle -I PREROUTING -p tcp --dport 111 -j MARK --set-mark 1
iptables -t mangle -I PREROUTING -p tcp --dport 2049 -j MARK --set-mark 1

উদাহরণটি এনএফএস বন্দরগুলিতে প্যাকেটগুলিকে চিহ্নিত করে (১১১, ২০২৯) একটি ১ দিয়ে। আমরা এই নিয়মটিকে 'ম্যাঙ্গেল' আইপটেবলে যুক্ত করছি। এটি রাউটিং টেবিলের থেকে পৃথক এবং পরিবর্তনযোগ্য নয়; মঙ্গলের টেবিলটি বিশেষত NAT ব্যতীত অন্য কোনও উপায়ে প্যাকেটগুলি পরিবর্তন করার জন্য।

এখন, অন্যান্য ইন্টারফেসের মাধ্যমে সমস্ত কিছু রুট করার জন্য, আমরা স্ট্যান্ডার্ড রাউটিং টেবিলের জন্য একটি রুট যুক্ত করি।

ip route add default dev eth1

সত্যিই এটি বুঝতে, এলআরটিসি কীভাবে বিভাগের 4 এবং 11 পড়ুন ।


আসলে যা আমি ভয় পেয়েছিলাম তার চেয়ে অনেক সহজ। লিনাক্স নেটওয়ার্কিং স্ট্যাক সত্যিই একটি সুন্দর জন্তু, তাই না ?! আমি এটিকে একটি দ্রুত পরীক্ষা দিয়েছি এবং এটি সমস্ত প্রত্যাশার মতো কাজ করে। আমি প্রতিটি ইন্টারফেসের মাধ্যমে পর্যবেক্ষণ করছি iftopএবং তারা প্রত্যেকে ট্র্যাফিকের সঠিক ধরণটি দেখাচ্ছে। তোমাকে অনেক ধন্যবাদ.
অলি

আমি জানি না কীভাবে iptables বা iproute2 তাদের কনফিগারেশন সংরক্ষণ করে। আমি কি প্রতিটি বুট এই নিয়ম বন্ধ করতে হবে?
অলি

@ অলি আপনি পুনরায় বুট করার সময় সেগুলি সাফ হয়ে যায়। আপনি সংরক্ষণ করতে পারবেন এবং নিয়ম পুনঃস্থাপন iptables-saveএবং iptables-restore। আপনি যদি নেটওয়ার্কম্যানেজার ব্যবহার করছেন তবে প্রক্রিয়াটি স্বয়ংক্রিয় করতে ডিসপ্যাচার স্ক্রিপ্ট সেটআপ করতে পারেন। দুর্ভাগ্যক্রমে, অফিসিয়াল এনএম পৃষ্ঠায় বৈশিষ্ট্যটি সম্পর্কে ডকুমেন্টেশন নেই, তবে উবুন্টু এবং আর্চ লিনাক্স ডকুমেন্টেশন উভয়েই এটি উল্লেখ করেছে।
শন জে গফ

5

ভাল, " সহজতম " উপায়টি একক প্রোগ্রামগুলিকে নির্দিষ্ট ইন্টারফেস (বা ইন্টারফেসের আইপি) ব্যবহারের নির্দেশ দেওয়া উচিত For উদাহরণস্বরূপ:

ping -I eth1 8.8.8.8

পিংকে ইথ 1 ব্যবহারের উত্স ইন্টারফেস হিসাবে ব্যবহার করার নির্দেশ দেয়, যখন

wget --bind-address 10.0.0.1 http://www.google.it/

উইজেটকে10.0.0.1 আইপি ঠিকানা হিসাবে থাকা ইন্টারফেসটি পেরিয়ে যাওয়ার নির্দেশ দেয় ।

সত্য আপনার প্রয়োজন সমস্ত প্রোগ্রামের সাথে এটি সম্ভব কিনা তা আমি জানি না , তবে আপনার যে নিয়মগুলির জন্য লেখার প্রয়োজন তা iptablesএবং iprouteপ্রোগ্রামগুলি ছাঁটাই করা এটি শুরু ।

শুরু হিসাবে আপনার এই টিউটোরিয়ালটি পড়া উচিত উপর একাধিক ইন্টারনেট সংযোগ । একটি ভাল পঠিত এছাড়াও এক হাজার , iptables- র টিউটোরিয়াল এবং expecially উপর outbound filtering, process/ pid filteringএবং port filtering


4

এর সঠিক উপায় হ'ল আউটগোয়িং প্যাকেটের জন্য আপনি যে ইন্টারফেসটি ব্যবহার করতে চান তার সাথে () বাঁধাই। যেহেতু আপনি প্যাকেটগুলি কীভাবে তাদের বহির্গামী ইন্টারফেসের ভিত্তিতে রুট করা হবে তা নিয়ন্ত্রণ করার জন্য ip routeএবং ip ruleকমান্ডগুলি সহ রুট সেট আপ করতে পারেন । আমার উদাহরণস্বরূপ, আমি নিম্নলিখিত নেটওয়ার্কটি ধরে নেব:

  • eth0 এর:
    • ঠিকানা: 192.168.0.2/24
    • ডিফল্ট গেটওয়ে: 192.168.0.1
  • , eth1:
    • ঠিকানা: 192.168.1.2/24
    • ডিফল্ট গেটওয়ে: 192.168.1.1

আমি দুটি রাউটিং টেবিল তৈরি করব, একটি ট্র্যাফিক আউটগোয়িং এর জন্য E00 যাকে বিকল্প বলা হয় এবং একটি টেবিলকে বলা হবে এথ 1 এর জন্য প্রধান main রাউটিং টেবিল মেইন সর্বদা উপস্থিত থাকে এবং এটি সাধারণ টেবিল যা আদেশ routeএবং ip routeকমান্ড দ্বারা ব্যবহৃত হয় । বেশিরভাগ লোকেরা কখনই অন্য কোনও টেবিল ব্যবহার করে না। বিকল্প হিসাবে সারণী তৈরি করতে, আমরা নিম্নলিখিত লাইনটি যুক্ত করব /etc/iproute2/rt_tables:

10    alternate

সারণী প্রধানটির 254 টির ডিফল্ট অগ্রাধিকার রয়েছে rout রাউটিং টেবিল কার্যকর হওয়ার নিয়মগুলি ip ruleকমান্ড দ্বারা নিয়ন্ত্রিত হয় । ডিফল্টরূপে, সেই কমান্ডটি বিদ্যমান নিয়মের একটি তালিকা মুদ্রণ করবে যা এর মতো দেখতে হবে:

0:      from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 

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

sudo ip route add table alternate 192.168.0.0/24 dev eth0
sudo ip route add table alternate 192.168.1.0/24 dev eth1
sudo ip route add table alternate default via 192.168.0.1

আপনি সাধারণত চান alternateটেবিল অনুরূপ দেখুন mainটেবিল। একমাত্র পার্থক্যগুলি যখন রাউটিংয়ের আলাদা হওয়া উচিত। আপনি যদি আক্ষরিকভাবে সমস্ত এনএফএস, এইচটিটিপি ইত্যাদির ট্র্যাফিকটি এথ 1 এর ডিফল্ট গেটওয়ে দিয়ে যেতে চান তবে এটি এথ 1 এর নেটওয়ার্কের জন্য নির্ধারিত থাকলেও আপনি উপরের দ্বিতীয় লাইনটি অন্তর্ভুক্ত করতে চাইবেন না। এই বিকল্প রাউটিং টেবিলটি কখন ব্যবহার করতে হবে তার একটি নিয়ম যুক্ত করার জন্য পরবর্তী পদক্ষেপ:

sudo ip rule add from 192.168.0.0/24 pref 10 table alternate

এই নিয়মটিতে বলা হয়েছে যে 192.168.0 নেটওয়ার্কে কোনও ঠিকানা থেকে আসা যে কোনও ট্র্যাফিক alternateস্বাভাবিক mainটেবিলের পরিবর্তে রাউটিং টেবিলটি ব্যবহার করবে । শেষ পদক্ষেপটি নিশ্চিত করা হয় যে সমস্ত ক্লায়েন্টকে অবশ্যই eth0এটির সাথে আবদ্ধ ব্যবহার করা উচিত make সঙ্গেwget , উদাহরণস্বরূপ, সেট --bind-address=192.168.0.2, NFS- র জন্য সেটclientaddr=192.168.0.2মাউন্ট বিকল্প। পার্লের সাথে যদি LibWWW ব্যবহার করা হয় তবে আপনি স্থানীয় ইন্টারফেসটি যেটির সাথে আবদ্ধ তা নিয়ন্ত্রণ করতে LWP :: ইউজারএজেন্টে লোকাল্ডার বিকল্পটি সেট করতে পারেন। আপনি যদি ক্লায়েন্ট পেয়ে থাকেন তবে আপনি বাঁধাই নিয়ন্ত্রণ করতে পারবেন না এবং সংকলন উত্সটি কোনও বিকল্প নয়, আপনি তার ঠিকানাটি সংশোধন করতে iptables নিয়মটি ব্যবহার করতে সক্ষম হতে পারেন, তবে এটি হ্যাকের বেশি এবং কাজ নাও করতে পারে। আপনার নাট টেবিল বা মঙ্গলের টেবিলের PREOUTING চেইনে একটি SNAT রুল সেট আপ করতে হবে। এটি কাজ করার জন্য আপনার উপরে উপরে বর্ণিত রাউটিং টেবিলগুলির প্রয়োজন হবে।

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