VPS-এ UFW firewall সেটআপ: SSH লকআউট এড়ানোর উপায়
UFW দিয়ে VPS সুরক্ষিত করুন: default-deny policy সেট করুন, প্রয়োজনীয় port allow করুন এবং SSH বন্ধ না করেই firewall চালু করার নিরাপদ ধাপ জানুন।
UFW কী এবং কেন এটি ব্যবহার করবেন
UFW-এর পূর্ণরূপ Uncomplicated Firewall। নামটি যথাযথ। এটি Linux kernel-এ ইতিমধ্যে থাকা firewall-এর জন্য একটি সহজ interface। তাই raw rule লেখার বদলে ufw allow 22/tcp-এর মতো সংক্ষিপ্ত command লিখতে পারেন। নতুন VPS-এ listening service-গুলো ডিফল্টভাবে Internet থেকে পৌঁছানো যায়। Firewall এই অবস্থাটি বদলে দেয়। প্রথমে সবকিছু deny করুন। এরপর আপনি সত্যিই ব্যবহার করেন এমন কয়েকটি port allow করুন। মাত্র প্রায় চারটি command-এ এই পরিবর্তন আপনার Internet exposure-এর বেশিরভাগ কমিয়ে দেয়। UFW হলো Ubuntu এবং Debian-এর tool। তাই আপনার VPS যদি Rocky বা AlmaLinux চালায়, তার বদলে firewalld ব্যবহার করুন, যা rule-গুলোকে zone-এ সাজায়।
UFW-তে পরিবর্তন করার আগে কোন কোন service listening অবস্থায় আছে তা জানুন। Firewall এই service-গুলোর জন্য access-এর সিদ্ধান্ত নেয়। ss -tlnp ব্যবহার করে কোন service listening অবস্থায় আছে তা দেখা হলো সঠিক প্রথম ধাপ।
নিজেকে সার্ভার থেকে বিচ্ছিন্ন হওয়া ঠেকানোর একমাত্র নিয়ম
এই ভুলটির কারণেই অনেকে firewall ব্যবহার করতে ভয় পান। আপনি default-deny policy দিয়ে UFW চালু করলেন, কিন্তু SSH অনুমোদন করলেন না। ফলে firewall চালু হওয়ার সঙ্গে সঙ্গে আপনার নিজের connection বিচ্ছিন্ন হয়ে যায় এবং আপনি আর সার্ভারে ঢুকতে পারেন না। এটি এড়াতে UFW চালু করার আগে সবসময় SSH অনুমোদন করুন। মূল বিষয় এটিই। নিচের ধাপগুলো নিরাপদ ক্রমে কাজটি সম্পন্ন করে।
তারপরও এমন হলে আপনি আটকে পড়বেন না। আপনার provider-এর web console VNC বা serial ব্যবহার করে, তাই এটি SSH-এর মধ্য দিয়ে যায় না। সেখানে লগ ইন করে ufw disable চালাতে পারেন বা অনুপস্থিত rule যোগ করতে পারেন। Firewall-এর কারণে access বন্ধ হলে একটি নির্দিষ্ট লক্ষণ দেখা যায়। Dropped packet হলে SSH client timeout হওয়া পর্যন্ত অপেক্ষা করতে থাকে। অন্যদিকে SSH daemon বন্ধ থাকলে connection সঙ্গে সঙ্গে প্রত্যাখ্যাত হয়। এটিই connection refused এবং connection timed out-এর পার্থক্য।
ধাপ 1: ডিফল্ট policy নির্ধারণ করুন
প্রথমে UFW-কে incoming সব traffic deny করতে এবং outgoing সব traffic allow করতে বলুন:
sudo ufw default deny incoming
sudo ufw default allow outgoingdeny incoming হলো গুরুত্বপূর্ণ অংশ। এর অর্থ, কোনো port-এর জন্য explicit allow rule না থাকলে সেটি বাইরে থেকে বন্ধ থাকবে, এমনকি সেখানে কোনো service listening করলেও। allow outgoing আপনার সার্ভারকে update এবং অন্যান্য প্রয়োজনীয় কাজের জন্য স্বাভাবিকভাবে Internet-এ সংযোগ করতে দেয়। এই দুটি command শুধু policy পরিবর্তন করে; ধাপ 3-এ UFW enable না করা পর্যন্ত কোনো policy কার্যকর হবে না।
ধাপ 2: আপনার সত্যিই প্রয়োজন এমন port-গুলো অনুমোদন করুন
সক্রিয় করার আগে SSH খুলে রাখুন, যাতে আপনার সংযোগ বিচ্ছিন্ন না হয়:
sudo ufw allow 22/tcpUFW আপনার হয়ে SSH-তে rate limit-ও প্রয়োগ করতে পারে: sudo ufw limit 22/tcp port-টি অনুমোদন করে, তবে কোনো address ত্রিশ সেকেন্ডের মধ্যে ছয় বা তার বেশি connection তৈরি করলে সেটিকে block করে। এতে অতিরিক্ত software ছাড়াই brute-force script-এর কার্যকারিতা কমে।
আপনি web server চালালে HTTP এবং HTTPS-ও অনুমোদন করুন:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpশুধু public-এ যে service প্রদান করেন, সেটিই অনুমোদন করুন। 5432 port-এ চলা Postgres-এর মতো database-এর জন্য প্রায় কখনোই allow rule তৈরি করা উচিত নয়। পরিবর্তে এটিকে 127.0.0.1-এ bind করুন, যাতে এটি শুধু ওই machine থেকেই reachable হয়। আপনি যে প্রতিটি port খুলবেন, সেটি সুরক্ষার দায়িত্বও আপনাকেই নিতে হবে। তাই তালিকাটি সংক্ষিপ্ত রাখুন।
এখানেই আপনার server-এর জন্য সম্পূর্ণ ufw command-এর ক্রম তৈরি করে নিতে পারেন। এরপর সেগুলো ক্রমানুসারে চালান:
ধাপ 3: সক্রিয় করুন এবং চালু আছে কি না নিশ্চিত করুন
sudo ufw enableএতে সতর্ক করা হয় যে কমান্ডটি বিদ্যমান SSH সংযোগে বিঘ্ন ঘটাতে পারে। ধাপ 2-এ আপনি 22/tcp অনুমোদন করেছেন, তাই আপনার session চালু থাকবে। ফলাফল নিশ্চিত করুন:
sudo ufw status verboseStatus: active
Default: deny (incoming), allow (outgoing)
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp ALLOW IN Anywhereএখানে দুটি বিষয় দেখুন। Status: active এর অর্থ firewall চালু আছে। প্রতিটি rule দুবার দেখা যাচ্ছে—একবার সাধারণভাবে এবং একবার (v6)-সহ। এর অর্থ UFW IPv4-এর পাশাপাশি IPv6-ও পরিচালনা করছে। (v6)-সহ লাইনগুলো না থাকলে আপনার IPv6 অংশটি ব্যবস্থাপনার বাইরে রয়েছে। এটি একটি আলাদা সমস্যা, যা IPv6 firewall সংক্রান্ত পোস্টে ব্যাখ্যা করা হয়েছে।
পরে নিয়ম পরিচালনা
নিয়মের নম্বরসহ তালিকা দেখতে, যাতে একটি নিয়ম মুছে ফেলতে পারেন:
sudo ufw status numbered
sudo ufw delete 3কোনো port-এ শুধু একটি address থেকে সংযোগের অনুমতি দিতে নিচের নিয়মটি ব্যবহার করুন। নিজের IP-তে শুধু admin service উন্মুক্ত রাখার জন্য এটি কার্যকর:
sudo ufw allow from 10.0.0.24 to any port 5432 proto tcpআপনার নিজের address পরিবর্তিত হলে বা একাধিক মেশিনের সংযোগের প্রয়োজন হলে এই পদ্ধতি আর কার্যকর থাকে না। সাধারণ সমাধান হলো public Internet-এ port খোলা বন্ধ করে private network-এর মাধ্যমে service-এ সংযোগ করা। এ কাজের জন্যই server-এর private subnet আপনার tailnet-এ advertise করা ব্যবহৃত হয়।
Firewall একটি স্তর মাত্র। এটি নির্ধারণ করে কোন সংযোগ কোনো port-এ পৌঁছাতে পারবে। তবে SSH-এর মতো খোলা রাখা কোনো port-এ কেউ বারবার সংযোগের চেষ্টা করলে firewall সেই প্রচেষ্টা ধীর করে না। এর জন্য SSH-এর সামনে Fail2ban যোগ করুন, যাতে বারবার অননুমোদিত সংযোগের চেষ্টা করা address block করা যায়। Defence in depth-এর অর্থ হলো প্রতিটি স্তর অন্য স্তরগুলোর যে সীমাবদ্ধতা পূরণ করতে পারে না, তা পূরণ করে।
কোন port কী এবং service কীভাবে listen করে তা না জানলে firewall-এর ব্যবহার অর্থপূর্ণ নয়। একটি firewall configure করা নতুন VPS-এ প্রথম 10 মিনিটের কাজের একটি ধাপ, এবং এর আগে port কী এবং service কীভাবে listen করে তা জানা দরকার।
FAQ
UFW চালু করলে কি আমার SSH session বিচ্ছিন্ন হয়ে যাবে?
আপনি আগে SSH অনুমতি দিলে হবে না। sudo ufw enable-এর আগে sudo ufw allow 22/tcp চালান। Firewall তখন port 22-এর অনুমতি দেবে, তাই আপনার connection চালু থাকবে। SSH-এর জন্য allow rule না দিয়ে default-deny firewall চালু করাই বিপজ্জনক। এতে আপনি সার্ভার থেকে বিচ্ছিন্ন হয়ে যাবেন। এমন হলে আপনার provider-এর VNC বা serial console দিয়ে login করুন এবং ufw disable চালান।
VPS-এ কোন port খোলা উচিত?
শুধু যেসব port দিয়ে public service চালান, সেগুলোই খুলুন। সার্ভার পরিচালনার জন্য SSH (22/tcp) এবং website চালালে HTTP ও HTTPS (80/tcp, 443/tcp) খুলুন। অন্য সব port denied রাখুন। Database-এর মতো internal service-গুলোকে 127.0.0.1-এ bind করা উচিত এবং এগুলোর জন্য কোনো firewall rule দেওয়া উচিত নয়। তাহলে network থেকে সেগুলোতে কখনো পৌঁছানো যাবে না।
UFW কি IPv6 পরিচালনা করে?
আধুনিক Ubuntu-তে করে। /etc/default/ufw-এ IPV6=yes সেট করা থাকে। তাই প্রতিটি rule উভয় stack-এর ক্ষেত্রেই প্রযোজ্য হয়। ufw status চালালে IPv6 rule-গুলো (v6) suffix-সহ দেখা যায়। এটি কীভাবে ভুলভাবে কাজ করতে পারে, তা IPv6 firewall-এর সমস্যাটি-এ ব্যাখ্যা করা হয়েছে।
UFW rule কীভাবে সরাব?
প্রথমে index number-সহ rule-গুলোর তালিকা দেখতে sudo ufw status numbered চালান। এরপর যে rule সরাতে চান, তার number N বসিয়ে sudo ufw delete N চালান। Specification দিয়েও rule মুছতে পারেন, যেমন sudo ufw delete allow 80/tcp।
শুধু একটি IP address থেকে কোনো port-এ কীভাবে অনুমতি দেব?
সাধারণ allow-এর বদলে from rule ব্যবহার করুন। শুধু আপনার office address থেকে PostgreSQL-এ পৌঁছানোর অনুমতি দিতে sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp চালান। Default-deny policy থাকলে কোনো rule port খুলে না দেওয়া পর্যন্ত সেটি সবার জন্য বন্ধ থাকে। তাই এই from rule-ই প্রবেশের একমাত্র পথ: পুরো Internet blocked থাকে এবং আপনি যে address উল্লেখ করেন, শুধু সেটিই অনুমতি পায়। সাধারণ allow 5432/tcp-ও যোগ করবেন না। এটি করলে port সবার জন্য খুলে যাবে। Database বা admin panel প্রকাশ করার এটি সবচেয়ে নিরাপদ পদ্ধতি। sudo ufw status verbose চালিয়ে বিষয়টি নিশ্চিত করুন। এতে port-এর পাশে source address দেখা যায়।