এনগিনেক্স ওয়েব সার্ভারের সুরক্ষা, কঠোরতা এবং উন্নতি করার চূড়ান্ত গাইড


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

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

মিস করবেন না:

আমরা এই গাইডটিতে নিম্নলিখিত পরিবেশটি ব্যবহার করব:

  1. ডেবিয়ান জিএনইউ/লিনাক্স 8.1 (জেসি) আইপি-ভিত্তিক ভার্চুয়াল হোস্ট বিভাগে বর্ণিত
  2. আইপি ঠিকানা: 192.168.0.25 (tecmintlovesnginx.com) এবং 192.168.0.26 (nginxmeanspower.com)
    1. "এনগিনেক্সের সাথে নাম-ভিত্তিক এবং আইপি-ভিত্তিক ভার্চুয়াল হোস্ট (সার্ভার ব্লক) কীভাবে সেটআপ করবেন"

    এটি মাথায় রেখে, আসুন শুরু করা যাক।

    টিপ # 1: Nginx আপ টু ডেট রাখুন

    এই লেখার সময়, সেন্টোসগুলির সর্বশেষতম এনগিনেক্স সংস্করণ (ইপিল) এবং দেবিয়ান সংগ্রহস্থল যথাক্রমে 1.6.3 এবং 1.6.2-5 হয়।

    সোর্স কোড থেকে প্রোগ্রামটি সংকলনের চেয়ে সংগ্রহস্থলগুলি থেকে সফ্টওয়্যার ইনস্টল করা সহজ, তবে এই শেষ বিকল্পটির দুটি সুবিধা রয়েছে: 1) এটি আপনাকে এনগিনেক্সে অতিরিক্ত মডিউল তৈরি করতে দেয় (যেমন মোড_ সুরক্ষা), এবং 2) এটি সর্বদা একটি নতুন সংস্করণ সরবরাহ করবে সংগ্রহস্থলগুলির তুলনায় (আজকের হিসাবে 1.9.9) রিলিজ নোটগুলি সর্বদা এনগিনেক্স ওয়েব সাইটে উপলব্ধ।

    মিস করবেন না:

    টিপ # 2: এনগিনেক্সে অযৌক্তিক মডিউলগুলি সরান

    উত্স থেকে ইনস্টল করার সময় স্পষ্টভাবে Nginx থেকে মডিউলগুলি সরাতে, করুন:

    # ./configure --without-module1 --without-module2 --without-module3
    

    উদাহরণ স্বরূপ:

    # ./configure  --without-http_dav_module --withouthttp_spdy_module 
    

    আপনি সম্ভবত অনুমান করবেন, উত্স থেকে পূর্ববর্তী এনগিনেক্স ইনস্টলেশন থেকে মডিউলগুলি সরিয়ে ফেলার জন্য আবার সংকলন সম্পাদন করা দরকার।

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

    টিপ # 3: এনগিনেক্সে সার্ভার_ টোকেন্স নির্দেশিকা অক্ষম করুন

    সার্ভার_ টোকেনস নির্দেশনা Nginx কে ত্রুটি পৃষ্ঠায় তার বর্তমান সংস্করণ প্রদর্শন করতে বলে। এটি নির্দিষ্ট নয় কারণ যে নির্দিষ্ট সংস্করণে জানা দুর্বলতার কারণে আপনার ওয়েব সার্ভারে আক্রমণ প্রতিরোধ করতে আপনি বিশ্বের সাথে তথ্যটি ভাগ করতে চান না।

    সার্ভার_ টোকেনস নিষ্ক্রিয় করতে সার্ভার ব্লকের ভিতরে সেট করুন কিনা তা সেট করুন:

    server {
        listen       192.168.0.25:80;
        server_tokens        off;
        server_name  tecmintlovesnginx.com www.tecmintlovesnginx.com;
        access_log  /var/www/logs/tecmintlovesnginx.access.log;
        error_log  /var/www/logs/tecmintlovesnginx.error.log error;
            root   /var/www/tecmintlovesnginx.com/public_html;
            index  index.html index.htm;
    }
    

    Nginx পুনরায় আরম্ভ করুন এবং পরিবর্তনগুলি যাচাই করুন:

    টিপ # 4: এনগিনেক্সে এইচটিটিপি ব্যবহারকারী এজেন্টদের অস্বীকার করুন

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

    অনাকাঙ্ক্ষিত ব্যবহারকারী এজেন্টগুলির তালিকা আরও সহজে বজায় রাখতে নিম্নলিখিত বিষয়বস্তু সহ একটি ফাইল ( /etc/nginx/ blockuseragents.rules ) তৈরি করুন:

    map $http_user_agent $blockedagent {
            default         0;
            ~*malicious     1;
            ~*bot           1;
            ~*backdoor      1;
            ~*crawler       1;
            ~*bandit        1;
    }
    

    এর পরে, সার্ভার ব্লক সংজ্ঞার আগে নিম্নলিখিত লাইনটি রাখুন:

    include /etc/nginx/blockuseragents.rules;
    

    এবং যদি ব্যবহারকারী এজেন্ট স্ট্রিং উপরে বর্ণিত কালো তালিকায় থাকে তবে 403 টি প্রতিক্রিয়া ফিরিয়ে দিতে যদি একটি বিবৃতি থাকে:

    এনজিনেক্স পুনরায় চালু করুন এবং সমস্ত ব্যবহারকারী এজেন্ট যাদের স্ট্রিং উপরের সাথে মেলে আপনার ওয়েব সার্ভার অ্যাক্সেস করা থেকে অবরুদ্ধ করা হবে। আপনার সার্ভারের আইপি দিয়ে 192.168.0.25 প্রতিস্থাপন করুন এবং উইজেটের --user-এজেন্ট স্যুইচের জন্য আলাদা স্ট্রিং চয়ন করতে নির্দ্বিধায়:

    # wget http://192.168.0.25/index.html
    # wget --user-agent "I am a bandit haha" http://192.168.0.25/index.html 
    

    টিপ # 5: এনগিনেক্সে অযাচিত HTTP পদ্ধতিগুলি অক্ষম করুন

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

    এটি করতে, সার্ভার ব্লকের ভিতরে নিম্নলিখিত লাইনগুলি রাখুন। একটি 444 এইচটিটিপি প্রতিক্রিয়া মানে একটি খালি প্রতিক্রিয়া এবং ম্যাগওয়ারের আক্রমণগুলিকে বোকা বানানোর জন্য প্রায়ই এনগিনেক্সে ব্যবহৃত হয়:

    if ($request_method !~ ^(GET|HEAD|POST)$) {
       return 444;
    }
    

    পরীক্ষা করতে, মুছে ফেলতে অনুরোধ প্রেরণের জন্য কার্ল ব্যবহার করুন এবং আপনি যখন নিয়মিত জিইটি প্রেরণ করেন তখন আউটপুটটির সাথে তুলনা করুন:

    # curl -X DELETE http://192.168.0.25/index.html
    # curl -X POST http://192.168.0.25/index.html 
    

    টিপ # 6: এনগিনেক্সে বাফার আকার সীমাবদ্ধতা সেট করুন

    আপনার এনগিনেক্স ওয়েব সার্ভারের বিরুদ্ধে বাফার ওভারফ্লো আক্রমণগুলি প্রতিরোধ করতে, পৃথক ফাইলে নিম্নলিখিত নির্দেশাবলী সেট করুন (উদাহরণস্বরূপ /etc/nginx/conf.d/buffer.conf নামে একটি নতুন ফাইল তৈরি করুন):

    client_body_buffer_size  1k;
    client_header_buffer_size 1k;
    client_max_body_size 1k;
    large_client_header_buffers 2 1k;
    

    উপরের দিকনির্দেশগুলি নিশ্চিত করবে যে আপনার ওয়েব সার্ভারে করা অনুরোধগুলি আপনার সিস্টেমে বাফার উপচে পড়বে না। আবার, তাদের প্রত্যেকটি কী করে তার আরও বিশদ জানতে ডক্সকে দেখুন।

    তারপরে কনফিগারেশন ফাইলে একটি অন্তর্ভুক্ত নির্দেশিকা যুক্ত করুন:

    include /etc/nginx/conf.d/*.conf;
    

    টিপ # 7: আইপি দ্বারা সংযোগের সংখ্যা এনগিনেক্সে সীমাবদ্ধ করুন

    আইপি দ্বারা সংযোগগুলি সীমাবদ্ধ করার জন্য, সীমা_কন_জোন (কোনও HTTP প্রসঙ্গে বা কমপক্ষে সার্ভার ব্লকের বাইরে) এবং সীমা_কন (কোনও HTTP, সার্ভার ব্লক, বা অবস্থানের প্রসঙ্গে) নির্দেশাবলী ব্যবহার করুন।

    তবে, মনে রাখবেন যে সমস্ত সংযোগ গণনা করা হয় না - তবে কেবলমাত্র সার্ভার এবং এর সম্পূর্ণ অনুরোধ শিরোনাম দ্বারা প্রক্রিয়া করা একটি অনুরোধ রয়েছে।

    উদাহরণস্বরূপ, আসুন সংযুক্তির সর্বাধিক সংখ্যার 1 এ সেট করুন (হ্যাঁ, এটি একটি অত্যুক্তি, তবে এটি এই ক্ষেত্রে ঠিক কাজটি করবে) অ্যাড্রেসার নামে একটি অঞ্চলে (আপনি যা কিছু সেট করতে পারেন নাম আপনি চান):

    limit_conn_zone $binary_remote_addr zone=addr:5m;
    limit_conn addr 1;
    

    অ্যাপাচি বেঞ্চমার্কের সাথে একটি সহজ পরীক্ষা (এনগিনেক্স লোড সম্পাদন করুন) যেখানে 10 2 একযোগে অনুরোধগুলি আমাদের বিষয়টি প্রদর্শন করতে সহায়তা করবে:

    # ab -n 10 -c 2 http://192.168.0.25/index.html
    

    আরও তথ্যের জন্য পরবর্তী টিপ দেখুন।

    টিপ # 8: এনগিনেক্সের জন্য মনিটর লগ সেটআপ করুন

    একবার আপনি পূর্ববর্তী টিপটিতে বর্ণিত পরীক্ষাটি সম্পাদন করার পরে সার্ভার ব্লকের জন্য সংজ্ঞায়িত ত্রুটি লগটি পরীক্ষা করুন:

    টিআইপি # 7 তে সংজ্ঞায়িত অ্যাডর জোনে করা ব্যর্থ অনুরোধগুলির জন্য লগগুলি ফিল্টার করতে আপনি গ্রেপ ব্যবহার করতে চাইতে পারেন:

    # grep addr /var/www/logs/tecmintlovesnginx.error.log --color=auto
    

    তেমনি, আপনি আগ্রহের তথ্যের জন্য অ্যাক্সেস লগটি ফিল্টার করতে পারেন, যেমন:

    1. ক্লায়েন্টের আইপি
    2. ব্রাউজারের ধরণ
    3. HTTP অনুরোধের ধরণ
    4. রিসোর্স অনুরোধ করা হয়েছে
    5. অনুরোধটির জবাব দেওয়ার জন্য সার্ভার অবরোধ করে (যদি বেশ কয়েকটি ভার্চুয়াল হোস্ট একই ফাইলে লগইন করে থাকে তবে দরকারী)

    এবং যদি আপনি কোনও অস্বাভাবিক বা অনাকাঙ্ক্ষিত কার্যকলাপ সনাক্ত করেন তবে যথাযথ পদক্ষেপ নিন।

    টিপ # 9: এনগিনেক্সে চিত্র হটলিংক প্রতিরোধ করুন

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

    উদাহরণস্বরূপ, ধরা যাক যে আপনার সার্ভার ব্লকের ভিতরে img নামে একটি উপ-ডিরেক্টরি আছে যেখানে আপনি সেই ভার্চুয়াল হোস্টে ব্যবহৃত সমস্ত চিত্র সঞ্চয় করেন store অন্যান্য চিত্রগুলি আপনার চিত্রগুলি ব্যবহার করা থেকে বিরত রাখতে আপনার ভার্চুয়াল হোস্ট সংজ্ঞাটির ভিতরে আপনাকে নীচের অবস্থানের ব্লকটি প্রবেশ করতে হবে:

    location /img/ {
      valid_referers none blocked 192.168.0.25;
       if ($invalid_referer) {
         return   403;
       }
    }
    

    তারপরে প্রতিটি ভার্চুয়াল হোস্টের index.html ফাইলটি নিম্নরূপে সংশোধন করুন:

    এখন প্রতিটি সাইটে ব্রাউজ করুন এবং আপনি দেখতে পাচ্ছেন যে চিত্রটি সঠিকভাবে 192.168.0.25 এ প্রদর্শিত হবে তবে 192.168.0.26 এ 403 এর প্রতিক্রিয়া দ্বারা প্রতিস্থাপন করা হয়েছে:

    মনে রাখবেন যে এই টিপটি রেফারার ক্ষেত্রটি প্রেরণকারী দূরবর্তী ব্রাউজারের উপর নির্ভর করে।

    টিপ # 10: এসএসএল অক্ষম করুন এবং কেবল এনগিনেক্সে টিএলএস সক্ষম করুন

    যখনই সম্ভব, এর যে কোনও সংস্করণে এসএসএল এড়াতে যা যা লাগে তা করুন এবং পরিবর্তে টিএলএস ব্যবহার করুন। নিম্নলিখিত এসএসএল_প্রোটোকলস আপনার ভার্চুয়াল হোস্ট ফাইলে একটি সার্ভারে বা HTTP প্রসঙ্গে স্থাপন করা উচিত বা অন্তর্ভুক্ত নির্দেশকের মাধ্যমে একটি পৃথক ফাইল (কিছু লোক ssl.conf নামে একটি ফাইল ব্যবহার করেন) , তবে এটি সম্পূর্ণ আপনার উপর নির্ভর করে):

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    

    উদাহরণ স্বরূপ:

    টিপ # 11: এনগিনেক্সে শংসাপত্র তৈরি করুন

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

    # openssl genrsa -aes256 -out tecmintlovesnginx.key 1024
    # openssl req -new -key tecmintlovesnginx.key -out tecmintlovesnginx.csr
    # cp tecmintlovesnginx.key tecmintlovesnginx.key.org
    # openssl rsa -in tecmintlovesnginx.key.org -out tecmintlovesnginx.key
    # openssl x509 -req -days 365 -in tecmintlovesnginx.csr -signkey tecmintlovesnginx.key -out tecmintlovesnginx.crt
    

    তারপরে পরবর্তী টিপ ( http -> https পুনর্নির্দেশ) এর প্রস্তুতির জন্য পৃথক সার্ভার ব্লকের ভিতরে নিম্নলিখিত লাইনগুলি যুক্ত করুন এবং এসএসএল সম্পর্কিত নির্দেশাবলী নতুন ব্লকেও সরান:

    server {
        listen 192.168.0.25:443 ssl;
        server_tokens off;
        server_name  tecmintlovesnginx.com www.tecmintlovesnginx.com;
        root   /var/www/tecmintlovesnginx.com/public_html;
        ssl_certificate /etc/nginx/sites-enabled/certs/tecmintlovesnginx.crt;
        ssl_certificate_key /etc/nginx/sites-enabled/certs/tecmintlovesnginx.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    }
    

    পরবর্তী টিপটিতে আমরা যাচাই করব যে কীভাবে আমাদের সাইট এখন স্ব-স্বাক্ষরিত শংসাপত্র এবং টিএলএস ব্যবহার করছে।

    টিপ # 12: এইচটিটিপি ট্রাফিকটিকে এনজিএনএক্সে এইচটিটিপিএসে পুনর্নির্দেশ করুন

    প্রথম সার্ভার ব্লকে নিম্নলিখিত লাইনটি যুক্ত করুন:

    return 301 https://$server_name$request_uri;
    

    উপরের নির্দেশটি একটি 301 (স্থায়ীভাবে সরানো) প্রতিক্রিয়া ফিরিয়ে দেবে, যা স্থায়ী ইউআরএল পুনর্নির্দেশের জন্য ব্যবহৃত হয় যখনই আপনার ভার্চুয়াল হোস্টের ৮০ টি পোর্ট করার জন্য অনুরোধ করা হয়, এবং অনুরোধটি আমরা পূর্ববর্তী টিপটিতে যুক্ত সার্ভার ব্লকে পুনর্নির্দেশ করব।

    নীচের চিত্রটি পুনঃনির্দেশ প্রদর্শন করে এবং নিশ্চিত করে যে আমরা এনক্রিপশনের জন্য TLS 1.2 এবং AES-256 ব্যবহার করছি:

    সারসংক্ষেপ

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