رفتن به محتوا

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

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

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

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

IP سرور اوبا در صفحهٔ «اتصال‌های پایگاه‌داده» داخل برنامه هم با این پیام نمایش داده می‌شود: «برای اتصال به پایگاه‌دادهٔ شما، باید IP سرور ما را در فهرست مجاز (whitelist) پایگاه‌داده یا فایروال خود اضافه کنید:». اگر آزمایش اتصال به دلیل مشکل شبکه شکست بخورد، همین IP در کادر «راهنمای رفع مشکل اتصال» هم تکرار می‌شود. همیشه مقدار فعلی را از برنامه یا این صفحه بردارید، نه از یادداشت‌های قدیمی.

در این صفحه مقدار IP فعلی در دسترس نیست. پیش از باز کردن فایروال، IP خروجی موردنیاز اتصال را از تیم پشتیبانی بگیرید. از حدس‌زدن IP یا باز کردن پورت برای `0.0.0.0/0` خودداری کنید.
پایگاه‌داده پورت پیش‌فرض
PostgreSQL 5432
MySQL و MariaDB 3306
Microsoft SQL Server 1433
Oracle 1521
IBM Db2 50000
ClickHouse (HTTP) 8123
MongoDB 27017
Redshift 5439
CockroachDB 26257
Elasticsearch و OpenSearch 9200
Cassandra و ScyllaDB 9042

اگر پورت شما تغییر کرده است، همان پورت واقعی را در دستورهای این صفحه و در فیلد «درگاه» فرم اتصال وارد کنید.

در سرور پایگاه‌داده، به‌جای <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 استفاده نکنید؛ قانون باید پایگاه‌داده، کاربر و مبدأ را با هم محدود کند. ترتیب قوانین pg_hba.conf مهم است: قانون عمومی‌تری که بالاتر نوشته شده، ممکن است قانون شما را بی‌اثر کند. تغییر 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

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

در 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 را برای پورت پایگاه‌داده حذف یا محدود کنید.

  1. برای بررسی باز بودن پورت، از یک سرور مجاز این دستور را اجرا کنید:

    Terminal window
    nc -vz <DATABASE_HOST> <PORT>
  2. در اوبا، در فرم «افزودن اتصال» اطلاعات را وارد و «آزمایش اتصال» را بزنید. آزمون از رایانهٔ خودتان یا از داخل شبکهٔ شرکت، جای این آزمون را نمی‌گیرد؛ فقط آزمون داخل اوبا مسیر واقعی سرور اوبا را می‌سنجد.

  3. نتیجه را این‌طور بخوانید:

    • زمان انتظار تمام شد یا سرور پیدا نشد: مسیر شبکه، فایروال، پورت یا روشن بودن سرویس را بررسی کنید.
    • ورود ناموفق: نام کاربری، گذرواژه و قانون ورود (pg_hba.conf یا میزبان کاربر MySQL) را بررسی کنید.
    • ورود موفق ولی جدول‌ها خوانده نمی‌شوند: مجوز SELECT کاربر را بررسی کنید.

جزئیات بیشتر در رفع مشکل اتصال آمده است.

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