ESP হলো IP প্রোটোকল 50, TCP পোর্ট 50 নয়: কী অনুমোদন করতে হবে
প্রোটোকল নম্বর আর পোর্ট নম্বর আলাদা নেমস্পেস। TCP পোর্ট 50-এর জন্য নিয়ম কিছুই অনুমোদন করে না, আর NAT ট্রাভার্সাল ESP-কে UDP 4500-এ নিয়ে যায়।
ফায়ারওয়াল ফর্ম TCP পোর্ট চায়, আর প্রথমেই মনে আসে 50। সেই এন্ট্রি কিছুই অনুমোদন করে না, কারণ ESP হলো IP প্রোটোকল নম্বর 50, আর প্রোটোকল নম্বর কোনো পোর্ট নয়। দুটি নেমস্পেস কেবল ছোট পূর্ণসংখ্যা ভাগ করে নেয়, আর কিছু নয়, এবং ভুলটি অদৃশ্য থাকে যতক্ষণ না IKE শেষ হয় আর সুরক্ষিত ট্রাফিক কখনো পৌঁছায় না।
ছোট সংখ্যা ভাগ করে নেওয়া দুটি নেমস্পেস
একটি IP হেডারে প্রোটোকল ফিল্ড থাকে যা বলে এরপর কী আসছে: TCP-র জন্য 6, UDP-র জন্য 17, ICMP-র জন্য 1, ESP-র জন্য 50, AH-র জন্য 51। একটি TCP বা UDP হেডারে পোর্ট নম্বর থাকে, যা গন্তব্য হোস্টে একটি প্রসেস বেছে নেয়। প্রোটোকল 50 আর TCP পোর্ট 50 সম্পূর্ণ অসম্পর্কিত মান, কিন্তু একটি ডায়ালগ বক্স তাদের বিনিময়যোগ্য দেখাতে পারে।
এই কারণেই পোর্ট ফরওয়ার্ডিংয়ের নিয়ম নেটিভ ESP প্রকাশ করতে পারে না। ফরওয়ার্ড করার মতো কোনো ESP গন্তব্য পোর্ট নেই, আর যে ডিভাইস কেবল পোর্টের নিয়ম বোঝে তার এই প্যাকেটের জন্য কোনো শব্দভান্ডারই নেই। সঠিক নিয়ম বরং IP প্রোটোকলটির নাম বলে। যেকোনো পোর্ট ডায়ালগ সেই প্যাকেটের জন্য ভুল যন্ত্র।
বিভ্রান্তির আরেকটি অর্ধেক আছে। প্যাকেটটি এনক্রিপ্টেড হলে তার ভেতরের সবকিছু অস্বচ্ছ হয়ে যায়, মূল সংযোগের TCP হেডারসহ। যে ফায়ারওয়াল সেই প্যাকেটের পোর্ট পরীক্ষা করে, সে বাইরের হেডার দেখছে, যেখানে নেটিভ ক্ষেত্রে পরীক্ষা করার কোনো পোর্টই নেই।
নেটিভ ESP, তারপর এনক্যাপসুলেটেড বিকল্প
নেটিভ ESP সরাসরি একটি IP প্রোটোকল হিসেবে বহন করা হয়, যা সমানভাবে দক্ষ ও অসুবিধাজনক। এটি দক্ষ কারণ অতিরিক্ত হেডার নেই, আর অসুবিধাজনক কারণ ঠিকানা ও পোর্ট অনুবাদ করে এমন যেকোনো ডিভাইস এটি ট্র্যাক করতে পারে না। NAT ট্রাভার্সাল এটাই সমাধান করতে আছে, ESP প্যাকেটকে UDP-র ভেতরে মুড়ে দিয়ে, যাতে অনুবাদকের পুনর্লিখনের জন্য পোর্ট থাকে।
| Form on the wire | How it is identified | What the firewall must permit |
|---|---|---|
| IKE negotiation | UDP with a destination port | UDP 500, and 4500 once traversal is detected |
| Native ESP | IP protocol 50 in the outer header | The protocol itself, with no port to name |
| ESP inside UDP | UDP 4500 carrying an ESP payload | The UDP port pair, which translation devices can track |
দুটি রূপ একই ডেটা চ্যানেলের বিকল্প স্থাপনা, একটির স্তর নয়। নেটিভ ESP অনুমোদন করলে এনক্যাপসুলেটেড রূপ অনুমোদিত হয় না, আর UDP 4500 অনুমোদন করলে নেটিভ ট্রাফিক অনুমোদিত হয় না, তাই নিয়মের সেটকে দুর্ঘটনাক্রমে দুটোই ঢেকে দেওয়ার বদলে স্থাপনার সঙ্গে মিলতে হবে।
শনাক্তকরণও এখানে গুরুত্বপূর্ণ। প্রান্তবিন্দুগুলি দরকষাকষির সময় রূপ দুটির মধ্যে সিদ্ধান্ত নেয়, আর পরিবর্তনটি সাধারণত ঘটে যখন তাদের মাঝে NAT শনাক্ত হয়। তাই টানেল প্রতিষ্ঠার পরে পরিবর্তিত পথ ট্রাফিককে এমন নেমস্পেসে নিয়ে যেতে পারে যা আপনার নিয়ম কখনো ঢোকেনি।
সংযোগটি আসলে কোন রূপ ব্যবহার করছে তা পড়ুন
ফায়ারওয়াল থেকে আন্দাজ না করে প্রান্তবিন্দুকে জিজ্ঞাসা করুন। লিনাক্সে স্টেট এন্ট্রি জানায় অ্যাসোসিয়েশনটি UDP এনক্যাপসুলেশন ব্যবহার করছে কি না এবং কোন পোর্ট জড়িত। প্যাকেট ক্যাপচার তারটাই তার থেকে উত্তর দেয়, আর দুটোই নিয়মের সেট পড়ে আশা করার চেয়ে দ্রুত।
ip xfrm state | grep -A3 encap
tcpdump -ni any 'ip proto 50 or udp port 4500'
প্রথম কমান্ডটি NAT ট্রাভার্সাল ব্যবহৃত হলে একটি এনক্যাপসুলেশন ধরন দেখায়, না হলে কিছুই দেখায় না। দ্বিতীয়টি দেখায় দুটি রূপের কোনটি সত্যিই ইন্টারফেস পার হচ্ছে, আর এতে কাগজে সঠিক দেখানো কোনো কনফিগারেশন নিয়ে তর্ক শেষ হয়।
বিপরীত প্রমাণও একই ধাপের অংশ। যে নিয়ম শূন্য মিল রিপোর্ট করে, সে আপনাকে বলছে প্যাকেটটি কখনো সেখানে পৌঁছায়নি, আর সেটি ফায়ারওয়ালের নয়, রাউটিং বা সিলেক্টরের প্রশ্ন।
তারপর নিয়ন্ত্রণ চ্যানেল আলাদাভাবে নিশ্চিত করুন। IKE-র নিজের পোর্ট ও নিজের লগ আছে, আর ডেটা ছাড়া সম্পন্ন দরকষাকষি ঠিক সেই বিভাজন যা এই নিবন্ধটি নিয়ে।
সঠিক নেমস্পেসে নিয়মটি লিখুন
প্রোটোকল নিয়ম আর পোর্ট নিয়ম ভিন্ন নির্দেশ, তাই টুলটিকে আপনি যে নির্দেশটি বোঝাচ্ছেন সেটিই প্রকাশ করতে হবে। nftables-এ প্রোটোকল মেলানো স্পষ্টভাবে লেখা হয়, আর এনক্যাপসুলেটেড বিকল্পটি নিজের UDP নিয়ম পায়। দুটি নিয়ম পাশাপাশি রাখুন যাতে পর্যালোচনায় জোড়াটি দেখা যায়।
nft add rule inet filter input ip protocol esp accept
nft add rule inet filter input udp dport { 500, 4500 } accept
ভুল নির্ণয় পুষিয়ে দিতে কোনো নিয়ম প্রসারিত করবেন না। প্রতিটি ইন্টারফেসে ESP প্রোটোকলের জন্য সব অনুমোদন, বা যেকোনো থেকে যেকোনোতে UDP অনুমোদন উপসর্গ সারায় এবং আপনি যে নিয়ন্ত্রণ কনফিগার করতে চেয়েছিলেন তা সরিয়ে দেয়। রূপটি জানা হয়ে গেলে সংকীর্ণ সমর্থিত প্রবাহ প্রায় সবসময়ই যথেষ্ট।
সবশেষে, টানেল কাজ করছে কিন্তু অ্যাপ্লিকেশন কাজ করছে না, তখন স্তরগুলি ঠিক রাখুন. গেটওয়েতে পৌঁছানো প্যাকেটের এখনও ফরওয়ার্ডিং, ফেরত রুট এবং তাদের গ্রহণ করে এমন একটি নীতি দরকার, আর এর কোনোটিই ESP নিয়মে প্রকাশ পায় না। অনুপস্থিত পোর্ট একটি নির্দিষ্ট ব্যর্থতা ব্যাখ্যা করে, প্রতিটি IPsec ব্যর্থতা নয়। নিয়মের সংশোধন আর রাউটিং পরীক্ষাকে দুটি আলাদা সিদ্ধান্ত হিসেবে রাখুন।
আপনি যে রূপ দেখেছেন, যে প্রোটোকল নিয়ম যোগ করেছেন আর পরে যে কাউন্টার দেখেছেন তা লিখে রাখুন। তিনটি লাইন, আর পরের ব্যক্তি এক বিকেলের বদলে এক মিনিটে নেমস্পেসের ভুলকে রাউটিংয়ের ভুল থেকে আলাদা করতে পারবে।