Iptables: কনট্র্যাক এবং মালিকের সাথে বহির্গামী ট্র্যাফিকের মিল matching অদ্ভুত ফোঁটা নিয়ে কাজ করে


11

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

3.6.2 কার্নেল চালিয়ে দেবিয়ান 6.0.6 এ iptables v1.4.16.2 ব্যবহার করা।

তবে আমি এমন একটি সমস্যা আঘাত করেছি যা আমি এখনও বুঝতে পারি না ..।

সকল ব্যবহারকারীর জন্য বহির্গামী পোর্ট

এটি পুরোপুরি সূক্ষ্ম কাজ করে। আমার কোনও জেনেরিক রাষ্ট্র ট্র্যাকিং বিধি নেই।

## বহির্গামী বন্দর 81
$ IPTABLES -A OUTPUT -p tcp --dport 81 -m কনট্র্যাক --ctstate নতুন, প্রতিষ্ঠিত - জে এসিসিপিটি
$ আইপিটিবেলস -এ ইনপুট -p টিসিপি - স্পোর্টস 81-এস $ এমওয়াইপি-এম কনট্র্যাক - স্কটসেট ইস্টাব্লিশড -জ অ্যাকিসিপিটি

ব্যবহারকারীর সাথে ম্যাচিংয়ের সাথে বহির্গামী পোর্টগুলি

####################################################################################################################################################دہমাঙ্কর 80
$ আইপিটিবেলস -আউটপুট - ম্যাচের মালিক - ব্যবহারকারী-মালিক ব্যবহারকারকাউন্ট -p টিসিপি --dport 80-মিটার কনট্র্যাক --ctstate নতুন, প্রতিষ্ঠিত - স্পোর্ট 1024: 65535 -j এসিসিপিটি
$ আইপিটিবেলস -এ ইনপুট -p টিসিপি - স্পোর্ট 80 --ডপুট 1024: 65535-ডি Y এমআইআইপি-এম কনট্র্যাক - স্টেটসেট ইস্টাব্লিশড -জে এসিসিপিটি

এটি কেবলমাত্র "ব্যবহারকারকাউন্ট" অ্যাকাউন্টের জন্য 80 পোর্টকে মঞ্জুরি দেয় তবে টিসিপি ট্র্যাফিকের জন্য এই জাতীয় বিধিগুলির সমস্যা আছে।

## ডিফল্ট আউটগোইং লগ + ব্লক বিধি
$ IPTABLES -A OUTPUT -j LOG --log-উপসর্গ "খারাপ আউটগোয়িং" --log-ip- বিকল্পগুলি --log-tcp- বিকল্পগুলি --log-uid
$ আইপিটিবেলস -এ আউটপুট-জে ড্রপ

সমস্যাটি

উপরের কাজগুলি, ব্যবহারকারী "ব্যবহারকারকাউন্ট" ফাইলগুলি পুরোপুরি সূক্ষ্মভাবে পেতে পারেন। সিস্টেমের অন্য কোনও ব্যবহারকারী পোর্ট ৮০ এ বহির্গামী সংযোগ করতে পারবেন না।

ব্যবহারকারকাউন্ট @ হোস্ট: get উইজেট http://cachefly.cachefly.net/10mb.test

তবে উপরের উইজেটটি x7 এর পাতায় আমার সিসলগে প্রবেশগুলি বাদ দিয়েছে:

অক্টোবর 18 02:00:35 এক্সএক্সএক্সএক্স কার্নেল: খারাপ আউটগোয়িং ইন = আউট = এথ0 এসআরসি = xx.xx.xx.xx ডিএসটি = 205.234.175.175 লেন = 40 টিওএস = 0x00 পিআরসি = 0x00 টিটিএল = 64 আইডি = 12170 ডিএফ প্রোটো = টিসিপি এসপিটি = 37792 ডিপিটি = 80 এসকিউ = 164520678 এসকে = 3997126942 উইন্ডো = 979 আরইএস = 0x00 এসকে ইউআরজিপি = 0  

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

ফেলে দেওয়া আউটগোয়িং ACK প্যাকেটগুলি মনে হচ্ছে মূল অ্যাকাউন্ট থেকে (ইউআরজিপি = 0) আসছে যা আমি বুঝতে পারি না। এমনকি যখন আমি রুটটির জন্য ব্যবহারকার্যকার্যেন্ট ​​অদলবদল করি।

আমি বিশ্বাস করি যে এসি প্যাকেটগুলিকে নতুন হিসাবে শ্রেণিবদ্ধ করা হয়েছে কারণ কনট্র্যাক 3 ওয়ে হ্যান্ডশেকের তৃতীয় ধাপের পরে সংযোগগুলি ট্র্যাকিং শুরু করে, তবে কেন বাদ দেওয়া হচ্ছে?

এই ফোঁটাগুলি নিরাপদে উপেক্ষা করা যাবে?

সম্পাদন করা

তাই আমি প্রায়শই এই জাতীয় নিয়মগুলি দেখতে পাই যা আমার পক্ষে ভাল কাজ করে:

$ আইপিটিবেলস -আউটপুট-এস $ মাইআইপি-পি টিসিপি-এম টিসিপি --dport ৮০-মিটার রাজ্য - স্টেট নিউ, ইস্টাবলিশড -জে এসিসিপিটি
$ আইপিটিবেলস -এ ইনপুট -p টিসিপি-এম টিসিপি - স্পোর্ট 80-ডি $ এমআইআইপি-এম রাজ্য - স্টেট ইস্টাব্লিশড -জ অ্যাকিসিপিটি

রাষ্ট্রীয় ম্যাচটি দৃশ্যত অপ্রচলিত হওয়ায় আমি "-m রাজ্য - স্টেট "টিকে" -m কনট্র্যাক --ctstate "এর জন্য বদলেছি।

জেনেরিক স্টেট ট্র্যাকিং বিধি থাকা কি সেরা অনুশীলন? উপরের নিয়মগুলি কি সঠিক বলে বিবেচিত হচ্ছে না?

বহির্গামী ব্যবহারকারীদের উপর কঠোর নিয়ন্ত্রণের জন্য কি এর চেয়ে ভাল কিছু হতে পারে?

$ আইপিটিবেলস -এ ইনপুট-এম কনট্র্যাক - স্টেটসেট ইস্টাব্লিশড -জে অ্যাকসেসিটি
$ আইপিটিবেলস -আউটপুট-এম কনট্র্যাক - স্টেটসেট ইস্টাব্লিশড -জে অ্যাকসেসিপি

$ IPTABLES -A OUTPUT -p tcp --dport 80 -s $ SERVER_IP_TUNNEL -m কনট্র্যাক --ctstate NEW -m মালিক - আইডি-মালিকের ব্যবহারকারকাউন্ট -j ACCEPT

$ IPTABLES -A OUTPUT -p tcp --dport 80 -s $ SERVER_IP_TUNNEL -m কনট্র্যাক --ctstate NEW -m মালিক - আইড-মালিক ওথেরাক্যাক্ট -j ACCEPT

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

এই হোস্টটি কোনও রাউটিং করছে না, এই নিয়মগুলি সহ মেশিন থেকে ট্রাফিকের উত্স হয়। আমি কেবল নির্দিষ্ট বহির্গমন ট্র্যাফিকের জন্য প্রাসঙ্গিক নিয়ম পোস্ট করেছি।
arcX

উত্তর:


16

একটি দীর্ঘ গল্প সংক্ষিপ্ত কাটা, সকেট যখন কারও নয় তখন সেই ACK প্রেরণ করা হয়েছিল। ব্যবহারকারীর xসাথে সম্পর্কিত সকেটের সাথে সম্পর্কিত প্যাকেটগুলিকে অনুমতি দেওয়ার পরিবর্তে, প্যাকেটগুলি এমন কোনও সংযোগের সাথে অনুমতি দিন যা ব্যবহারকারীর দ্বারা সকেটের দ্বারা শুরু করা হয়েছিল x

দীর্ঘ গল্প।

সমস্যাটি বুঝতে, এটি wgetও এইচটিটিপি অনুরোধগুলি সাধারণভাবে কীভাবে কাজ করে তা বুঝতে সহায়তা করে ।

ভিতরে

wget http://cachefly.cachefly.net/10mb.test

wgetএর সাথে একটি টিসিপি সংযোগ cachefly.cachefly.netস্থাপন করে এবং একবার প্রতিষ্ঠিত হয়ে এইচটিটিপি প্রোটোকলে একটি অনুরোধ প্রেরণ করে যা বলে যে: "দয়া করে আমাকে /10mb.test( GET /10mb.test HTTP/1.1) এর সামগ্রীটি প্রেরণ করুন এবং যাইহোক , আপনি দয়া করে সংযোগটি বন্ধ না করতে পারতেন ( Connection: Keep-alive) করার কারণে। কারণ এটি এর কারণ এটি হয় কারণ যদি একই আইপি ঠিকানায় সার্ভারটি কোনও URL- এর পুনঃনির্দেশের সাথে জবাব দেয় তবে এটি সংযোগটি পুনরায় ব্যবহার করতে পারে।

এখন সার্ভারটি এর সাথে উত্তর দিতে পারে, "আপনার অনুরোধ করা ডেটা এখানে আসবে, সাবধান থাকুন এটি 10MB বড় ( Content-Length: 10485760) এবং হ্যাঁ ঠিক আছে, আমি সংযোগটি খোলা রেখে দেব"। অথবা যদি এটি ডেটার আকারটি না জানে, "এই ডেটা এখানে, দুঃখিত আমি সংযোগটি খোলা রাখতে পারছি না তবে আমি বলব কখন আপনি আমার সংযোগের শেষটি বন্ধ করে ডেটা ডাউনলোড করা বন্ধ করতে পারবেন"।

উপরের ইউআরএল, আমরা প্রথম ক্ষেত্রে।

সুতরাং, wgetপ্রতিক্রিয়াটির জন্য শিরোনামগুলি পাওয়ার সাথে সাথেই এটি 10MB ডেটা ডাউনলোড করার পরে এটি জানে যে এটির কাজটি হয়ে গেছে।

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

প্রস্থান করার আগে সকেটের ফাইল বর্ণনাকারী wget( closeসিস্টেম কল) বন্ধ করে দেয় । এর পরে, closeসিস্টেমটি সার্ভারের মাধ্যমে প্রেরিত ডেটা স্বীকার করে শেষ করে এবং এই FINবলে একটি প্রেরণ করে : "আমি আর কোনও ডেটা প্রেরণ করব না"। এই সময়ে closeফিরে এবং wgetপ্রস্থান। টিসিপি সংযোগের সাথে আর কোনও সকেট সম্পর্কিত নেই (কমপক্ষে কোনও ব্যবহারকারীর মালিকানাধীন নয়)। তবে এটি এখনও শেষ হয়নি। এটি পেয়ে FIN, এইচটিটিপি সার্ভার ক্লায়েন্টের কাছ থেকে পরবর্তী অনুরোধটি পড়ার সময় ফাইলটির শেষের দিকে দেখবে । এইচটিটিপি-তে, এর অর্থ "আর অনুরোধ নেই, আমি আমার শেষ বন্ধ করব"। সুতরাং এটি পাশাপাশি এটির এফআইএন প্রেরণ করে, এটি বলার জন্য, "আমি কোনও কিছু প্রেরণ করব না, সেই সংযোগটি চলেছে"।

সেই এফআইএন পাওয়ার পরে ক্লায়েন্ট একটি "এসিকে" প্রেরণ করে। তবে, সেই মুহুর্তে, wgetঅনেক আগেই চলে গেছে, যাতে এসি কে কোনও ব্যবহারকারীর কাছ থেকে না আসে। যে কারণে এটি আপনার ফায়ারওয়াল দ্বারা অবরুদ্ধ। সার্ভারটি ACK গ্রহণ না করায় এটি শেষ না হওয়া অবধি এটি FIN বার বার প্রেরণ করবে এবং আপনি আরও ফেলে আসা এসকে দেখতে পাবেন। এর অর্থ হ'ল those এসিকে ফেলে দিয়ে আপনি অযথাই সার্ভারের সংস্থানগুলি ব্যবহার করছেন (যার জন্য সর্বশেষ-এসকে অবস্থায় একটি সকেট বজায় রাখা দরকার) বেশ কিছু সময়ের জন্য।

আচরণটি অন্যরকম হত যদি ক্লায়েন্টটি "বেঁচে থাকুন" অনুরোধ না করত বা সার্ভার "কীভ-লাইভ" দিয়ে জবাব না দিয়েছিল।

ইতিমধ্যে উল্লিখিত হিসাবে, আপনি যদি সংযোগ ট্র্যাকার ব্যবহার করে থাকেন তবে আপনি যা করতে চান তা প্রতিটি প্যাকেটটি ESTABLISHED এবং সম্পর্কিত রাজ্যের প্রতিটি প্যাকেটের মধ্য দিয়ে দেওয়া উচিত এবং কেবল NEWপ্যাকেটগুলির জন্যই উদ্বেগ প্রকাশ করা উচিত ।

যদি আপনি NEWব্যবহারকারীর কাছ থেকে প্যাকেটগুলি অনুমতি দেন xতবে ব্যবহারকারীর কাছ থেকে প্যাকেট না রাখেন yতবে ব্যবহারকারীর দ্বারা প্রতিষ্ঠিত সংযোগের জন্য অন্যান্য প্যাকেটগুলি প্রবেশ xকরবে এবং ব্যবহারকারীর দ্বারা প্রতিষ্ঠিত সংযোগ স্থাপন করা যাবে না y(যেহেতু আমরা NEWসংযোগ স্থাপনকারী প্যাকেটগুলি ব্লক করছি ), ব্যবহারকারীর yসংযোগগুলির জন্য কোনও প্যাকেট থাকবে না ।


3

এটি কেবলমাত্র "ব্যবহারকারকাউন্ট" অ্যাকাউন্টের জন্য 80 পোর্টকে অনুমতি দেয়

- ভাল, কমপক্ষে আপনি যে বিধিগুলি দেখিয়েছেন সেগুলি প্রকৃতপক্ষে এটি বোঝায় না।

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


1
পরামর্শের জন্য ধন্যবাদ. সাধারণত আমি সরলতার জন্য সবাই কিন্তু এটি এই বিশেষ অনুশীলনের মূল বিষয় নয়।
arcX

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