Nginx-এ স্ব-স্বাক্ষর ব্যবহার করে অ্যাপ্লিকেশন স্তরের L7-এ কাঁচা আইপি-তে HTTP/HTTPS যোগাযোগ প্রত্যাখ্যান করা
হ্যালো, আমি অযোগ্য।
এই এজ কম্পিউটিং পরিষেবাগুলির প্রসারের মধ্যে, কিছু ডোমেনের জন্য ইচ্ছাকৃতভাবে unbound বা DNS সার্ভার ইত্যাদির উপর মনোযোগ দেওয়া হয় না, তবে কিছু লোকের জন্য এটি এখনও প্রয়োজনীয়।
উদাহরণস্বরূপ, আমার মতো যারা একটি স্ব-হোস্টেড ইমেল সার্ভার চালান যা ইমেল পাঠাতে এবং গ্রহণ করতে পারে, তাদের জন্য OpenDKIM এর মতো নির্ভরতার কারণে unbound ইনস্টল হতে পারে।
এবং, প্রকাশিত কাঁচা আইপি ঠিকানাগুলি ডিডিওএস আক্রমণের দুর্বলতা হতে পারে, এবং কাঁচা আইপি দিয়ে অ্যাক্সেস করা হলে মানসিক স্বাস্থ্যের জন্য এটি ভাল নয়, তাই আমি এটি ব্লক করার সিদ্ধান্ত নিয়েছি।
ঠিক আছে, ডিডিওএস-এর বিরুদ্ধে Fail2ban দিয়ে ব্লক করা সম্ভব, তবে এটি লগ থেকে ব্লক করার জন্য লক্ষ্য আইপিগুলির একটি ডাটাবেসে প্রবেশ করে পরিচালিত হয় বলে মনে হয়, যা লোড বাড়াতে পারে। যদি Fail2ban ব্যবহার করা হয়, তবে এটি ডোমেন-ভিত্তিক হওয়া উচিত। তাই, এইবার, আমি Nginx ব্যবহার করে HTTP/HTTPS যোগাযোগ থেকে কাঁচা আইপিগুলিকে রক্ষা করার জন্য একটি ভিন্ন পদ্ধতি ব্যবহার করব যা সাধারণত ব্যবহৃত হয় না।
শুধুমাত্র HTTP যোগাযোগ ব্লক করার ক্ষেত্রে
আমার ক্ষেত্রে, গ্লোবাল পাবলিক আইপি ঠিকানাটি নিম্নরূপ, তাই এটি এমন হবে।
# http通信
server {
listen 80;
listen [::]:80;
server_name 167.179.75.206;
return 444;
}
তবে, SSL যোগাযোগের ক্ষেত্রে, Nginx listen 443 ssl; এর মতো SSL যোগাযোগকে স্পষ্টভাবে উল্লেখ করে HTTPS লিসেনিং সক্ষম করে।
এবং, যখন আপনি http বিভাগে এটি যোগ করেন এবং nginx -t চালান, তখন...
# https通信
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name 167.179.75.206;
# IPアドレスへのアクセスを拒否
return 444;
}
কি হবে?
# nginx -t
nginx: [emerg] no "ssl_certificate" is defined for the "listen ... ssl" directive in /usr/local/etc/nginx/nginx.conf:90
nginx: configuration file /usr/local/etc/nginx/nginx.conf test failed
হ্যাঁ, এটি একটি SSL যোগাযোগ, তাই এটি কোনো কী নেই বলে অভিযোগ করবে।
এই ক্ষেত্রে, স্ব-স্বাক্ষর প্রয়োজন... "আমিই!" বলে এটি আমার সার্টিফিকেট হিসাবে উপস্থাপন করতে হবে। আমি আমার পরিচয় প্রমাণ করব, এখন, এখানে...
তাহলে OpenSSL, আপনি কি কিছু করতে পারেন?
OpenSSL-এর সাহায্যে, আমরা এই স্ব-স্বাক্ষরিত... স্ব-স্বাক্ষর প্রমাণীকরণ করব।
যদিও OpenBSD থেকে বিভক্ত LibreSSL-এর উপর পরবর্তী যুগের দায়িত্ব অর্পণ করার অনুভূতি অস্বীকার করা যায় না, তবে এটি সাধারণীকরণ হতে বেশ কিছুটা সময় লাগবে বলে মনে হয়।
আপাতত, যেহেতু আমি এটি শুধুমাত্র নিজের জন্য ব্যবহার করব, তাই আমি এটিকে 3 বছর ধরে রাখব।
openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -keyout /usr/local/etc/nginx/selfsigned.key -out /usr/local/etc/nginx/selfsigned.crt
এবং, এন্টার টিপে কিছু না লিখে এগিয়ে গেলে, নির্দিষ্ট এক্সপোর্ট অবস্থানে একটি কী তৈরি হবে।
Nginx, আমি ফিরে এসেছি
আসুন Nginx-এ এই কীটি নির্দিষ্ট করি।
# https通信
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name 167.179.75.206;
# 自己署名証明書と秘密鍵の指定
ssl_certificate /usr/local/etc/nginx/selfsigned.crt;
ssl_certificate_key /usr/local/etc/nginx/selfsigned.key;
return 444;
}
এটি কাজ করেছে।
শেষ।