VPN ক্লায়েন্ট থেকে ping সফল হয়, TCP সেবা সময় শেষ হয়ে যায়, আর ufw allow 443/tcp কিছুই বদলায় না। অ্যাপ্লিকেশনটি গেটওয়ের ওপরে নয়, বরং গেটওয়ের পেছনের হোস্টে চললে সেই অনুমতিটি ভুল ট্রাফিক পথের জন্য লেখা হয়েছিল। প্যাকেটটি ফায়ারওয়ালের ঠিকানায় নয় এবং কোনো স্থানীয় প্রসেসে পৌঁছায় না, তাই ইনপুট নিয়মগুলো এটি কখনো দেখে না। সমাধান হলো ফরওয়ার্ড হওয়া ফ্লো-এর জন্য একটি রুট নিয়ম, আর তার প্রমাণ ইতিমধ্যে লগে আছে।

গন্তব্য স্থানীয় না ফরওয়ার্ড করা, তা নির্ধারণ করুন

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

IN ও OUT দুটি ফিল্ডেই একই ইন্টারফেস দেখানো লগ লাইনও একটি রাউটেড প্যাকেট বর্ণনা করতে পারে, কারণ একটি ডিভাইসের ভেতরে ও বাইরে ক্লায়েন্ট বহন করা টানেল ঠিক এমনই দেখায়। ইন্টারফেসের নামের চেয়ে গন্তব্য ঠিকানা এই প্রশ্ন দ্রুত মিটিয়ে দেয়। একই নাম দুইবার দেখা স্থানীয় ডেলিভারি প্রমাণ করে না, আর ডিপ্লয়মেন্ট কখনো তৈরি করেনি এমন টানেল ইন্টারফেস বানিয়ে নিলেও কাজ হয় না।

কোনো নিয়ম যোগ করার আগে ব্লকটি পড়ুন

একটি অনুমোদিত সংযোগের চেষ্টা পুনরুৎপাদন করুন এবং গেটওয়ে যেভাবে লিপিবদ্ধ করেছে সেভাবে তার উৎস, গন্তব্য, প্রোটোকল ও গন্তব্য পোর্ট নথিভুক্ত করুন। এই চারটি মান লগ এন্ট্রি এবং সেবার প্রকৃত অবস্থানের সঙ্গে মিলিয়ে দেখুন। আগের সফল ping কেবল প্রমাণ করে তার নিজের বিনিময় অনুমোদিত ছিল, আর ফায়ারওয়াল কোনো অ্যাপ্লিকেশনের প্রতি TCP SYN সম্পূর্ণ ভিন্নভাবে বিবেচনা করতে পারে।

sudo dmesg | grep "UFW BLOCK" | tail -n 5
sudo ufw status numbered

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

যে সবচেয়ে সংকীর্ণ রুট নিয়মটি মানায় তা লিখুন

এই উদাহরণে ক্লায়েন্টরা 172.20.8.0/24 থেকে tun0 হয়ে আসে, সেবাটি 8443 পোর্টে 10.30.0.15-এ শোনে, আর গেটওয়ে ens5 দিয়ে বের হয়। এই মানগুলো বেছে নেওয়া হয়েছে যাতে ক্লাউড VPC-এর ডিফল্ট 10.0.0.0/16 বা বাড়ির 192.168.0.0/16-এর মতো না দেখায়, আর 8443 উদাহরণটিকে গেটওয়ের নিজস্ব 443 লিসেনার থেকে দূরে রাখে।

sudo ufw --dry-run route allow in on tun0 out on ens5 proto tcp from 172.20.8.0/24 to 10.30.0.15 port 8443

ড্রাই রান যে নিয়মসেট তৈরি হবে তা ছাপে, আর আপনার নিয়ম বিদ্যমান কোনো ডিনাইয়ের আগে না পরে পড়ছে তা দেখার সবচেয়ে সস্তা উপায় এটি। ইন্টারফেসের নাম ও ভেতরের ঠিকানাগুলো উদাহরণের বদলে ডিপ্লয়মেন্টের সঙ্গে মিলিয়ে নিন, আর মনে রাখুন গন্তব্য NAT আগে চললে ফিল্টার অনূদিত গন্তব্যটি দেখে।

ফেরত পথটি স্টেটফুল রাখুন

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

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

sudo ufw route allow in on tun0 out on ens5 proto tcp from 172.20.8.0/24 to 10.30.0.15 port 8443
sudo ufw status numbered

UFW আপনার হয়ে যা প্রয়োগ করতে পারে না তা যাচাই করুন

সঠিক নিয়মের জন্য এখনো কার্নেল ফরওয়ার্ডিং এবং সেবা পর্যন্ত পৌঁছানো একটি রুট দরকার। ফায়ারওয়ালকে দ্বিতীয়বার দোষ দেওয়ার আগে দুটোই নিশ্চিত করুন।

sysctl net.ipv4.ip_forward
ip route get 10.30.0.15

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

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

সম্পর্কিত নিবন্ধ