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

দুইটি রান তুলনা করার আগে প্রোবটি ঠিক করুন

একটি অবস্থা-শব্দ কেবল তখনই আরেকটি অবস্থা-শব্দের সঙ্গে তুলনীয় যখন দুটোই একই পরীক্ষা থেকে এসেছে। পাঁচটি ক্ষেত্র এটি স্থির করে: দূর প্রান্ত যে সোর্স ঠিকানা দেখেছে, সমাধান করা গন্তব্য, পোর্ট, স্ক্যানের ধরন এবং সময়। এর যেকোনোটি বদলালে আপনি প্রথমটি দুবার মাপার বদলে দ্বিতীয় একটি পরীক্ষা করেছেন।

অন্য কিছুর আগে সোর্স যাচাই করুন, কারণ VPN ক্লায়েন্ট চালু থাকলেও ট্রাফিক তখনো ফিজিক্যাল ইন্টারফেস দিয়ে বেরোতে পারে। দূর প্রান্তকে জিজ্ঞাসা করুন সে কী দেখছে, তারপর কার্নেলকে জিজ্ঞাসা করুন কোন ইন্টারফেস বেছে নিয়েছে:

curl -s https://ifconfig.me
ip route get 203.0.113.20

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

nmap -sT -p 443,8443 --reason 203.0.113.20

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

কোন হোস্ট হ্যান্ডশেক শেষ করেছে তা বের করুন

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

Nmap পোর্ট-অবস্থার রেফারেন্স এটিকে মৌলিক ধরে: একটি অবস্থা লিপিবদ্ধ করে প্রোবটি যেখান থেকে পাঠানো হয়েছে সেখান থেকে কী দেখতে পেয়েছে, পোর্টের কোনো বৈশিষ্ট্য নয়। অবস্থা-শব্দটি এভাবে পড়ুন এবং যে দুটি রান মিলছিল না তারা পরস্পরবিরোধী নয়, সামঞ্জস্যপূর্ণ দেখাতে শুরু করে, আর প্রশ্নটি পোর্ট খোলা কি না থেকে সেটির সামনে কে দাঁড়িয়ে ছিল সেখানে সরে যায়।

দ্বিতীয় প্রশ্নের উত্তর ব্যাকএন্ডে দিন, বাইরে থেকে নয়। যে ফ্রন্টএন্ড সংযোগ গ্রহণ করে তারপর তার আপস্ট্রিমে পৌঁছাতে ব্যর্থ হয়, তা ধীর অ্যাপ্লিকেশনসহ একটি সুস্থ সেবার ঠিক বাইরের চিত্র তৈরি করে। কেবল আপস্ট্রিমের নিজের রেকর্ড দুটি ঘটনা আলাদা করে:

tail -n 5 /var/log/nginx/access.log
ss -ltnp 'sport = :443'

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

টানেলকে দোষ দেওয়ার আগে নিজের নিয়ম যাচাই করুন

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

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

nft list ruleset | grep -n -e 203.0.113 -e 198.51.100
journalctl -u sshd -n 50 | grep 203.0.113

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

ট্রান্সপোর্ট, সার্টিফিকেট ও প্রতিক্রিয়া আলাদা করে পড়ুন

তিনটি স্তর তিনটি পর্যবেক্ষণ তৈরি করে, এবং যেটি তাদের একটিকে পরীক্ষা করে সেটি বাকি দুটি সম্পর্কে প্রতিবেদন করতে পারে না। সেগুলো একক রায়ে ভাঁজ করার বদলে রেকর্ডে আলাদা লাইন হিসেবে রাখুন, কারণ প্রতিটি লাইন নিজের মতো ব্যর্থ হয় এবং ব্যর্থতার ধরনই বলে দেয় পরে কোথায় দেখবেন।

ObservationWhat it settlesWhat it leaves open
Connection completedA host on the path accepted the handshakeWhich host, and whether its upstream is reachable
Certificate valid for the nameThe endpoint holds a credential for that nameWhether the process behind it is the one you meant
Expected response bodyThe application handled the requestAnything about other ports or other paths
Connection refusedA host replied and nothing was listeningWhether a filter sits ahead of the refused port
TimeoutNo reply arrived before the deadlineDrop, blackhole route or an overloaded host

একটি কমান্ড আপনার নিয়ন্ত্রণাধীন একটি সেবার বিরুদ্ধে প্রথম তিনটি সারি তৈরি করে। এর আউটপুট চ্যাট বার্তায় নয়, স্ক্যানের পাশে রেকর্ডে রাখুন:

curl -v --resolve office.example:443:203.0.113.20 https://office.example/

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

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

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