Set Up SSH with Two-Factor (2FA) Authentication

আমরা সাধারণত SSH এর মাধ্যমে বিভিন্ন সার্ভার, রাউটার, ফায়ারওয়ালে লগইন করার জন্য পাসওয়ার্ড ভিত্তিক অথেন্টিকেশন পদ্ধতি ব্যবহার করি। কিন্তু বিভিন্ন অ্যাটাক (Brut force, Dictionary, Session hijack) জনিত কারণে পাসওয়ার্ড ভিত্তিক অথেন্টিকেশন পদ্ধতির ব্যবহার রিস্কি হয়ে দাঁড়ায়। এজন্য আমরা অ্যাডভান্স অথেন্টিকেশন পদ্ধতি যেমন পাবলিক এবং প্রাইভেট কী (Key Based) অথেন্টিকেশন ব্যবহার করে থাকে। তবে SSH ছাড়াও অন্যান্য পাসওয়ার্ড ভিত্তিক অথেন্টিকেশন পদ্ধতি এবং Key Based অথেন্টিকেশন পদ্ধতি আরো সিকিউর করার জন্য Two-Factor Authentication (2FA) পদ্ধতি ব্যবহার করতে পারি। বর্তমানে Google, Facebook, Microsoft সহ অধিকাংশ প্রতিষ্ঠান Two-Factor Authentication (2FA) ব্যবহার করে।

Two-Factor (2FA) Authentication System:

Two-Factor Authentication (2FA) পদ্ধতি ব্যবহার করতে পাসওয়ার্ডের পাশাপাশি OTP (One Time Password) কোড ব্যবহার করতে হবে। OTP সিস্টেম TOTP (Time-based One-Time password) অ্যালগরিদম ব্যবহার করে One Time Password জেনারেট করে, যেটা ‘IETF’ স্ট্যান্ডার্ড মেনে চলে। OTP জেনারেট করার জন্য আমারা স্মার্ট ফোন ব্যবহার করতে পারি। মার্কেটে বিভিন্ন ধরনের OTP জেনারেটর অ্যাপস আছে, আমরা আমাদের এই টপিকসে Google Authenticator ব্যবহার করে OTP জেনারেট করা হবে। এজন্য আমাদের স্মার্টফোনে Google Authenticator অ্যাপস ইন্সটল করতে হবে।

Figure: Google Authenticator (Play Store)

Step 01: Install Required Packages

Google Authenticator একটি EPEL (Extra Packages for Enterprise Linux) সার্ভিস সুতরাং এখানে EPEL এর RPM টি ইন্সটল করতে হবে। EPEL ইন্সটল শেষ হলে Google Authenticator এবং QR কোডের জন্য প্রয়োজনীয় প্যাকেজ (qrencode) ইন্সটল করতে হবে।

[rooot@desktop ~]# yum install -y epel-release

[rooot@desktop ~]# yum install -y google-authenticator qrencode

Step 02: Configure Google Authenticator

প্যাকেজ ইন্সটল শেষ হলে প্রথমে ‘root’ ইউজারের হোম ডিরেক্টরীতে ‘.ssh’ নামে একটি Hidden ডিরেক্টরী তৈরী করতে হবে। এরপরে নিচের স্ক্রীনশট অনুযায়ী ‘google-authenticator -s’ কমান্ড টি রান করলে কমান্ডের আউটপুট অনুযায়ী ‘y’ প্রেস করতে হবে। 

mkdir

উপরের স্ক্রীনশট অনুযায়ী ‘y’ প্রেস করলে নিচের স্ক্রিনের মত QR কোড দেখাবে পাশাপাশি একটা কী (key) আসবে। আমরা কী (Key) ব্যবহার করে অথবা মোবাইলের অ্যাপস দিয়ে QR কোড স্ক্যান করে মোবাইলের সাথে কানেক্ট (Sync) করতে পারি।

Your new secret key is: IHGNP3IVY7FAYXH2NFRQXJQ7LY

Figure: Google Authenticator QR Code (CentOS 8)

এখন স্মার্টফোনে Google Authenticator নামের প্যাকেজ ইন্সটল করতে হবে। ‘Google Authenticator’ অ্যাপস টি রান করলে নিচের স্ক্রীনশট অনুযায়ী ‘+’ সাইনে ক্লিক করে নতুন একাউন্ট অ্যাড করা যাবে।

Figure: Google Authenticator Interface

‘+’ সাইনে ক্লিক করলে আমরা QR কোড অথবা ‘Setup Key’ দিয়ে সেটিং করতে পারবো। তবে আমরা এখানে QR কোড ব্যবহার করবো, এইজন্য মোবাইলের ‘Scan a QR Code’ অপশনে প্রেস করতে হবে।

Figure: Scan QR Code

‘Scan a QR Code’ অপশনে প্রেস করলে ‘QR’ কোড স্ক্যান করতে বলবে, মোবাইলের স্ক্রিন পূর্বের পেজের ‘QR’ কোডের উপরে ধরলে ছয় সংখ্যার (6 Digits) একটি কোড আসবে (৩০ সেকেন্ড পর পর পরিবর্তন হবে) পাশাপাশি আরও কিছু ‘emergency’ কোড আসবে। ছয় সংখ্যার (6 Digits) কোডটি নিচের স্ক্রিনসুট অনুযায়ী টার্মিনালে বসাতে হবে এবং ‘emergency’ কোড গুলা ভবিষ্যতের জন্য সেভ রাখতে হবে, যদি মোবাইল হারিয়ে যায় তাহলে এইগুলা দিয়ে রিকোভার করা যাবে এবং এইগুলা শুধু একবার করে ব্যবহার করা যাবে।

‘QR’ দেওয়ার পরে আরও কিছু প্রশ্ন আসবে এইগুলার উত্তর ‘y’ প্রেস করে দেওয়া যাবে।

Configure SSH for Google Authenticator on CentOS/RHEL 8:

এখন SSH সার্ভিসের কনফিগারেশন ফাইলে (/etc/ssh/sshd_config) কিছু পরিবর্তন করতে হবে। নিচের কনফিগারেশন অনুযায়ী ‘74’ নাম্বার লাইনে ‘no’ এর পরিবর্তে ‘yes’ করতে হবে এবং লাইনের শুরুতে যদি ‘#’ থাকে, তাহলে সেটা তুলে দিতে হবে। এরপর নিচের দিকে ‘UsePAM’ অপশনটি ‘yes’ থাকবে, যদিও এটি ডিফল্ট ভাবে ‘yes’ থাকে। PAM (Pluggable Authentication Module) হচ্ছে এক ধরনের অথেন্টিকেশন মডিউল যেটা ব্যবহার করে লিনাক্স সিস্টেমে বিভিন্ন ধরনের অথেন্টিকেশন পদ্ধতি ব্যবহার করা যায়। সুতরাং SSH এর সাথে Google Authenticator ব্যবহার করতে চাইলে নিচের দুইটি অপশন ‘yes’ করতে হবে। এবার ফাইলটি সেভ করে বের হয়ে যেতে হবে।

Configure PAM for Google Authenticator on CentOS/RHEL 8:

এখন Google Authenticator এর মডিউলটি (.so) নামে PAM (Pluggable Authentication Module) এর কনফিগারেশন ফাইলে যোগ করতে হবে। নিচে ’PAM’ এর কনফিগারেশন ফাইলের মডিউলের নাম এবং কী (Key) লোকেশন দেখানো হয়েছে।

উপরের দুইটা লাইন যোগ করে সেভ করে বের হয়ে যেতে হবে।

Restart SSH Service :

সকল কনফিগারেশন শেষ হলে এখন SSH সার্ভিসটি পুনরায় রিস্টার দিতে হবে।

Testing 2FA Authentication using Putty:

Two-factor অথেন্টিকেশন এনাবল করার জন্য আমাদের সমস্ত কনফিগারেশন শেষ হওয়ার পরে, বিভিন্ন ধরনের SSH Client (Putty, Windows CMD, Linux Terminal) ব্যবহার করে আমরা টেস্ট করতে পারি। নিচে উইন্ডোজ ভিত্তিক SSH ক্লায়েন্ট ‘Putty’ ব্যবহার করে ‘CentOS 8’ সার্ভারে লগইন করা হয়েছে।

Figure: Putty Interface

উপরের ইন্টারফেস অনুযায়ী ‘SSH’ সার্ভারের (CentOS 8) আইপি বসিয়ে ‘Open’ মেনুতে ক্লিক করলে নিচের মত স্ক্রিন আসবে। এখানে ‘login as: root’ টাইপ করে এন্টার প্রেস করলে ‘root’ ইউজারের পাসওয়ার্ড চাবে। পাসওয়ার্ড দিয়ে এন্টার প্রেস করলে ‘Verification Code:’ অপশন এখন আপনার স্মার্টফোন থেকে Google Authenticator অ্যাপস টি রান করলে বর্তমান কোডটি দিতে হবে। প্রতিটি কোডের টাইম ডিউরেশন 30 সেকেন্ড, 30 সেকেন্ড পরে আবার নতুন কোড জেনারেট হবে।

Figure: Putty Login Interface