OOAAOWOOAAOW
LinuxNetworkingGitPythonDockerKubernetesHelmAWS
YouTube
কোর্সসমূহ
আমার লাইব্রেরি
LinuxNetworkingGitPythonDockerKubernetesHelmAWS
YouTube
OOAAOW YouTube Channel
Sponsor OOAAOW

DevOps Lab — Bangladeshi learner-দের জন্য তৈরি

সাবস্ক্রিপশনসাবস্ক্রিপশন নীতি

হোম/aws/মডিউল ৬
০৬

নেটওয়ার্ক নিরাপত্তা — security group আর NACL

Security group আসলে একটা অতিথি-তালিকা, দেয়াল নয়। নিয়মের চারটে ঘর, `0.0.0.0/0` আসলে কতটা খোলা, stateful মানে কী, NACL কেন আলাদা, একটা আসল ঘটনার মতো firewall অডিট, আর যে একটা অভ্যাস firewall-কে নিজে থেকে ঠিক রাখে।

security groupnaclfirewallleast privilegeportcidraudit⏱ ~৩৬ মিনিট
💡 ধারণা

Security group — দেয়াল নয়, অতিথি-তালিকা

আগের পর্বে সার্ভার চালু করার সময় একটা চেকবক্সে ক্লিক করেছিলে: Allow SSH traffic from — Anywhere। ওই একটা ক্লিকে যা হয়েছে, এই পর্ব পুরোটা সেটা নিয়ে।

Security group হলো তোমার সার্ভারের সামনে বসা একটা ফিল্টার। কিন্তু "firewall" শব্দটা একটু ভুল ছবি আঁকে, কারণ মানুষ firewall শুনলে দেয়াল ভাবে — যেখানে তুমি দরজা বন্ধ করো, তালা দাও, নিষেধ লেখো।

Security group তা নয়। ওটা একটা অতিথি-তালিকা।

পার্থক্যটা গভীর, আর এটা বোঝা গেলে বাকি সবকিছু পরিষ্কার হয়ে যায়:

দেয়ালের মত ভাবলেঅতিথি-তালিকার মত ভাবলে
ডিফল্ট অবস্থাসব খোলা, যা বন্ধ করতে চাও বলোসব বন্ধ, যা খুলতে চাও বলো
"নিষেধ" লেখা যায়?হ্যাঁনা — deny নিয়ম বলে কিছু নেই
কোনো প্যাকেট না মিললেঢুকে যায়ফিরে যায়

তাই একটা নতুন security group-এ একটাও inbound নিয়ম থাকে না, আর তার মানে কেউ ঢুকতে পারে না — কোনো "deny all" লেখার দরকার নেই, কারণ তালিকায় নাম না থাকাটাই যথেষ্ট।

আর এই কারণেই একটা প্রশ্নের উত্তর কখনো পাবে না: "কোন নিয়মটা আমাকে আটকাচ্ছে?" কোনো নিয়ম আটকাচ্ছে না। কোনো নিয়ম তোমাকে ঢুকতে দিচ্ছে না — আর এটা সম্পূর্ণ আলাদা প্রশ্ন, যার উত্তর খুঁজতে হয় অন্য জায়গায়।

আর দুটো তথ্য, যেগুলো পরে কাজে লাগবে:

এটা instance-এর সাথে যুক্ত নয়, নেটওয়ার্ক ইন্টারফেসের সাথে। ফলে একটা security group অনেক instance-এ একসাথে লাগানো যায়, আর একটা instance-এ একাধিক group লাগানো যায় (পাঁচটা পর্যন্ত)। একাধিক থাকলে নিয়মগুলো যোগ হয় — যেকোনো একটা group অনুমতি দিলেই যথেষ্ট।

এটা সার্ভারের ভেতরে চলে না। iptables বা ufw-এর মতো এটা মেশিনের উপর বসা কোনো সফটওয়্যার নয় — এটা নেটওয়ার্কের ভেতরে, instance-এ পৌঁছানোর আগে। ফলে সার্ভারটা জানেই না তাকে কে কে খুঁজতে এসে ফিরে গেছে, আর সার্ভারের ভেতরে ঢুকে কেউ এটা বন্ধ করতে পারে না।

💡 ধারণা

একটা নিয়মের চারটে ঘর

প্রতিটা inbound নিয়মে চারটে জিনিস থাকে, আর চতুর্থটাই সবচেয়ে জরুরি:

ঘরকী বলেউদাহরণ
Typeপরিচিত কাজের একটা শর্টকাটSSH, HTTP, HTTPS, PostgreSQL, Custom TCP
ProtocolTCP না UDP না ICMPTCP
Port rangeকোন দরজা২২, ৮০, ৪৪৩, বা ৮০০০-৮০১০
Sourceকে203.0.113.4/32, 0.0.0.0/0, বা অন্য একটা security group

Type আসলে শুধু সুবিধা — SSH বাছলে ও নিজেই TCP আর পোর্ট ২২ বসিয়ে দেয়। কিছু নতুন হলে Custom TCP নিয়ে নিজে পোর্ট লেখো।

পরিচিত পোর্টগুলো মনে রাখা কাজের, কারণ এগুলো বারবার আসবে:

পোর্টকীটীকা
২২SSHশুধু তোমার IP থেকে
৮০HTTPবিশ্বের জন্য — এটাই উদ্দেশ্য
৪৪৩HTTPSবিশ্বের জন্য
৩৩০৬MySQLকখনো বিশ্বের জন্য নয়
৫৪৩২PostgreSQLকখনো বিশ্বের জন্য নয়
৬৩৭৯Redisকখনো বিশ্বের জন্য নয়
৮০০০, ৩০০০অ্যাপ্লিকেশনসাধারণত শুধু অন্য tier থেকে

ডানদিকের কলামটা মনে রাখার মতো, কারণ এটা মতামত নয়, মাপা অভিজ্ঞতা। একটা ডেটাবেসের পোর্ট ইন্টারনেটে খোলা রাখলে কয়েক ঘণ্টার মধ্যে অজানা মেশিন এসে চেষ্টা শুরু করে। এই পর্বের অডিট সেকশনে আমরা ঠিক এমন একটা জিনিস খুঁজে বের করব।

আর Source ঘরটা তিন ধরনের জিনিস নিতে পারে, আর তিনটে সম্পূর্ণ আলাদা অর্থ বহন করে:

১. একটা নির্দিষ্ট ঠিকানা — 203.0.113.4/32। /32 মানে "ঠিক এই একটা ঠিকানা, আর কিছু নয়"।

২. একটা পুরো পরিসর — 10.0.0.0/16 মানে ৬৫,৫৩৬টা ঠিকানা; 0.0.0.0/0 মানে সবগুলো, গোটা ইন্টারনেট।

৩. আরেকটা security group — সবচেয়ে কাজের বিকল্প, আর এই পর্বের শেষ সেকশনের পুরো বিষয়।

⚠️ সতর্কতা

0.0.0.0/0 — এটা কী মানে, আর কখন ঠিক

0.0.0.0/0 লেখার একটা সৎ অনুবাদ আছে: "পৃথিবীর যেকোনো কম্পিউটার।"

🔒

বাকি অংশটা সাবস্ক্রাইবারদের জন্য

১০৯টি অংশের ২২টি দেখানো হয়েছে, ৮৭টি বাকি

←

আগের module

EC2 — প্রথম সার্ভারটা চালু করা

পরের module

User data আর cloud-init — সার্ভার নিজেই নিজেকে সাজায়

→