رفتن به محتوا

اجازهٔ دسترسی شبکه و فایروال

برای خواندن داده، باید مسیر شبکه از محیط سرویس اوبا به منبع شما برقرار باشد. هدف این راهنما باز کردن دسترسی عمومی نیست؛ می‌خواهید تنها مبدأ مجاز بتواند به پورت لازم برسد و سپس با حساب محدود وارد شود. این صفحه را به مسئول شبکه و پایگاه‌داده بدهید. اجرای دستورها را به مسئول مجاز بسپارید.

پیش از تغییر، نشانی مقصد، پورت واقعی، نوع منبع و قانون‌های فعلی را ثبت کنید و راه بازگشت به تنظیم قبلی را داشته باشید. در منابع ابری یا مسیر خصوصی، ممکن است کنترل اصلی در سرویس شبکهٔ دیگری باشد. دستورهای این صفحه نمونه‌اند و باید با محیط واقعی تطبیق داده شوند؛ وارد کردن آن‌ها بدون جایگزینی مقادیر یا شناخت مسیر، اتصال قابل اتکایی ایجاد نمی‌کند.

برای اتصال، سرور پایگاه‌دادهٔ شما باید این سه شرط را داشته باشد:

  1. از اینترنت یا مسیر شبکه‌ای که برای اوبا تعیین کرده‌اید قابل دسترسی باشد.
  2. پورت پایگاه‌داده فقط برای IP سرور اوبا باز باشد، نه برای کل اینترنت.
  3. کاربر پایگاه‌داده فقط اجازهٔ خواندن داشته باشد.

IP نشانی مبدأ اتصال است که مسئول شبکه برای قانون مجاز استفاده می‌کند. مقدار فعلی را از بخش زیر بردارید و با اطلاعاتی که برای اتصال شما اعلام شده تطبیق دهید. این نشانی ممکن است تغییر کند؛ از تصویر یا یادداشت قدیمی به‌عنوان مرجع دائمی استفاده نکنید. اگر مبدأ تغییر کند، قوانین قبلی باید با هماهنگی مسئولان اصلاح شوند.

در این صفحه مقدار IP فعلی در دسترس نیست. پیش از باز کردن فایروال، IP خروجی موردنیاز اتصال را از تیم پشتیبانی بگیرید. از حدس‌زدن IP یا باز کردن پورت برای `0.0.0.0/0` خودداری کنید.

فهرست مجاز یا allowlist یعنی مجموعهٔ مبدأهایی که اجازهٔ ورود دارند. در قانون مربوط به اوبا، همان مبدأ اعلام‌شده را ثبت کنید. اگر چند مبدأ برای محیط شما معرفی شده‌اند، مسئول شبکه باید قانون هر کدام را بررسی کند. نبود مقدار در صفحه، مجوز حدس زدن نشانی یا باز کردن پورت برای تمام اینترنت نیست.

پایگاه‌داده پورت پیش‌فرض
PostgreSQL 5432
MySQL و MariaDB 3306
Microsoft SQL Server 1433
Oracle 1521

اگر پورت شما تغییر کرده است، همان پورت واقعی را در همهٔ دستورهای این صفحه جایگزین کنید. پورت مشخص می‌کند درخواست به کدام سرویس روی میزبان برسد. باز بودن یک پورت دیگر، سلامت مسیر پایگاه‌داده را ثابت نمی‌کند. نشانی میزبان و پورت فرم اتصال باید با مقصد و قوانین شبکه یکسان باشند.

در سرور پایگاه‌داده، به‌جای <OOBA_IP> مقدار بالا و به‌جای <PORT> پورت واقعی را بنویسید:

Terminal window
sudo ufw allow from <OOBA_IP> to any port <PORT> proto tcp
sudo ufw status numbered

اگر UFW هنوز فعال نیست، ابتدا قوانین لازم برای SSH را ثبت کنید تا دسترسی خودتان قطع نشود:

Terminal window
sudo ufw allow OpenSSH
sudo ufw enable

هرگز پورت پایگاه‌داده را بدون محدود کردن مبدأ باز نکنید؛ قانون sudo ufw allow <PORT>/tcp برای همهٔ IPها دسترسی ایجاد می‌کند.

RHEL، CentOS، Rocky و AlmaLinux با firewalld

Section titled “RHEL، CentOS، Rocky و AlmaLinux با firewalld”
Terminal window
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='<OOBA_IP>' port protocol='tcp' port='<PORT>' accept"
sudo firewall-cmd --reload
sudo firewall-cmd --list-rich-rules

برای IPv6، فقط اگر IP خروجی اوبا واقعاً IPv6 است قانون IPv6 جداگانه بنویسید.

PostgreSQL: تنظیم listen_addresses و pg_hba.conf

Section titled “PostgreSQL: تنظیم listen_addresses و pg_hba.conf”

مسیر فایل‌های PostgreSQL را با این دستور پیدا کنید:

Terminal window
sudo -u postgres psql -c "SHOW config_file; SHOW hba_file;"

در postgresql.conf آدرس و پورت را تنظیم کنید:

listen_addresses = '0.0.0.0'
port = 5432

در pg_hba.conf فقط IP اوبا را مجاز کنید. برای یک IP نسخهٔ ۴، CIDR معمولاً /32 است:

host <DATABASE> <OOBA_USER> <OOBA_IP>/32 scram-sha-256

بعد از بررسی فایل‌ها:

Terminal window
sudo systemctl reload postgresql
sudo -u postgres psql -c "SELECT pg_reload_conf();"

از trust یا قانون عمومی مانند 0.0.0.0/0 استفاده نکنید. قانون ورود PostgreSQL باید هم پایگاه‌داده، هم کاربر و هم مبدأ را محدود کند. ترتیب قوانین نیز مهم است؛ مسئول پایگاه‌داده بررسی کند قانون عمومی قبلی رفتار موردنظر را تغییر نداده باشد. اگر listen_addresses تغییر کرده، بارگذاری مجدد به‌تنهایی کافی نیست و راه‌اندازی مجدد سرویس لازم است؛ آن را در زمان مناسب انجام دهید. دستورهای بالا برای تغییراتی هستند که با بارگذاری مجدد اعمال می‌شوند.

در mysqld.cnf یا فایل تنظیمات معادل:

[mysqld]
bind-address = 0.0.0.0
port = 3306

سپس سرویس را راه‌اندازی مجدد کنید:

Terminal window
sudo systemctl restart mysql
# در MariaDB:
sudo systemctl restart mariadb

کاربر را به IP اوبا محدود کنید:

CREATE USER 'ooba_reader'@'<OOBA_IP>' IDENTIFIED BY '<STRONG_PASSWORD>';
GRANT SELECT, SHOW VIEW ON `<DATABASE>`.* TO 'ooba_reader'@'<OOBA_IP>';
FLUSH PRIVILEGES;

کاربری با host برابر % را استفاده نکنید؛ % یعنی هر مبدأ شبکه. محدودیت میزبان حساب و محدودیت فایروال مکمل یکدیگرند. پس از ساخت حساب، مجوزهای واقعی آن را بررسی کنید و مطمئن شوید مجوز مدیریتی دیگری از نقش یا تنظیم قبلی دریافت نکرده است. نمونهٔ بالا خواندن کل مقصد تعیین‌شده را مجاز می‌کند؛ اگر تنها چند جدول لازم دارید، مسئول داده باید محدوده را کوچک‌تر کند.

اگر پایگاه‌داده داخل Docker است، پورت را publish کنید و محدودسازی IP را در فایروال میزبان یا فایروال ابری انجام دهید:

services:
db:
ports:
- "5432:5432"

برای بررسی:

Terminal window
sudo ss -ltnp | grep ':5432'
docker compose ps

اگر از شبکهٔ خصوصی یا VPN استفاده می‌کنید، جزئیات مسیر را با پشتیبانی هماهنگ کنید. VPN مسیر ارتباطی خصوصی ایجاد می‌کند، اما وجود آن روی رایانهٔ کاربر به معنای دسترسی خودکار محیط اوبا نیست. انتشار پورت Docker نیز به‌تنهایی محدودسازی مبدأ نیست؛ مسئول شبکه باید اثر واقعی قواعد میزبان و سرویس ابری را روی پورت منتشرشده بررسی کند.

در AWS Security Group، Azure Network Security Group، Google Cloud VPC Firewall، DigitalOcean Cloud Firewall یا سرویس مشابه، یک قانون inbound بسازید:

فیلد مقدار
Protocol TCP
Port پورت واقعی پایگاه‌داده
Source <OOBA_IP>/32
Action Allow

قوانین عمومی 0.0.0.0/0 و ::/0 را برای پورت پایگاه‌داده حذف یا محدود کنید.

پس از اعمال تنظیمات، در اوبا به صفحهٔ افزودن اتصال بروید و «تست اتصال» را بزنید. برای بررسی موقت باز بودن پورت از سمت یک سرور مجاز:

Terminal window
nc -vz <DATABASE_HOST> <PORT>

باز بودن پورت به‌تنهایی صحت نام کاربری و مجوزها را ثابت نمی‌کند؛ هر دو را بررسی کنید. همچنین آزمون از یک رایانهٔ غیرمجاز، وضعیت مسیر اوبا را نشان نمی‌دهد. پس از موفقیت آزمون فنی، یک خواندن محدود از جدول لازم و سپس یک سؤال شناخته‌شده را کنترل کنید. پاسخ درست علاوه بر مسیر شبکه به تعریف معیار و پوشش داده وابسته است.

مثال بررسی یک مسیر مجاز

Section titled “مثال بررسی یک مسیر مجاز”

فرض کنید در شرکت فرضی شما PostgreSQL داخل میزبان ابری اجرا می‌شود. مسئول شبکه، IP فعلی اوبا و پورت واقعی منبع را ثبت می‌کند و در فایروال ابری و میزبان فقط همان مبدأ را مجاز می‌کند. مسئول پایگاه‌داده نیز حساب فقط‌خواندنی و قانون ورود همان مقصد را آماده می‌کند. سپس اتصال از داخل اوبا آزمایش می‌شود؛ موفقیت از داخل شبکهٔ شرکت جای این آزمایش را نمی‌گیرد.

اگر زمان انتظار تمام شد، مسیر، پورت و فعال بودن سرویس بررسی می‌شوند. اگر پیام ورود ناموفق بود، حساب و قانون ورود بررسی می‌شوند. اگر ورود موفق و خواندن ناموفق بود، مجوز جدول کنترل می‌شود. این ترتیب مانع تغییر بی‌دلیل همهٔ تنظیمات می‌شود. در پایان، مسئولان ثبت می‌کنند چه قانون‌هایی تغییر کرده‌اند تا هنگام تغییر IP یا قطع همکاری، محدودهٔ مربوط روشن باشد.

برای جلوگیری از دسترسی تازه، قانون مبدأ اوبا را از فایروال بردارید و حساب فقط‌خواندنی را در منبع غیرفعال یا مجوز آن را لغو کنید. اتصال داخل برنامه نیز باید مطابق تصمیم شرکت مدیریت شود. پیش از تغییر، وابستگی پرسش‌ها، داشبوردها و هشدارها را بررسی کنید. قطع شبکه، نتایج و خروجی‌های قبلاً ثبت‌شده را حذف نمی‌کند. اگر هدف حذف اطلاعات نگهداری‌شده است، موضوع را جداگانه با مسئول شرکت و پشتیبانی پیگیری کنید.