আইটি অ্যাডমিনিস্ট্রেশন ও অটোমেশন: কীভাবে একটি সিকিউরড রিমোট পাওয়ারশেল এক্সিকিউশন সিস্টেম তৈরি করলাম

 BD-FIX Solutions-এর ফাউন্ডার এবং একজন আইটি প্রফেশনাল হিসেবে, কাজের গতি এবং পারফেকশন আমার কাছে সবসময়ই খুব গুরুত্বপূর্ণ। ক্লায়েন্টের নতুন পিসিতে উইন্ডোজ সেটআপ দেওয়া বা সফটওয়্যার প্যাকেজ ইন্সটল করার পর, বারবার পেনড্রাইভ লাগিয়ে ব্যাচ স্ক্রিপ্ট (যেমন আমাদের কাস্টম hook.cmd) রান করানোটা বেশ ঝামেলার এবং সময়সাপেক্ষ কাজ।

তাই কাজের পদ্ধতিকে আরও স্মার্ট করতে আমি একটি রিমোট অটোমেশন সিস্টেম তৈরি করার সিদ্ধান্ত নিই। লক্ষ্য ছিল খুব সহজ: ক্লায়েন্টের পিসিতে পাওয়ারশেল ওপেন করে শুধু irm https://bdfix.net/act | iex টাইপ করবো, আর আমার সার্ভার থেকে স্ক্রিপ্টটি অটোমেটিক ডাউনলোড হয়ে ব্যাকগ্রাউন্ডে রান করবে।

নিচে আমার এই প্রজেক্টটি সফলভাবে তৈরি করার ধাপে ধাপে অভিজ্ঞতা শেয়ার করা হলো।

চ্যালেঞ্জ ১: সিকিউরিটি প্রটোকল (TLS 1.2) ব্লক

প্রথমেই যে বাধাটি পেয়েছিলাম সেটি হলো: "The request was aborted: The connection was closed unexpectedly."

আধুনিক ওয়েব সার্ভারগুলো সবসময় সিকিউরড (SSL/HTTPS) কানেকশন ব্যবহার করে। কিন্তু উইন্ডোজের ডিফল্ট পাওয়ারশেল অনেক সময় ইন্টারনেট থেকে ফাইল নামানোর জন্য পুরনো সিকিউরিটি প্রটোকল (TLS 1.0) ব্যবহার করার চেষ্টা করে। সার্ভার তখন সেটাকে আনসেফ মনে করে কানেকশন কেটে দেয়।

প্রতিটি নতুন পিসিতে বারবার বড় কোড টাইপ করে TLS 1.2 এনাবল করার বদলে, আমি এই সমাধানটি সরাসরি আমার পিএইচপি (PHP) স্ক্রিপ্টের ভেতরেই কোড করে দিয়েছি:

PowerShell
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

চ্যালেঞ্জ ২: .htaccess রিডাইরেক্ট বনাম পাওয়ারশেল

শুরুতে আমি ইউআরএল (URL) শর্ট করার জন্য সিপ্যানেলের .htaccess ফাইলে রিডাইরেক্ট রুল ব্যবহার করেছিলাম। ব্রাউজারে এটি কাজ করলেও, পাওয়ারশেলের Invoke-RestMethod (irm) কমান্ডটি রিডাইরেক্ট (HTTP 301/302) রিকোয়েস্টগুলোর ক্ষেত্রে অনেক সময় কনফিউজড হয়ে যায়। এছাড়া সার্ভারের ফায়ারওয়াল বা অ্যান্টি-বট প্রোটেকশন একে স্প্যামিং ভেবে ব্লক করে দিচ্ছিল।

এর সমাধান হিসেবে আমি রিডাইরেক্ট সিস্টেম পুরোপুরি বাদ দিয়ে সরাসরি একটি PHP Wrapper বা ইনডেক্স ফাইল ব্যবহার করার সিদ্ধান্ত নিই।

চ্যালেঞ্জ ৩: হাইড করা স্ক্রিপ্ট (User-Agent Filtering)

আমি চেয়েছিলাম সিস্টেমটি যেন একদম প্রফেশনাল এবং সিকিউরড হয়। সাধারণ কোনো মানুষ যদি ব্রাউজার (যেমন: ক্রোম বা ফায়ারফক্স) দিয়ে https://bdfix.net/act লিংকে ঢোকে, তবে সে কোনো কোড বা স্ক্রিপ্ট দেখতে পাবে না, বরং তাকে সোজা আমার ওয়েবসাইটের হোমপেজে পাঠিয়ে দেওয়া হবে। কিন্তু রিকোয়েস্টটি যদি পাওয়ারশেল থেকে আসে, তবেই সে কোডটি পাবে।

এজন্য আমি পিএইচপি-তে "User-Agent Filtering" ট্রিকটি ব্যবহার করেছি। সার্ভার চেক করবে কে ফাইলটি চাইছে, আর সেই অনুযায়ী রেসপন্স করবে।

চূড়ান্ত সমাধান: পিএইচপি (PHP) ম্যাজিক কোড

সবগুলো সমস্যার সমাধান করে সিপ্যানেলের act ফোল্ডারের ভেতর index.php ফাইলে আমি নিচের কোডটি ব্যবহার করেছি।

এটি পাওয়ারশেল ছাড়া অন্য সব ব্রাউজারকে হোমপেজে রিডাইরেক্ট করে দেয় এবং পাওয়ারশেলের ক্ষেত্রে HTTP হেডারকে text/plain ফরম্যাটে পরিবর্তন করে র-কোড (Raw Code) সাপ্লাই দেয়।

PHP
<?php
// ইউজারের ব্রাউজার নাকি পাওয়ারশেল সেটা চেক করা হচ্ছে
$userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';

// যদি রিকোয়েস্ট পাওয়ারশেল থেকে না আসে, তবে তাকে হোমপেজে পাঠিয়ে দাও
if (stripos($userAgent, 'PowerShell') === false && stripos($userAgent, 'curl') === false) {
    header("Location: https://bdfix.net/");
    exit;
}

// আর যদি পাওয়ারশেল হয়, তবে নিচের কোডগুলো দেখাও
header("Content-Type: text/plain");
?>
# BD-FIX Solutions - Remote Execution Script

# TLS 1.2 এনাবল করা
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

# সার্ভার থেকে মেইন ফাইলের লিংক
$cmdUrl = "https://bdfix.net/act/hook.cmd" 
$tempCmd = Join-Path $env:TEMP "bdfix_hook.cmd"

try {
    Write-Host "Connecting to BD-FIX Server..." -ForegroundColor Cyan
    
    # ফাইলটি সাইলেন্টলি ডাউনলোড করা
    Invoke-WebRequest -Uri $cmdUrl -OutFile $tempCmd -UseBasicParsing
    
    if (Test-Path $tempCmd) {
        Write-Host "Executing BD-FIX Package..." -ForegroundColor Yellow
        
        # ডাউনলোড করা ব্যাচ ফাইলটি ব্যাকগ্রাউন্ডে রান করা
        $proc = Start-Process -FilePath "cmd.exe" -ArgumentList "/c `"$tempCmd`" /Ohook" -Wait -WindowStyle Hidden -PassThru
        
        Write-Host "Operation Completed Successfully." -ForegroundColor Green
    } else {
        Write-Host "ERROR: Payload file not found on the server!" -ForegroundColor Red
    }
} finally {
    # কাজ শেষে টেম্পোরারি ফাইলগুলো মুছে ফেলা (Trace clean up)
    if (Test-Path $tempCmd) {
        Remove-Item -Path $tempCmd -Force
    }
}

ফলাফল

এখন যেকোনো পিসিতে আমার কাজ শেষ হলে, আমি শুধু অ্যাডমিন মোডে পাওয়ারশেল ওপেন করি এবং এই কমান্ডটি দিই:

PowerShell
irm https://bdfix.net/act | iex

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

Labels: ,
This is the most recent post.
Older Post

Post a Comment

[blogger]

Author Name

Contact Form

Name

Email *

Message *

Powered by Blogger.