• Home / آموزش‌ها / آموزش Floating IP…

آموزش Floating IP و Firewall در Hetzner؛ تنظیم IP، Inbound و Outbound Rules

Floating IP هتزنر چیست؟

Floating IP یک Public IP اضافی است که می‌توانید به Cloud Serverهای هتزنر اختصاص دهید و در صورت نیاز آن را از یک Server جدا کرده و به Server دیگری منتقل کنید. این قابلیت برای سناریوهایی مثل Failover و High Availability مفید است. هر Floating IP در یک لحظه فقط به یک Server اختصاص داده می‌شود.
برای مثال دو Server دارید:
server-01
server-02
سایت شما از Floating IP استفاده می‌کند. اگر server-01 دچار مشکل شود، می‌توانید Floating IP را به server-02 منتقل کنید و IP عمومی سرویس را ثابت نگه دارید.

بخش Add Floating IP در تصویر

در تصویر اول پنجره Add Floating IP دیده می‌شود. در این قسمت باید Location، Protocol و نام Floating IP را مشخص کنید. Hetzner هنگام ساخت Floating IP از شما می‌خواهد Location را انتخاب کنید تا Routing برای همان Location بهینه شود و سپس بین IPv4 و IPv6 یکی را انتخاب کنید.
Locationهای تصویر شامل:
EU-CENTRAL: Falkenstein، Nuremberg و Helsinki
US-EAST: Ashburn, VA
است.

Location را چگونه انتخاب کنیم؟

بهتر است Floating IP را در همان Network Zone سروری بسازید که قرار است IP به آن اختصاص داده شود. Floating IP فقط به Serverهایی قابل Assign است که در همان Network Zone قرار داشته باشند.
برای مثال اگر Server شما در Falkenstein باشد، انتخاب Falkenstein برای Floating IP انتخاب طبیعی‌تری است.

Protocol؛ IPv4 یا IPv6؟

در تصویر Protocol روی IPv4 قرار گرفته است. Hetzner برای Floating IP از IPv4 و IPv6 پشتیبانی می‌کند.
نکته مهم این است که Server برای دریافت Floating IPv4 باید از قبل Primary IPv4 داشته باشد و برای Floating IPv6 نیز باید Primary IPv6 داشته باشد. نوع Primary IP و Floating IP باید یکسان باشد.

هزینه Floating IP هتزنر

در حال حاضر قیمت رسمی Hetzner برای Floating IPv4 برابر €3 در ماه یا €0.00446 در ساعت و برای Floating IPv6 برابر €1 در ماه یا €0.00149 در ساعت است. این قیمت‌ها بدون VAT اعلام شده‌اند.
نرخ فروش یورو در Bonbast هنگام نگارش این مطلب حدود 216,200 تومان است. اگر پرداخت را با نرخ 1,000 تومان پایین‌تر از Bonbast محاسبه کنیم، مبنای هر یورو تقریباً 215,200 تومان می‌شود.
بنابراین:
Floating IPv4 – €3: حدود 645,600 تومان در ماه
Floating IPv6 – €1: حدود 215,200 تومان در ماه
نرخ ارز لحظه‌ای تغییر می‌کند، بنابراین مبلغ تومانی نهایی باید هنگام پرداخت دوباره محاسبه شود.

پرداخت هزینه Hetzner

اگر برای پرداخت فاکتور Hetzner به یورو نیاز دارید، پرداخت می‌تواند با 1,000 تومان پایین‌تر از نرخ لحظه‌ای Bonbast، بدون کارمزد و معمولاً ظرف کمتر از یک ساعت انجام شود.

آیا Floating IP بعد از ساخت خودکار فعال می‌شود؟

بعد از ساخت Floating IP باید آن را به Server موردنظر Assign کنید. Hetzner اجازه می‌دهد Floating IP را هر زمان Unassign کرده و دوباره به Server دیگری اختصاص دهید، اما در یک لحظه نمی‌تواند به بیش از یک Server متصل باشد.
بعد از Assign شدن نیز سیستم‌عامل Server باید برای استفاده از Floating IP تنظیم شود. Hetzner پس از Assign کردن IP دستور لازم برای تنظیم موقت را در Console نمایش می‌دهد.

Firewall هتزنر چیست؟

تصاویر بعدی مربوط به Create Firewall هستند. Hetzner Cloud Firewall مشخص می‌کند چه Traffic ورودی اجازه رسیدن به Server را داشته باشد و Server اجازه ایجاد چه Connectionهای خروجی را داشته باشد.
به زبان ساده:
Inbound: چه کسی اجازه دارد به Server وصل شود؟
Outbound: Server اجازه دارد به کجا وصل شود؟

Inbound Rules چیست؟

در تصویر دوم بخش Inbound rules دیده می‌شود. Hetzner در Inbound فقط Trafficهایی را عبور می‌دهد که Rule اجازه داده باشد و سایر Connectionهای ورودی Drop می‌شوند. اگر هیچ Inbound Rule تعریف نشود، تمام Traffic ورودی Block خواهد شد.
در تصویر دو Rule وجود دارد:
TCP – Port 22
و:
ICMP

Rule مربوط به SSH Port 22

Rule اول روی:
Protocol: TCP
Port: 22
قرار دارد. Port 22 معمولاً برای SSH استفاده می‌شود.
در تصویر Source روی:
Any IPv4
و:
Any IPv6
قرار گرفته است.
یعنی هر IP اینترنتی می‌تواند تلاش کند به Port 22 Server متصل شود.
برای یک Server واقعی بهتر است اگر IP مدیریت ثابتی دارید، SSH را فقط برای IP خودتان باز کنید. مثلاً:
203.0.113.25/32
به این ترتیب Port 22 برای کل اینترنت باز نمی‌ماند.

Any IPv4 و Any IPv6 یعنی چه؟

Any IPv4 یعنی Rule برای تمام IPv4ها اعمال شود و Any IPv6 نیز تمام IPv6ها را شامل می‌شود.
اگر هدف شما Web Server عمومی باشد، استفاده از Any برای Portهای 80 و 443 طبیعی است چون کاربران مختلف باید بتوانند سایت را باز کنند؛ اما برای Port مدیریتی مثل SSH معمولاً محدود کردن Source انتخاب امن‌تری است.

ICMP چیست؟

Rule دوم تصویر روی ICMP قرار گرفته است. ICMP برای پیام‌های کنترلی شبکه و ابزارهایی مثل ping استفاده می‌شود.
اگر ICMP را از Any IPv4 و Any IPv6 Allow کنید، Server می‌تواند به درخواست‌های مرتبط ICMP پاسخ دهد.
باز بودن ICMP الزاماً به معنی باز کردن TCP Port نیست؛ ICMP یک Protocol جداگانه است.

یک Firewall ساده برای Web Server

برای یک Web Server معمولی می‌توانید ساختاری شبیه این داشته باشید:
TCP 22 → فقط IP مدیریت
TCP 80 → Any IPv4 / Any IPv6
TCP 443 → Any IPv4 / Any IPv6
ICMP → بر اساس نیاز
در این حالت سایت عمومی باقی می‌ماند ولی SSH فقط از IP مشخص شما قابل دسترسی است.

نکته مهم درباره Firewall هتزنر

Hetzner Cloud Firewall از نوع Stateful است. یعنی وضعیت Connectionها را دنبال می‌کند. اگر Server یک Connection مجاز به بیرون ایجاد کند، Traffic پاسخ آن Connection به‌صورت خودکار پذیرفته می‌شود و لازم نیست برای پاسخ یک Inbound Rule جدا بسازید.

Outbound Rules چیست؟

تصویر سوم مربوط به Outbound rules است. این بخش مشخص می‌کند Server اجازه دارد چه Trafficی را به بیرون ارسال کند.
رفتار Outbound با Inbound یک تفاوت مهم دارد: اگر هیچ Outbound Rule تعریف نکنید، تمام Traffic خروجی به‌صورت پیش‌فرض مجاز است. اما به‌محض اینکه یک یا چند Outbound Rule ایجاد کنید، Trafficهایی که با Rules مطابقت نداشته باشند Drop می‌شوند.

چرا Outbound Rule باید با احتیاط ساخته شود؟

فرض کنید فقط این Rule را بسازید:
TCP → Port 443
در این حالت ممکن است Server اجازه HTTPS داشته باشد اما Trafficهای دیگری که Rule ندارند Block شوند.
این موضوع می‌تواند باعث اختلال در DNS، Package Manager، APIها یا سرویس‌های دیگری شود که Server به آن‌ها نیاز دارد.
اگر دلیل مشخصی برای محدود کردن Outbound ندارید، در بسیاری از Serverهای معمولی می‌توانید Outbound Rules را خالی بگذارید تا رفتار پیش‌فرض Hetzner یعنی Allow All Outbound حفظ شود.

Port Range چیست؟

در هر Rule علاوه بر یک Port مشخص می‌توانید Port Range تعریف کنید.
مثلاً به‌جای یک Port:
8000
می‌توانید محدوده‌ای مثل:
8000-8100
را برای یک سرویس خاص در نظر بگیرید.
برای امنیت بهتر فقط Portهایی را باز کنید که واقعاً Application شما به آن‌ها نیاز دارد.

چه Protocolهایی در Hetzner Firewall پشتیبانی می‌شوند؟

Hetzner Cloud Firewall امکان Filter کردن Traffic مربوط به TCP، UDP، ICMP، ESP و GRE را دارد. GRE در Firewall فقط برای IPv4 پشتیبانی می‌شود.
برای اکثر Web Serverها مهم‌ترین موارد TCP و ICMP هستند.

بخش Apply to چیست؟

تصویر چهارم بخش Apply to را نشان می‌دهد. ساخت Firewall به‌تنهایی کافی نیست؛ باید مشخص کنید Firewall روی کدام Serverها اعمال شود.
دو گزینه موجود است:
Server
و:
Label
Hetzner اجازه می‌دهد Firewall را مستقیماً به Server مشخصی در همان Project متصل کنید یا از Label Selector استفاده کنید تا Firewall به‌صورت خودکار روی Serverهای دارای Label مشخص اعمال شود.

گزینه Server

اگر فقط یک یا چند Server مشخص دارید، گزینه Server ساده‌ترین انتخاب است.
مثلاً Firewall را مستقیماً روی:
web-01
web-02
اعمال می‌کنید.
بعداً نیز می‌توانید Serverها را از Firewall اضافه یا حذف کنید.

گزینه Label چه کاربردی دارد؟

Label برای پروژه‌هایی مناسب است که Serverهای بیشتری دارند.
فرض کنید همه Web Serverهای Production دارای Label زیر هستند:
role=web
می‌توانید Firewall را روی همین Label اعمال کنید. هر Server که با Label Selector مطابقت داشته باشد به‌صورت خودکار Firewall را دریافت می‌کند. اگر Labelهای Server تغییر کنند، تخصیص Firewall نیز متناسب با آن به‌روزرسانی می‌شود.
این روش برای Infrastructureهای خودکار بسیار کاربردی‌تر از انتخاب دستی Serverها است.

بخش Labels در Firewall

تصویر پنجم قسمت Labels خود Firewall را نشان می‌دهد. این Labels با Label Selector بخش Apply to اشتباه نشوند.
Labels این بخش برای دسته‌بندی و پیدا کردن خود Resource استفاده می‌شوند.
مثلاً:
env=production
role=firewall
project=wordpress
Hetzner Labelها را به شکل Key/Value در نظر می‌گیرد و Value می‌تواند اختیاری باشد. Key و Value حداکثر 63 کاراکتر دارند.

قسمت Name

در پایین تصویر نام Firewall برابر:
firewall-1
است.
این نام فقط برای شناسایی Firewall داخل Project استفاده می‌شود و در یک Project نمی‌توانید دو Firewall با نام کاملاً یکسان داشته باشید.
بهتر است به‌جای نام عمومی از نام‌های واضح‌تر استفاده کنید:
web-production
wordpress-firewall
database-private
ssh-restricted

یک مثال عملی برای Server وردپرس

فرض کنید یک WordPress Server دارید و فقط Web Traffic و SSH لازم دارید.
Firewall می‌تواند این‌طور باشد:
Inbound
TCP 22 → IP شخصی شما
TCP 80 → Any IPv4 / Any IPv6
TCP 443 → Any IPv4 / Any IPv6
ICMP → اختیاری
Outbound
خالی بماند تا Traffic خروجی طبق رفتار پیش‌فرض مجاز باشد.
Apply to
Server → wordpress-01
یا اگر چند Web Server دارید:
Label → role=web

Floating IP و Firewall چه ارتباطی با هم دارند؟

Floating IP یک Public IP قابل جابه‌جایی ایجاد می‌کند و Firewall مشخص می‌کند چه Trafficی اجازه رسیدن به Server را داشته باشد.
مثلاً در یک سناریوی Failover:
Floating IP → Server 1
و در صورت خرابی:
Floating IP → Server 2
اگر Serverهای شما Firewall دارند، Rules امنیتی باید طوری طراحی شوند که Server جایگزین نیز فقط Portهای موردنیاز را در اختیار اینترنت قرار دهد.

یک نکته مهم درباره Firewall و Private Network

Hetzner Cloud Firewall در حال حاضر برای Traffic شبکه خصوصی Hetzner Cloud اعمال نمی‌شود و تمرکز آن روی Traffic Public Network است. همچنین Firewall مستقیماً روی Hetzner Cloud Load Balancer قابل اعمال نیست.
اگر معماری شما شامل Private Network و Load Balancer است، امنیت Backend باید علاوه بر Cloud Firewall در سطح خود Server و طراحی شبکه نیز در نظر گرفته شود.

خلاصه تصاویر

تصویر اول: ساخت Floating IP، انتخاب Location و Protocol مثل IPv4.
تصویر دوم: تعریف Inbound Rules؛ در نمونه Port 22 برای SSH و ICMP باز شده‌اند.
تصویر سوم: Outbound Rules؛ با اضافه شدن Rule، Traffic خروجی خارج از Rules محدود می‌شود.
تصویر چهارم: انتخاب Server یا Label برای اعمال Firewall.
تصویر پنجم: اضافه کردن Labels و تعیین نام Firewall مثل firewall-1.

جمع‌بندی

Floating IP زمانی کاربرد دارد که به یک Public IP انعطاف‌پذیر نیاز دارید که بتوان آن را بین Serverها جابه‌جا کرد؛ برای مثال در سناریوی Failover. Floating IP فقط به یک Server در هر لحظه اختصاص داده می‌شود و Server باید Primary IP هم‌نوع و Network Zone سازگار داشته باشد.
Firewall نیز لایه کنترل Traffic سرور است. Inbound Rules مشخص می‌کنند چه Connectionهایی اجازه ورود داشته باشند و اگر Rule مناسبی وجود نداشته باشد Traffic ورودی Drop می‌شود. Outbound به‌صورت پیش‌فرض باز است، اما به‌محض تعریف Outbound Rule سایر Trafficهای تعریف‌نشده Block خواهند شد.
برای یک Web Server معمولی، باز کردن 80 و 443 برای کاربران و محدود کردن SSH Port 22 به IP مدیریتی، تنظیم بسیار منطقی‌تری از باز گذاشتن SSH برای تمام اینترنت است.