مقدمه
UFW یا Uncomplicated Firewall، رابطی برای iptables است که برای سادهسازی فرآیند پیکربندی فایروال طراحی شده است. اگرچه iptables ابزاری قوی و انعطافپذیر است، اما یادگیری نحوهی استفاده از آن برای پیکربندی صحیح فایروال میتواند برای مبتدیان دشوار باشد. اگر به دنبال شروع ایمنسازی شبکهی خود هستید و مطمئن نیستید از کدام ابزار استفاده کنید، UFW ممکن است انتخاب مناسبی برای شما باشد.
پیشنیازها
اگر از نسخه اوبونتو ۱۶.۰۴ یا پایینتر استفاده میکنید، توصیه میکنیم به نسخه جدیدتری ارتقا دهید زیرا اوبونتو دیگر از این نسخهها پشتیبانی نمیکند. این مجموعه راهنما به شما در ارتقاء نسخه اوبونتو کمک خواهد کرد.
مرحله ۱ — اطمینان از فعال بودن IPv6
در نسخههای اخیر اوبونتو، IPv6 به طور پیشفرض فعال است. در عمل، این بدان معناست که بیشتر قوانین فایروال اضافه شده به سرور شامل هر دو نسخه IPv4 و IPv6 خواهند بود که نسخه دوم با v6 در خروجی دستور status UFW مشخص میشود. برای اطمینان از فعال بودن IPv6، میتوانید فایل پیکربندی UFW خود را در /etc/default/ufw بررسی کنید. این فایل را با استفاده از nano یا ویرایشگر خط فرمان مورد علاقه خود باز کنید:
sudo nano /etc/default/ufw
سپس مطمئن شوید که مقدار IPV6 روی بله تنظیم شده است. باید چیزی شبیه به این باشد:
IPV6=yes
فایل را ذخیره کرده و ببندید. اگر از nano استفاده میکنید، میتوانید این کار را با تایپ CTRL+X، سپس Y و ENTER برای تأیید انجام دهید.
هنگامی که UFW در مرحله بعدی این راهنما فعال شود، طوری پیکربندی میشود که هم قوانین فایروال IPv4 و هم IPv6 را بنویسد.
مرحله ۲ — تنظیم سیاستهای پیشفرض
اگر تازه با UFW شروع به کار کردهاید، اولین قدم خوب بررسی سیاستهای پیشفرض فایروال شماست. این قوانین نحوه مدیریت ترافیکی را که به صراحت با هیچ قانون دیگری مطابقت ندارد، کنترل میکنند.
به طور پیشفرض، UFW طوری تنظیم شده است که تمام اتصالات ورودی را رد کند و تمام اتصالات خروجی را مجاز بداند. این بدان معناست که هر کسی که سعی در دسترسی به سرور شما داشته باشد، قادر به اتصال نخواهد بود، در حالی که هر برنامهای در داخل سرور میتواند به دنیای خارج دسترسی پیدا کند. قوانین اضافی برای اجازه دادن به سرویسها و پورتهای خاص به عنوان استثنائات این سیاست کلی گنجانده شده است.
برای اطمینان از اینکه میتوانید بقیه این آموزش را دنبال کنید، اکنون سیاستهای پیشفرض UFW خود را برای ترافیک ورودی و خروجی تنظیم خواهید کرد.
برای تنظیم سیاست ورودی پیشفرض UFW برای رد کردن، دستور زیر را اجرا کنید:
sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
برای تنظیم سیاست پیشفرض خروجی UFW به حالت مجاز، دستور زیر را اجرا کنید:
این دستورات پیشفرضها را برای رد کردن اتصالات ورودی و اجازه دادن به اتصالات خروجی تنظیم میکنند. این پیشفرضهای فایروال به تنهایی ممکن است برای یک کامپیوتر شخصی کافی باشد، اما سرورها معمولاً باید به درخواستهای ورودی از کاربران خارجی پاسخ دهند. در ادامه به این موضوع خواهیم پرداخت.
مرحله ۳ – اجازه دادن به اتصالات SSH
اگر اکنون فایروال UFW خود را فعال کنید، تمام اتصالات ورودی را رد میکند. این بدان معناست که اگر میخواهید سرور شما به این نوع درخواستها پاسخ دهد، باید قوانینی ایجاد کنید که صریحاً اتصالات ورودی مشروع – مثلاً اتصالات SSH یا HTTP – را مجاز بدانند. اگر از یک سرور ابری استفاده میکنید، احتمالاً میخواهید اتصالات SSH ورودی را مجاز کنید تا بتوانید به سرور خود متصل شده و آن را مدیریت کنید.
مجاز کردن پروفایل برنامه OpenSSH UFW
پس از نصب، اکثر برنامههایی که به اتصالات شبکه متکی هستند، یک پروفایل برنامه را در UFW ثبت میکنند که به کاربران امکان میدهد به سرعت دسترسی خارجی به یک سرویس را مجاز یا غیرمجاز کنند. میتوانید با استفاده از دستور زیر بررسی کنید که کدام پروفایلها در حال حاضر در UFW ثبت شدهاند:
sudo ufw app list
Output
Available applications:
OpenSSH
برای فعال کردن پروفایل برنامه OpenSSH، دستور زیر را اجرا کنید:
مجاز کردن SSH بر اساس نام سرویس
راه دیگر برای پیکربندی UFW برای اجازه دادن به اتصالات SSH ورودی، ارجاع به نام سرویس آن است:
فعال کردن SSH بر اساس شماره پورت
به عنوان یک روش جایگزین، میتوانید با مشخص کردن پورت به جای نام پروفایل برنامه یا سرویس، قانون معادل را بنویسید. برای مثال، این دستور مانند مثالهای قبلی عمل میکند:
sudo ufw allow 22
Output
Rule added
Rule added (v6)
اگر سرویس SSH خود را طوری پیکربندی کردهاید که از پورت دیگری استفاده کند، باید پورت مناسب را مشخص کنید. برای مثال، اگر سرور SSH شما روی پورت ۲۲۲۲ گوش میدهد، میتوانید از این دستور برای اجازه اتصال به آن پورت استفاده کنید:
sudo ufw allow 2222
Output
Rule added
Rule added (v6)
اکنون که فایروال شما برای اجازه دادن به اتصالات SSH ورودی پیکربندی شده است، میتوانید آن را فعال کنید.
مرحله ۴ — فعال کردن UFW
اکنون فایروال شما باید طوری پیکربندی شده باشد که امکان اتصال SSH را فراهم کند. برای تأیید اینکه کدام قوانین تاکنون اضافه شدهاند، حتی زمانی که فایروال هنوز غیرفعال است، میتوانید از دستور زیر استفاده کنید:
sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
پس از تأیید اینکه قانونی برای اجازه دادن به اتصالات SSH ورودی دارید، میتوانید فایروال را با دستور زیر فعال کنید:
sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
هشداری دریافت خواهید کرد که میگوید این دستور ممکن است اتصالات SSH موجود را مختل کند. شما قبلاً یک قانون فایروال تنظیم کردهاید که به اتصالات SSH اجازه میدهد، بنابراین ادامه کار مشکلی نخواهد داشت. با y به درخواست پاسخ دهید و ENTER را بزنید.
فایروال اکنون فعال است. دستور sudo ufw status verbose را اجرا کنید تا قوانین تنظیم شده را ببینید. بقیه این آموزش نحوه استفاده از UFW را با جزئیات بیشتر، مانند اجازه دادن یا رد کردن انواع مختلف اتصالات، پوشش میدهد.
مرحله ۵ — اجازه دادن به سایر اتصالات
در این مرحله، باید به تمام اتصالات دیگری که سرور شما نیاز به پاسخگویی به آنها دارد، اجازه دهید. اتصالاتی که باید اجازه دهید به نیازهای خاص شما بستگی دارد. شما از قبل میدانید که چگونه قوانینی بنویسید که اتصالات را بر اساس نمایه برنامه، نام سرویس یا پورت مجاز کنند. شما قبلاً این کار را برای SSH روی پورت ۲۲ انجام دادهاید. همچنین میتوانید این کار را برای موارد زیر انجام دهید:
- HTTP روی پورت ۸۰، که همان پورتی است که سرورهای وب رمزگذاری نشده از آن استفاده میکنند، با استفاده از sudo ufw allow http یا sudo ufw allow 80
- HTTPS روی پورت ۴۴۳، که همان پورتی است که سرورهای وب رمزگذاری شده از آن استفاده میکنند، با استفاده از sudo ufw allow https یا sudo ufw allow 443
- آپاچی با HTTP و HTTPS، با استفاده از sudo ufw allow ‘Apache Full’
- Nginx با HTTP و HTTPS، با استفاده از sudo ufw allow ‘Nginx Full’
فراموش نکنید که با استفاده از دستور sudo ufw app list بررسی کنید کدام پروفایلهای برنامه برای سرور شما در دسترس هستند.
جدا از مشخص کردن پورت یا نام سرویس شناختهشده، چندین روش دیگر برای مجاز کردن اتصالات وجود دارد. در ادامه به برخی از این روشها خواهیم پرداخت.
محدودههای خاص پورت
شما میتوانید محدوده پورتها را با UFW مشخص کنید. برخی از برنامهها به جای یک پورت، از چندین پورت استفاده میکنند.
به عنوان مثال، برای مجاز کردن اتصالات X11 که از پورتهای ۶۰۰۰-۶۰۰۷ استفاده میکنند، از این دستورات استفاده کنید:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
هنگام مشخص کردن محدوده پورتها با UFW، باید پروتکل (tcp یا udp) که قوانین باید روی آن اعمال شوند را مشخص کنید. ما قبلاً به این موضوع اشاره نکردهایم زیرا مشخص نکردن پروتکل به طور خودکار هر دو پروتکل را مجاز میکند، که در بیشتر موارد اشکالی ندارد.
آدرسهای IP خاص
هنگام کار با UFW، میتوانید آدرسهای IP را نیز در قوانین خود مشخص کنید. به عنوان مثال، اگر میخواهید اتصالات از یک آدرس IP خاص، مانند آدرس IP محل کار یا منزل 203.0.113.4 را مجاز کنید، باید از پارامتر from استفاده کنید و سپس آدرس IP مورد نظر خود را وارد کنید:
sudo ufw allow from 203.0.113.4
Output
Rule added
همچنین میتوانید با اضافه کردن به هر پورت و به دنبال آن شماره پورت، پورتی را که آدرس IP مجاز به اتصال به آن است، مشخص کنید. به عنوان مثال، اگر میخواهید به 203.0.113.4 اجازه اتصال به پورت 22 (SSH) را بدهید، از این دستور استفاده کنید:
sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added
Subnets
اگر میخواهید به یک زیرشبکه از آدرسهای IP اجازه دسترسی بدهید، میتوانید با استفاده از نمادگذاری CIDR برای مشخص کردن یک ماسک شبکه این کار را انجام دهید. به عنوان مثال، اگر میخواهید به همه آدرسهای IP از 203.0.113.1 تا 203.0.113.254 اجازه دسترسی بدهید، میتوانید از این دستور استفاده کنید:
sudo ufw allow from 203.0.113.0/24
Output
Rule added
به همین ترتیب، میتوانید پورت مقصدی را که زیرشبکه 203.0.113.0/24 مجاز به اتصال به آن است، مشخص کنید. باز هم، ما از پورت 22 (SSH) به عنوان مثال استفاده خواهیم کرد:
sudo ufw allow from 203.0.113.0/24 to any port 22
Output
Rule added
اتصال به یک رابط شبکه خاص
اگر میخواهید یک قانون فایروال ایجاد کنید که فقط برای یک رابط شبکه خاص اعمال شود، میتوانید این کار را با مشخص کردن «اجازه ورود به سیستم» و به دنبال آن نام رابط شبکه انجام دهید.
قبل از ادامه، میتوانید رابطهای شبکه خود را جستجو کنید. برای انجام این کار، از این دستور استفاده کنید:
ip addr
Output Excerpt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .
خروجی هایلایت شده نام رابطهای شبکه را نشان میدهد. آنها معمولاً چیزی شبیه به eth0 یا enp3s2 نامگذاری میشوند.
بنابراین، اگر سرور شما یک رابط شبکه عمومی به نام eth0 دارد، میتوانید با این دستور ترافیک HTTP (پورت ۸۰) را به آن اجازه دهید:
sudo ufw allow in on eth0 to any port 80
Output
Rule added
Rule added (v6)
انجام این کار به سرور شما اجازه میدهد درخواستهای HTTP را از اینترنت عمومی دریافت کند.
یا اگر میخواهید سرور پایگاه داده MySQL شما (پورت ۳۳۰۶) به عنوان مثال به اتصالات روی رابط شبکه خصوصی eth1 گوش دهد، میتوانید از این دستور استفاده کنید:
sudo ufw allow in on eth1 to any port 3306
Output
Rule added
Rule added (v6)
این به سرورهای دیگر در شبکه خصوصی شما اجازه میدهد تا به پایگاه داده MySQL شما متصل شوند.
مرحله ۶ – رد کردن اتصالات
اگر سیاست پیشفرض برای اتصالات ورودی را تغییر نداده باشید، UFW طوری پیکربندی شده است که همه اتصالات ورودی را رد کند. به طور کلی، این امر با ملزم کردن شما به ایجاد قوانینی که صریحاً اجازه عبور پورتها و آدرسهای IP خاص را میدهند، فرآیند ایجاد یک سیاست فایروال امن را ساده میکند.
با این حال، گاهی اوقات میخواهید اتصالات خاصی را بر اساس آدرس IP منبع یا زیرشبکه رد کنید، شاید به این دلیل که میدانید سرور شما از آنجا مورد حمله قرار میگیرد. همچنین، اگر میخواهید سیاست ورودی پیشفرض خود را به اجازه دادن تغییر دهید (که توصیه نمیشود)، باید برای هر سرویس یا آدرس IP که نمیخواهید به آنها اجازه اتصال بدهید، قوانین رد کردن ایجاد کنید.
برای نوشتن قوانین رد کردن، میتوانید از دستوراتی که قبلاً توضیح داده شده است استفاده کنید و allow را با deny جایگزین کنید.
به عنوان مثال، برای رد کردن اتصالات HTTP، میتوانید از این دستور استفاده کنید:
sudo ufw deny http
Output
Rule added (v6)
یا اگر میخواهید تمام اتصالات از 203.0.113.4 را رد کنید، میتوانید از این دستور استفاده کنید:
sudo ufw deny from 203.0.113.4
Output
Rule added
در برخی موارد، ممکن است بخواهید اتصالات خروجی از سرور را نیز مسدود کنید. برای جلوگیری از استفاده همه کاربران از پورتی روی سرور، مانند پورت ۲۵ برای ترافیک SMTP، میتوانید از deny out و به دنبال آن شماره پورت استفاده کنید:
sudo ufw deny out 25
Output
Rule added
Rule added (v6)
این کار تمام ترافیک خروجی SMTP روی سرور را مسدود میکند.
مرحله ۷ – حذف قوانین
دانستن نحوه حذف قوانین فایروال به همان اندازه دانستن نحوه ایجاد آنها مهم است. دو روش مختلف برای مشخص کردن اینکه کدام قوانین باید حذف شوند وجود دارد: از طریق شماره قانون یا از طریق نام قابل خواندن توسط انسان (شبیه به نحوه مشخص شدن قوانین هنگام ایجاد آنها).
حذف یک قانون UFW بر اساس شماره
برای حذف یک قانون UFW بر اساس شماره آن، ابتدا باید لیستی شمارهگذاری شده از تمام قوانین فایروال خود را بدست آورید. دستور UFW status گزینهای برای نمایش شمارهها در کنار هر قانون دارد، همانطور که در اینجا نشان داده شده است:
sudo ufw status numbered
Numbered Output:
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
اگر تصمیم دارید که قانون شماره ۲، قانونی که امکان اتصال پورت ۸۰ (HTTP) را فراهم میکند، حذف کنید، میتوانید آن را در دستور حذف UFW مانند این مشخص کنید:
sudo ufw delete 2
Output
Deleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
این کار از شما تأیید میخواهد و سپس قانون ۲ را که امکان اتصال HTTP را فراهم میکند، حذف کنید. توجه داشته باشید که اگر IPv6 را فعال کردهاید، باید قانون IPv6 مربوطه را نیز حذف کنید.
حذف یک قانون UFW بر اساس نام
به جای استفاده از شمارههای قانون، میتوانید به یک قانون با نام قابل خواندن توسط انسان نیز اشاره کنید، که بر اساس نوع قانون (معمولاً allow یا deny) و نام سرویس یا شماره پورتی که هدف این قانون بوده است، یا نام پروفایل برنامه در صورتی که استفاده شده باشد، تعیین میشود. به عنوان مثال، اگر میخواهید یک قانون allow را برای یک پروفایل برنامه به نام Apache Full که قبلاً فعال بوده است، حذف کنید، میتوانید از دستور زیر استفاده کنید:
sudo ufw delete allow "Apache Full"
Output
Rule deleted
Rule deleted (v6)
دستور delete برای قوانینی که با ارجاع به یک سرویس از طریق نام یا پورت آن ایجاد شدهاند، به همین روش عمل میکند. برای مثال، اگر قبلاً قانونی برای مجاز کردن اتصالات HTTP با sudo ufw allow http تنظیم کردهاید، میتوانید به این صورت قانون مذکور را حذف کنید:
sudo ufw delete allow http
Output
Rule deleted
Rule deleted (v6)
از آنجا که نام سرویسها هنگام تعیین قوانین با شماره پورتها قابل تعویض هستند، میتوانید به جای allow http، به همان قانون allow 80 نیز اشاره کنید:
sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)
از آنجا که نام سرویسها هنگام تعیین قوانین با شماره پورتها قابل تعویض هستند، میتوانید به جای allow http، به همان قانون allow 80 نیز اشاره کنید:
sudo ufw delete allow 80
Output
Rule deleted
Rule deleted (v6)
هنگام حذف قوانین UFW بر اساس نام، در صورت وجود، هر دو قانون IPv4 و IPv6 حذف میشوند.
مرحله ۸ — بررسی وضعیت و قوانین UFW
در هر زمانی، میتوانید وضعیت UFW را با این دستور بررسی کنید:
sudo ufw status verbose
اگر UFW غیرفعال باشد، که به طور پیشفرض غیرفعال است، چیزی شبیه به این خواهید دید:
Output
Status: inactive
اگر UFW فعال باشد، که اگر مرحله ۳ را دنبال کرده باشید، باید فعال باشد، خروجی میگوید که فعال است و هر قانونی که تنظیم شده باشد را فهرست میکند. به عنوان مثال، اگر فایروال طوری تنظیم شده باشد که اتصالات SSH (پورت ۲۲) را از هر جایی مجاز کند، خروجی ممکن است چیزی شبیه به این باشد:
Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
اگر میخواهید بررسی کنید که UFW چگونه فایروال را پیکربندی کرده است، از دستور status استفاده کنید.
مرحله ۹ – غیرفعال کردن یا تنظیم مجدد فایروال
اگر تصمیم دارید که از فایروال UFW استفاده نکنید، میتوانید آن را با این دستور غیرفعال کنید:
sudo ufw disable
Output
Firewall stopped and disabled on system startup
هر قانونی که با UFW ایجاد کردهاید دیگر فعال نخواهد بود. در صورت نیاز به فعال کردن آن بعداً، همیشه میتوانید sudo ufw enable را اجرا کنید.
اگر از قبل قوانین UFW را پیکربندی کردهاید اما تصمیم دارید دوباره شروع کنید، میتوانید از دستور reset استفاده کنید:
sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353'
Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353'
Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'
این کار UFW را غیرفعال میکند و هر قانونی را که قبلاً تعریف شده بود حذف میکند. این باید شروع تازهای با UFW به شما بدهد. به خاطر داشته باشید که اگر در هر زمانی سیاستهای پیشفرض را تغییر دهید، به تنظیمات اصلی خود تغییر نخواهند کرد.
نتیجهگیری
اکنون فایروال شما طوری پیکربندی شده است که (حداقل) اتصالات SSH را مجاز بداند. حتماً هرگونه اتصال ورودی دیگری را که سرور شما نیاز دارد، مجاز کنید، در حالی که هرگونه اتصال غیرضروری را محدود کنید تا سرور شما کاربردی و ایمن باشد.
برای کسب اطلاعات بیشتر در مورد پیکربندیهای رایج UFW، آموزش
ملزومات UFW: قوانین و دستورات رایج فایروال برای امنیت لینوکس
را بررسی کنید.