প্রতিটি VPN ক্লায়েন্ট পুলের জন্য একটি গন্তব্য রেঞ্জ ব্লক করুন
একটি nftables নিয়ম গেটওয়ের নিজস্ব ট্রাফিক স্পর্শ না করেই অনুমোদিত VPN পুলের জন্য একটি গন্তব্য প্রিফিক্স অস্বীকার করতে পারে। হুক ও অবস্থান মিলিয়ে নিন।
একটি নিয়মই অনুমোদিত VPN পুলকে একটি গন্তব্য রেঞ্জ থেকে দূরে রাখতে পারে, গেটওয়ে যা করে তার অন্য কিছুতে ব্যাঘাত না ঘটিয়ে। নিয়মটি নিজে ছোট; এটি কাজ করবে কি না তা ঠিক করে যে হুকটিতে এটি থাকে এবং চেইনে তার অবস্থান। এই দুটিতে ভুল হলে এমন ফায়ারওয়াল পাওয়া যায় যা দেখতে সঠিক কিন্তু আচরণে অসামঞ্জস্যপূর্ণ। নিয়মটি প্যাকেটকে দেখার সময় প্যাকেটটি কী করছে তা থেকে শুরু করুন।
নিয়মটি আসলে কী মেলায়
নিয়মটি একসাথে তিনটি জিনিস মেলায়: একটি ইনপুট ইন্টারফেস, একটি সোর্স প্রিফিক্স এবং একটি গন্তব্য প্রিফিক্স। ড্রপ প্রয়োগের আগে তিনটিই সত্য হতে হবে, আর এটাই এটিকে সংকীর্ণ রাখে। এটিকে একটি অভিব্যক্তি হিসেবে পড়া তিনটি আলাদা নীতির চেয়ে সহজ।
ইন্টারফেস মিলটি ফরওয়ার্ড করা ক্লায়েন্ট ট্রাফিককে গেটওয়ের নিজের সংযোগ থেকে আলাদা করে। এটি ছাড়া, কেবল সোর্স পুলের নাম দেওয়া একটি নিয়ম গেটওয়ে নিজেই ওই ঠিকানা থেকে যে প্যাকেট তৈরি করে তাকেও প্রভাবিত করত, যদি কখনও তা ঘটে। সোর্স প্রিফিক্স নীতিটিকে অনুমোদিত ক্লায়েন্টে সীমাবদ্ধ করে, আর গন্তব্য প্রিফিক্স এটিকে একটি রেঞ্জে সীমাবদ্ধ করে। নিয়মটিকে তালিকা নয়, ছেদ হিসেবে পড়ুন।
কিছু সম্পাদনার আগে তিনটি মান লিখে রাখুন: টানেল ইন্টারফেসের নাম, সার্ভার যে পুল বিতরণ করে, এবং যে প্রিফিক্স আপনি অস্বীকার করতে চান। এদের যেকোনোটিতে টাইপো হলে এমন নিয়ম তৈরি হয় যা পরিষ্কারভাবে পার্স হয় কিন্তু কিছুই সুরক্ষা করে না। ওই তিনটি মান নিয়মের পাশে পরিবর্তন রেকর্ডে রাখুন।
হুক ঠিক করে নিয়মটি কার উপর প্রযোজ্য
একটি netfilter চেইন একটি হুকে সংযুক্ত থাকে, এবং হুকই ঠিক করে চেইনটি কোন প্যাকেট দেখে। ফরওয়ার্ড হুক গেটওয়ে দিয়ে রাউট করা ট্রাফিক দেখে, আর ক্লায়েন্ট-থেকে-গন্তব্য ট্রাফিক ঠিক তাই। চেইনের বাকি সবকিছু অন্য শ্রোতার দিকে লক্ষ্য করা।
ইনপুট হুক গেটওয়ের নিজের কাছে ঠিকানাভুক্ত ট্রাফিক দেখে, তাই সেখানে রাখা নিয়ম ট্রানজিটের বদলে তার নিজের সেবাগুলোর অ্যাক্সেস নিয়ন্ত্রণ করে। আউটপুট হুক গেটওয়ে যে ট্রাফিক উৎপন্ন করে তা দেখে, যা ক্লায়েন্ট পুল নীতির প্রয়োজনীয়তার বিপরীত। চেইনের নাম যিনি রুলসেট লিখেছেন তাঁর বেছে নেওয়া ইচ্ছামতো লেবেল, তাই নাম থেকে হুক অনুমান করবেন না। চেইনটি কোথায় সংযুক্ত তা যাচাই করুন, তারপর অনুমান করুন এটি কী মেলাতে পারে।
| Hook | Traffic it sees | Right for this policy |
|---|---|---|
| input | Addressed to the gateway | No, that is the host's own services |
| forward | Routed through the gateway | Yes, for client-to-destination traffic |
| output | Generated by the gateway | No, that is the opposite direction |
সংযুক্তি পড়া এক লাইনের যাচাই, যা একটি নিয়মকে এমন চেইনে পড়া থেকে বিরত রাখে যা প্যাকেট কখনও দেখে না।
প্রশস্ত গ্রহণের আগে নিয়মটি বসান
নিয়মগুলো ক্রমানুসারে মূল্যায়িত হয়, এবং প্রথম রায় জেতে। চেইনের আগে থাকা প্রশস্ত গ্রহণ যে প্যাকেটগুলো মেলায় তাদের জন্য মূল্যায়ন শেষ করে দেয়, তাই পরে যোগ করা ড্রপ তাদের জন্য কখনও চলে না। এই ক্রম-নিয়মই একটি সঠিক দেখতে নিয়মের কোনো প্রভাব না থাকার পুরো কারণ।
নিয়মটি শেষে যোগ না করে গ্রহণের আগে সন্নিবেশ করুন। চেইনে যদি ইতিমধ্যে টানেল ইন্টারফেসের জন্য সাধারণ গ্রহণ থাকে, নতুন নিয়মটিকে তার আগে থাকতেই হবে, নইলে তা কেবল সাজসজ্জা। আপনি যে ফাইলটি সম্পাদনা করেছেন তা নয়, ফলাফল ক্রমটি যাচাই করুন, কারণ কয়েকটি ফাইল থেকে একত্র করা রুলসেট কোনো একটির সাথে নাও মিলতে পারে। তারপর পুল থেকে একটি পরীক্ষা প্যাকেট দিয়ে নিশ্চিত করুন।
sudo nft list chain inet filter forward
sudo nft insert rule inet filter forward iifname "tun0" ip saddr 10.90.0.0/24 ip daddr 198.51.100.0/24 drop
sudo nft -c -f /etc/nftables.conf
তৃতীয় কমান্ডটি ফাইলটি প্রয়োগ না করেই পার্স করে, যা সিনট্যাক্স ত্রুটি বন্ধের আগেই ধরে। রোলব্যাক পরিকল্পনা নিয়ে প্রয়োগ করুন, কারণ ফরওয়ার্ড চেইনে ভুল নিয়ম আপনি যে টানেল দিয়ে কাজ করছেন তা কেটে দিতে পারে।
বিদ্যমান ফ্লো আপনার নতুন নিয়মের তোয়াক্কা করে না
নিয়মটি থাকার আগে তৈরি একটি conntrack এন্ট্রি আগের গ্রহণের সাথে মিলতে থাকে। এজন্যই নতুন ড্রপ কখনও নতুন সংযোগে কাজ করছে বলে মনে হয় আর যে সংযোগটি পরীক্ষা করা হচ্ছে তার জন্য কিছুই করে না।
চেইনের উপরে স্টেট মিলটি পড়ুন। যদি এটি আপনার নিয়মের আগে established ও related ট্রাফিক গ্রহণ করে, তাহলে চলমান প্রতিটি ফ্লো বন্ধ না হওয়া পর্যন্ত চলতে থাকে। জরুরি নিয়মের জন্য সাধারণত এটাই আপনি চান, আর তা বিভ্রান্তিকর যখন আপনি তাৎক্ষণিক কাট আশা করেন। মোতায়েনের আগে কোন প্রভাব চান তা ঠিক করুন। খোলা সংযোগ পুনর্ব্যবহার করা পরীক্ষা আপনাকে ভুল গল্প বলবে।
sudo conntrack -L -s 10.90.0.14 -d 198.51.100.20
sudo nft list ruleset | grep -n -A3 'ct state'
প্রথম কমান্ড দেখায় কোনো ফ্লো আছে কি না, আর দ্বিতীয়টি দেখায় আগের স্টেট নিয়ম তা গ্রহণ চালিয়ে যাচ্ছে কি না। দুটোই কেবল-পাঠযোগ্য এবং ঘটনার সময় চালানো নিরাপদ।
এই নিয়মটি যা নয়
নিয়মটি ডোমেইন কালোতালিকা, IPv6 নীতি বা কোনো একক অ্যাপ্লিকেশন অ্যাকাউন্টের উপর নিষেধাজ্ঞা নয়।
এগুলোর প্রত্যেকটির নিজস্ব প্রক্রিয়া দরকার। ডোমেইন ব্লককে নাম রিসলভ করতে হয়, যা প্যাকেট ফিল্টার করে না। IPv6 ট্রাফিকের নিজস্ব মিল দরকার, কারণ ip অভিব্যক্তি ip6 প্যাকেট সম্পর্কে কিছুই বলে না। অ্যাপ্লিকেশন-স্তরের নিষেধাজ্ঞা প্রিফিক্স মিলের নয়, সেবা বা প্রমাণিত প্রক্সির অন্তর্গত। এই চাহিদাগুলো আলাদা রাখাই একটি সংকীর্ণ নিয়মকে চারটি কাজ করতে বাধ্য হওয়া থেকে বিরত রাখে।
এই নিয়ম যে চুক্তি দেয় তা সুনির্দিষ্ট: অনুমোদিত পুল থেকে একটি গন্তব্য প্রিফিক্সে ট্রাফিক অস্বীকৃত হয়, আর সম্পর্কহীন গেটওয়ে ট্রাফিক তার বিদ্যমান নীতি রাখে। এই বাক্যটি নিয়মের পাশে লিখুন, পরের ব্যক্তি জানবে এটি কীসের জন্য ছিল।