🔒 راهنمای عمیق گروه های امنیتی AWS با Terraform: Ingress، Egress، پورت ها و پروتکل ها

Summarize this content to 400 words in Persian Lang
1. مقدمه ای بر گروه های امنیتی AWS
🔐 گروه های امنیتی فایروال های مجازی برای نمونه های EC2 که ترافیک شبکه را کنترل می کند.
مدیریت می کنند ورود (ورودی) و خروج ترافیک (خروجی)، تضمین ارتباط ایمن برای نمونه های EC2 شما.
مفاهیم کلیدی:
⚡ قوانین ورود: کنترل ورودی ترافیک به نمونه های EC2
🚪 قوانین خروج: کنترل خروجی ترافیک از نمونه های EC2
🌐 دولتی: گروه های امنیتی حالت دار هستند، به این معنی که اگر به ترافیک ورودی اجازه دهید، پاسخ خروجی مربوطه به طور خودکار مجاز است.
🛡️ چندین گروه امنیتی: می توانید چندین گروه امنیتی را به یک نمونه EC2 اختصاص دهید و قوانینی را برای هر کدام تعریف کنید.
2. پورت ها و پروتکل ها در گروه های امنیتی AWS
🔑 پورت ها:
🖥️ شماره پورت سرویس ها و برنامه هایی را که می توانند از طریق نمونه های EC2 شما ارتباط برقرار کنند، تعریف کنید.
پورت 80: HTTP (ترافیک وب)
پورت 443: HTTPS (ترافیک وب امن)
پورت 22: SSH (ورود از راه دور)
پورت 3389: RDP (دسکتاپ از راه دور)
📡 پروتکل ها:
🔁 TCP: قابل اعتماد پروتکل مبتنی بر اتصال، که توسط اکثر سرویس ها استفاده می شود (به عنوان مثال، HTTP، SSH، اتصالات پایگاه داده).
🚀 UDP: سریعتر، بدون اتصال پروتکل، برای برنامه هایی استفاده می شود که در آن سرعت بر قابلیت اطمینان اولویت دارد (به عنوان مثال، DNS، پخش ویدئو).
⚡ ICMP: بدون اتصال پروتکل مورد استفاده برای تشخیص شبکه (به عنوان مثال، پینگ، traceroute).
3. قوانین ورود و خروج
🛑 قوانین ورود:
این قوانین مشخص می کنند که کدام ترافیک ورودی به نمونه EC2 شما مجاز است.
مثال: اجازه ترافیک HTTP (پورت 80)
resource “aws_security_group_rule” “allow_http” {
type = “ingress” # 🔥 Inbound traffic
from_port = 80 # 🔑 Port 80 for HTTP
to_port = 80 # 🔑 Allow to Port 80
protocol = “tcp” # 📡 TCP Protocol
cidr_blocks = [“0.0.0.0/0”] # 🌍 Any IP
security_group_id = “sg-123456” # 🛡️ Security Group ID
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
🎯 from_port = 80: ترافیک ورودی را مشخص می کند پورت 80 (HTTP).
🌐 پروتکل = tcp: نشان می دهد TCP پروتکل
🌍 cidr_blocks = [“0.0.0.0/0”]: اجازه دسترسی از هر IP را می دهد.
🚪 قوانین خروج:
این قوانین مشخص می کنند که کدام ترافیک خروجی از نمونه EC2 شما مجاز است.
مثال: به همه ترافیک خروجی اجازه دهید
resource “aws_security_group_rule” “allow_all_egress” {
type = “egress” # 🔄 Outbound traffic
from_port = 0 # 🔑 Any Port
to_port = 65535 # 🔑 Any Port
protocol = “-1” # 🌐 Any Protocol
cidr_blocks = [“0.0.0.0/0”] # 🌍 Any IP
security_group_id = “sg-123456” # 🛡️ Security Group ID
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
🎯 from_port = 0 و to_port = 65535: به همه شماره پورت ها اجازه می دهد.
🌐 پروتکل = “-1”: هر پروتکل مجاز را مشخص می کند.
🌍 cidr_blocks = [“0.0.0.0/0”]: به تمام ترافیک خروجی به هر مقصدی اجازه می دهد.
4. توضیح مفصل پروتکل ها
🔁 TCP (پروتکل کنترل انتقال):
🔒 اتصال گرا پروتکلی که ارتباط قابل اعتماد را تضمین می کند.
این تضمین می کند که داده ها به ترتیب صحیح دریافت می شوند و دست نخورده هستند.
مثال: برای ورود ایمن به SSH (پورت 22) اجازه دهید
resource “aws_security_group_rule” “allow_ssh” {
type = “ingress”
from_port = 22 # 🔑 Port 22 for SSH
to_port = 22
protocol = “tcp”
cidr_blocks = [“0.0.0.0/0”] # 🌍 Any IP address
security_group_id = “sg-123456”
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
🚀 UDP (پروتکل دیتاگرام کاربر):
⚡ بدون اتصال پروتکل مورد استفاده در برنامه هایی که سرعت بر قابلیت اطمینان اولویت دارد (به عنوان مثال، پخش ویدیو، بازی آنلاین).
تحویل یا سفارش داده را تضمین نمی کند.
مثال: درخواستهای DNS (پورت 53) را مجاز کنید
resource “aws_security_group_rule” “allow_dns” {
type = “ingress”
from_port = 53 # 🔑 Port 53 for DNS
to_port = 53
protocol = “udp” # 📡 UDP Protocol
cidr_blocks = [“0.0.0.0/0”] # 🌍 Any IP address
security_group_id = “sg-123456”
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
⚡ ICMP (پروتکل پیام کنترل اینترنت):
🌐 بدون اتصال پروتکل برای تشخیص شبکه (به عنوان مثال، پینگ، traceroute).
از پورت ها استفاده نمی کند. در عوض، استفاده می کند انواع ICMP (مثلا درخواست اکو، پاسخ اکو).
مثال: اجازه پینگ (درخواست اکو ICMP)
resource “aws_security_group_rule” “allow_ping” {
type = “ingress”
from_port = -1 # ICMP doesn’t use ports
to_port = -1
protocol = “icmp” # 📡 ICMP Protocol
cidr_blocks = [“0.0.0.0/0”] # 🌍 Any IP
security_group_id = “sg-123456”
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
🎯 from_port = -1 و to_port = -1: نشان می دهد ICMP (بدون پورت).
📡 پروتکل = “icmp”: مشخص می کند ICMP پروتکل
5. ارتباط زیرشبکه خصوصی با زیرشبکه عمومی
برای فعال کردن ارتباط بین a زیر شبکه خصوصی و الف زیر شبکه عمومی، راه اندازی یک دروازه NAT یا نمونه NAT در زیر شبکه عمومی. زیرشبکه خصوصی ترافیک خود را از طریق NAT جهت دسترسی به اینترنت هدایت می کند، در حالی که زیرشبکه عمومی می تواند مستقیماً با اینترنت ارتباط برقرار کند.
نکات کلیدی:
زیرشبکه عمومی: می تواند به طور مستقیم به اینترنت دسترسی داشته باشد.
زیرشبکه خصوصی: نمی تواند مستقیماً به اینترنت دسترسی داشته باشد، اما ترافیک آن را از طریق a هدایت می کند دروازه NAT در زیر شبکه عمومی.
دروازه NAT: دسترسی به اینترنت خروجی را برای نمونه های خصوصی و در عین حال جلوگیری از ترافیک ورودی اجازه می دهد.
6. بهترین روش ها برای گروه های امنیتی در AWS
🔒 کمترین امتیاز: فقط به ترافیک ضروری اجازه دهید. مثلا اجازه دهید SSH (پورت 22) فقط از آدرس های IP قابل اعتماد.
🛡️ بلوک های خاص CIDR: از مصرف خودداری کنید 0.0.0.0/0- از محدوده های IP خاص تر برای بهبود امنیت استفاده کنید.
🎯 از گروه های امنیتی مبتنی بر نقش استفاده کنید: گروه های امنیتی مختلف را بر اساس نقش ها اختصاص دهید (به عنوان مثال، وب سرور، سرور پایگاه داده).
🔄 بررسی دوره ای: به طور منظم قوانین گروه امنیتی را بررسی و به روز کنید تا مطمئن شوید که آنها با نیازهای امنیتی شما مطابقت دارند.
💡 طراحی دولتی: از آنجایی که گروه های امنیتی حالت دار هستند، اجازه دادن به ترافیک ورودی به طور خودکار به ترافیک خروجی مربوطه اجازه می دهد.
7. پیکربندی Terraform برای گروه های امنیتی (Ingress & Egress)
اینجا یک است مثال کامل از یک پیکربندی Terraform برای گروه های امنیتی AWS، از جمله هم قوانین ورود و هم خروج:
resource “aws_security_group” “example” {
name = “example-security-group”
description = “Allow HTTP and HTTPS access, restrict SSH to specific IP”
# Ingress rule: Allow HTTP (Port 80) from anywhere
resource “aws_security_group_rule” “allow_http” {
type = “ingress” # 🔥 Inbound traffic
from_port = 80 # 🔑 Port 80 for HTTP
to_port = 80 # 🔑 Allow to Port 80
protocol = “tcp” # 📡 TCP Protocol
cidr_blocks = [“0.0.0.0/0”] # 🌍 Any IP
security_group_id = aws_security_group.example.id
}
# Egress rule: Allow all outbound traffic
resource “aws_security_group_rule” “allow_all_egress” {
type = “egress” # 🔄 Outbound traffic
from_port = 0 # 🔑 Any Port
to_port = 65535 # 🔑 Any Port
protocol = “-1” # 🌐 Any Protocol
cidr_blocks = [“0.0.0.
0/0”] # 🌍 Any IP
security_group_id = aws_security_group.example.id
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
8. نتیجه گیری
گروه های امنیتی AWS هستند برای مدیریت ترافیک شبکه ضروری است به نمونه های EC2 شما.
قوانین ورود کنترل ترافیک ورودی، در حالی که قوانین خروج ترافیک خروجی را مدیریت کنید
با درک چگونگی پورت ها، پروتکل ها، و بلوک های CIDR با همکاری گروه های امنیتی، می توانید اطمینان حاصل کنید که زیرساخت AWS شما وجود دارد امن و به خوبی مدیریت می شود.
این یادداشت ها باید به روشن شدن مفاهیم کمک کنند قوانین ورود و خروج، پورت ها، و پروتکل ها در گروه های امنیتی AWS. با خیال راحت این قوانین و تنظیمات را در Terraform برای موارد استفاده خود آزمایش کنید!
1. مقدمه ای بر گروه های امنیتی AWS
- 🔐 گروه های امنیتی فایروال های مجازی برای نمونه های EC2 که ترافیک شبکه را کنترل می کند.
- مدیریت می کنند ورود (ورودی) و خروج ترافیک (خروجی)، تضمین ارتباط ایمن برای نمونه های EC2 شما.
مفاهیم کلیدی:
- ⚡ قوانین ورود: کنترل ورودی ترافیک به نمونه های EC2
- 🚪 قوانین خروج: کنترل خروجی ترافیک از نمونه های EC2
- 🌐 دولتی: گروه های امنیتی حالت دار هستند، به این معنی که اگر به ترافیک ورودی اجازه دهید، پاسخ خروجی مربوطه به طور خودکار مجاز است.
- 🛡️ چندین گروه امنیتی: می توانید چندین گروه امنیتی را به یک نمونه EC2 اختصاص دهید و قوانینی را برای هر کدام تعریف کنید.
2. پورت ها و پروتکل ها در گروه های امنیتی AWS
🔑 پورت ها:
-
🖥️ شماره پورت سرویس ها و برنامه هایی را که می توانند از طریق نمونه های EC2 شما ارتباط برقرار کنند، تعریف کنید.
- پورت 80: HTTP (ترافیک وب)
- پورت 443: HTTPS (ترافیک وب امن)
- پورت 22: SSH (ورود از راه دور)
- پورت 3389: RDP (دسکتاپ از راه دور)
📡 پروتکل ها:
- 🔁 TCP: قابل اعتماد پروتکل مبتنی بر اتصال، که توسط اکثر سرویس ها استفاده می شود (به عنوان مثال، HTTP، SSH، اتصالات پایگاه داده).
- 🚀 UDP: سریعتر، بدون اتصال پروتکل، برای برنامه هایی استفاده می شود که در آن سرعت بر قابلیت اطمینان اولویت دارد (به عنوان مثال، DNS، پخش ویدئو).
- ⚡ ICMP: بدون اتصال پروتکل مورد استفاده برای تشخیص شبکه (به عنوان مثال، پینگ، traceroute).
3. قوانین ورود و خروج
🛑 قوانین ورود:
این قوانین مشخص می کنند که کدام ترافیک ورودی به نمونه EC2 شما مجاز است.
مثال: اجازه ترافیک HTTP (پورت 80)
resource "aws_security_group_rule" "allow_http" {
type = "ingress" # 🔥 Inbound traffic
from_port = 80 # 🔑 Port 80 for HTTP
to_port = 80 # 🔑 Allow to Port 80
protocol = "tcp" # 📡 TCP Protocol
cidr_blocks = ["0.0.0.0/0"] # 🌍 Any IP
security_group_id = "sg-123456" # 🛡️ Security Group ID
}
- 🎯 from_port = 80: ترافیک ورودی را مشخص می کند پورت 80 (HTTP).
- 🌐 پروتکل = tcp: نشان می دهد TCP پروتکل
- 🌍 cidr_blocks = [“0.0.0.0/0”]: اجازه دسترسی از هر IP را می دهد.
🚪 قوانین خروج:
این قوانین مشخص می کنند که کدام ترافیک خروجی از نمونه EC2 شما مجاز است.
مثال: به همه ترافیک خروجی اجازه دهید
resource "aws_security_group_rule" "allow_all_egress" {
type = "egress" # 🔄 Outbound traffic
from_port = 0 # 🔑 Any Port
to_port = 65535 # 🔑 Any Port
protocol = "-1" # 🌐 Any Protocol
cidr_blocks = ["0.0.0.0/0"] # 🌍 Any IP
security_group_id = "sg-123456" # 🛡️ Security Group ID
}
- 🎯 from_port = 0 و to_port = 65535: به همه شماره پورت ها اجازه می دهد.
- 🌐 پروتکل = “-1”: هر پروتکل مجاز را مشخص می کند.
- 🌍 cidr_blocks = [“0.0.0.0/0”]: به تمام ترافیک خروجی به هر مقصدی اجازه می دهد.
4. توضیح مفصل پروتکل ها
🔁 TCP (پروتکل کنترل انتقال):
- 🔒 اتصال گرا پروتکلی که ارتباط قابل اعتماد را تضمین می کند.
- این تضمین می کند که داده ها به ترتیب صحیح دریافت می شوند و دست نخورده هستند.
مثال: برای ورود ایمن به SSH (پورت 22) اجازه دهید
resource "aws_security_group_rule" "allow_ssh" {
type = "ingress"
from_port = 22 # 🔑 Port 22 for SSH
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] # 🌍 Any IP address
security_group_id = "sg-123456"
}
🚀 UDP (پروتکل دیتاگرام کاربر):
- ⚡ بدون اتصال پروتکل مورد استفاده در برنامه هایی که سرعت بر قابلیت اطمینان اولویت دارد (به عنوان مثال، پخش ویدیو، بازی آنلاین).
- تحویل یا سفارش داده را تضمین نمی کند.
مثال: درخواستهای DNS (پورت 53) را مجاز کنید
resource "aws_security_group_rule" "allow_dns" {
type = "ingress"
from_port = 53 # 🔑 Port 53 for DNS
to_port = 53
protocol = "udp" # 📡 UDP Protocol
cidr_blocks = ["0.0.0.0/0"] # 🌍 Any IP address
security_group_id = "sg-123456"
}
⚡ ICMP (پروتکل پیام کنترل اینترنت):
- 🌐 بدون اتصال پروتکل برای تشخیص شبکه (به عنوان مثال، پینگ، traceroute).
- از پورت ها استفاده نمی کند. در عوض، استفاده می کند انواع ICMP (مثلا درخواست اکو، پاسخ اکو).
مثال: اجازه پینگ (درخواست اکو ICMP)
resource "aws_security_group_rule" "allow_ping" {
type = "ingress"
from_port = -1 # ICMP doesn’t use ports
to_port = -1
protocol = "icmp" # 📡 ICMP Protocol
cidr_blocks = ["0.0.0.0/0"] # 🌍 Any IP
security_group_id = "sg-123456"
}
- 🎯 from_port = -1 و to_port = -1: نشان می دهد ICMP (بدون پورت).
- 📡 پروتکل = “icmp”: مشخص می کند ICMP پروتکل
5. ارتباط زیرشبکه خصوصی با زیرشبکه عمومی
برای فعال کردن ارتباط بین a زیر شبکه خصوصی و الف زیر شبکه عمومی، راه اندازی یک دروازه NAT یا نمونه NAT در زیر شبکه عمومی. زیرشبکه خصوصی ترافیک خود را از طریق NAT جهت دسترسی به اینترنت هدایت می کند، در حالی که زیرشبکه عمومی می تواند مستقیماً با اینترنت ارتباط برقرار کند.
نکات کلیدی:
- زیرشبکه عمومی: می تواند به طور مستقیم به اینترنت دسترسی داشته باشد.
- زیرشبکه خصوصی: نمی تواند مستقیماً به اینترنت دسترسی داشته باشد، اما ترافیک آن را از طریق a هدایت می کند دروازه NAT در زیر شبکه عمومی.
- دروازه NAT: دسترسی به اینترنت خروجی را برای نمونه های خصوصی و در عین حال جلوگیری از ترافیک ورودی اجازه می دهد.
6. بهترین روش ها برای گروه های امنیتی در AWS
- 🔒 کمترین امتیاز: فقط به ترافیک ضروری اجازه دهید. مثلا اجازه دهید SSH (پورت 22) فقط از آدرس های IP قابل اعتماد.
-
🛡️ بلوک های خاص CIDR: از مصرف خودداری کنید
0.0.0.0/0
– از محدوده های IP خاص تر برای بهبود امنیت استفاده کنید. - 🎯 از گروه های امنیتی مبتنی بر نقش استفاده کنید: گروه های امنیتی مختلف را بر اساس نقش ها اختصاص دهید (به عنوان مثال، وب سرور، سرور پایگاه داده).
- 🔄 بررسی دوره ای: به طور منظم قوانین گروه امنیتی را بررسی و به روز کنید تا مطمئن شوید که آنها با نیازهای امنیتی شما مطابقت دارند.
- 💡 طراحی دولتی: از آنجایی که گروه های امنیتی حالت دار هستند، اجازه دادن به ترافیک ورودی به طور خودکار به ترافیک خروجی مربوطه اجازه می دهد.
7. پیکربندی Terraform برای گروه های امنیتی (Ingress & Egress)
اینجا یک است مثال کامل از یک پیکربندی Terraform برای گروه های امنیتی AWS، از جمله هم قوانین ورود و هم خروج:
resource "aws_security_group" "example" {
name = "example-security-group"
description = "Allow HTTP and HTTPS access, restrict SSH to specific IP"
# Ingress rule: Allow HTTP (Port 80) from anywhere
resource "aws_security_group_rule" "allow_http" {
type = "ingress" # 🔥 Inbound traffic
from_port = 80 # 🔑 Port 80 for HTTP
to_port = 80 # 🔑 Allow to Port 80
protocol = "tcp" # 📡 TCP Protocol
cidr_blocks = ["0.0.0.0/0"] # 🌍 Any IP
security_group_id = aws_security_group.example.id
}
# Egress rule: Allow all outbound traffic
resource "aws_security_group_rule" "allow_all_egress" {
type = "egress" # 🔄 Outbound traffic
from_port = 0 # 🔑 Any Port
to_port = 65535 # 🔑 Any Port
protocol = "-1" # 🌐 Any Protocol
cidr_blocks = ["0.0.0.
0/0"] # 🌍 Any IP
security_group_id = aws_security_group.example.id
}
}
8. نتیجه گیری
- گروه های امنیتی AWS هستند برای مدیریت ترافیک شبکه ضروری است به نمونه های EC2 شما.
- قوانین ورود کنترل ترافیک ورودی، در حالی که قوانین خروج ترافیک خروجی را مدیریت کنید
- با درک چگونگی پورت ها، پروتکل ها، و بلوک های CIDR با همکاری گروه های امنیتی، می توانید اطمینان حاصل کنید که زیرساخت AWS شما وجود دارد امن و به خوبی مدیریت می شود.
این یادداشت ها باید به روشن شدن مفاهیم کمک کنند قوانین ورود و خروج، پورت ها، و پروتکل ها در گروه های امنیتی AWS. با خیال راحت این قوانین و تنظیمات را در Terraform برای موارد استفاده خود آزمایش کنید!