ابزار UFW یا به عبارتی «فایروال غیر پیچیده»، یک ابزار مدیریت قوانین فایل در Arch Linux، دبیان و اوبونتو محسوب میشود. این ابزار از طریق خط فرمان مورد استفاده قرار میگیرد و این درحالی است که رابط کاربری آن نیز در دسترس است. هدف از UFW سادهسازی تنظیمات فایروال برای کاربر است.
نکته:
در صورتی که از داکر استفاده میکنید، این ابزار به صورت پیشفرض، مستقیماً iptables را دستکاری میکند. هر گونه قانونی که شما در UFW مشخص کنید، در کانتینرهای داکر عمل نخواهد کرد.
قبل از شروع به کار
۱) حتماً ابتدا مراحل تنظیم عنوان هاست و ساعت سیستم سرور خود را کامل کنید.
۲) اقدامات لازم در جهت تأمین ایمنی سرور، از جمله ایجاد یک کاربر استاندارد، امنیت دسترسی SSH و حذف سرویسهای شبکه غیرضروری را انجام دهید.
در این آموزش تنها فرمانهای مربوط به توزیعهای لینوکس Arch Linux، دبیان و اوبونتو ارائه شدهاند. با این وجود، میتوانید از فرمانهای مرتبط در توزیعهای لینوکس دیگر، مراحل را دنبال کنید.
۳) سیستم خود را بروزرسانی کنید.
لینوکس Arch
sudo pacman -Syu
دبیان / اوبونتو
sudo apt-get update && sudo apt-get upgrade
نصب ابزار UFW
دبیان بخش سیستمی UFW را به صورت اتوماتیک راهاندازی میکند و همچنین آن را برای شروع کار در راهاندازی دوباره سیستم، تنظیم میکند. ولی این شرایط در Arch حکمفرما نیست. درنظر داشته باشید که منظور در اینجا، تنظیم قوانین فایروال توسط UFW نیست. فعالسازی UFW با system یا upstart تنها باعث میشود که این سرویس در شروع به کار سیستم، اجرا گردد.
قوانین موسوم به ruleset در UFW به صورت پیشفرض، خالی هستند و بنابراین، قانون خاصی را در فایروال اِعمال نمیکنند. در ادامه، نحوه انجام تغییرات در سری قوانین فایروال را با کمک این ابزار نشان میدهیم.
لینوکس Arch
نصب UFW
sudo pacman -S ufw
اجرا و فعالسازی بخش سیستمی UFW
sudo systemctl start ufw sudo systemctl enable ufw
دبیان / اوبونتو
نصب UFW
sudo apt-get install ufw
کاربرد ابزار UFW برای مدیریت قواعد فایروال
تنظیم قواعد پیشفرض
در بسیاری از سیستمها، تنها چند پورت برای ارتباطات ورودی موردنیاز هستند و سایر پورتها بسته میشوند. برای شروع کار با یک قاعده اساسی و آسان، میتوان از فرمان ufw default برای تنظیم واکنش نسبت به ارتباطات ورودی و خروجی استفاده کرد. برای لغو تمام ارتباطهای ورودی و مجوّز به تمام ارتباطهای خروجی داریم:
sudo ufw default allow outgoing sudo ufw default deny incoming
همچنین فرمان ufw default امکان استفاده از پارامتر reject را نیز فراهم میکند.
هشدار
تنظیم یک قاعده ممنوعیت یا reject میتواند موجب قفلشدن سرور شما شود؛ مگر اینکه قواعد مجوّز واضحی در کنار آن تعریف شود. حتماً دقت کنید که مجوّز لازم برای SSH و سایر سرویسهای حیاتی را تعریف کرده باشید.
اضافهکردن قواعد
قواعد را میتواند به دو شکل اضافه کرد؛ یکی با اشاره به شماره پورت و دیگری با استفاده از نام سرویس. به عنوان مثال، برای اجازهدادن به هر دو نوع ارتباط ورودی و خروجی در پورت شماره 22 برای SSH میتوانید فرمان زیر را اجرا کنید.
sudo ufw allow ssh
همچنین میتوانید فرمان زیر را نیز تایپ کنید.
sudo ufw allow 22
به همین ترتیب، برای ممانعت از ترافیک در یک پورت خاص مانند 111، تنها کافی است فرمان زیر را وارد کنید.
sudo ufw deny 111
برای تنظیم دقیقتر در قواعد فایروال، میتواند packetهای داده را بر اساس TCP یا UDP مجوّز بدهید. به عنوان مثال برای packet های TCP در پورت 80 داریم:
sudo ufw allow 80/tcp sudo ufw allow http/tcp
برای مجوّز به packet های UDP در پورت 1725:
sudo ufw allow 1725/udp
قواعد پیشرفته
در کنار مجوّز یا ممنوعیت بر اساس پورت، ابزار UFW میتواند امکان این کار را بر اساس آدرس IP، سابنت و یا ترکیبی از IP، سابنت و پورت برای شما فراهم کند.
برای مجوّز دادن به یک آدرس IP خاص داریم:
sudo ufw allow from 198.51.100.0
برای سابنت:
sudo ufw allow from 198.51.100.0/24
برای ترکیب آدرس IP و پورت
sudo ufw allow from 198.51.100.0 to any port 22 proto tcp
proto tcp را میتوانید بر حسب نیاز به proto udp تغییر دهید و همچنین در تمام موارد بالا، میتوانید allow را با deny جایگزین کنید.
حذف قواعد
برای حذف یک قاعده، قبل از عبارت بکارگیری آن، از گزینه delete استفاده کنید. به عنوان نمونه، اگر دیگر نمیخواهید ترافیک HTTP داشته باشید، فرمان زیر را اجرا کنید.
sudo ufw delete allow 80
همچنین در حذف قواعد میتوانید از نام سرویس نیز استفاده کنید.
ویرایش فایلهای تنظیمات ابزار UFW
با اینکه امکان اضافهکردن قواعد ساده از طریق خط فرمان وجود دارد، ولی ممکن است گاهی نیاز به اضافه یا حذف کردن برخی قواعد خاص یا پیشرفته داشته باشید. UFW قبل از اینکه قواعد را در ترمینال اجرا کند، یک فایل با نام before.rules راهاندازی میکند که اجازه استفاده از loopback، ping و DHCP را فراهم مینماید. برای تغییر در این قواعد باید فایل /etc/ufw/before.rules را ویرایش کنید. یک فایل before6.rules نیز در همین دایرکتوری برای IPv6 وجود دارد.
همچنین فایلهای after.rule و after6.rule برای اضافهکردن قواعد موردنیاز بعدی ابزار UFW در دسترس قرار دارند.
یک فایل تنظیمات اضافی نیز در آدرس /etc/default/ufw واقع شده است. در اینجا، میتوان IPv6 را غیرفعال کرد، قواعد پیشفرض را تنظیم نمود و همینطور UFW را برای مدیریت زنجیرههای داخلی فایروال انتخاب کرد.
وضعیت UFW
شما میتوانید در هر زمانی وضعیت ابزار UFW را با فرمان sudo ufw status بررسی کنید. در نتیجه، لیستی از تمام قواعد و همینطور، وضعیت خاموش و روش بودن UFW برای شما نمایش داده خواهد شد.
Status: active To Action From -- ------ ---- 22 ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
فعالسازی فایروال
پس از انتخاب قواعد موردنظر، ممکن است نتیجه فرمان ufw status با خروجی Status: inactive همراه باشد. برای فعالسازی ابزار UFW و اِعمال قوانین فایروال داریم:
sudo ufw enable
به همین ترتیب، برای غیرفعالکردن قوانین
sudo ufw disable
نکته: با غیرفعالسازی به این شیوه، هنوز هم سرویس UFW در شروع به کار سیستم اجرا و فعال خواهد شد.
ثبتوقایع یا Logging
میتوانید ثبتوقایع را با فرمان زیر فعال کنید.
sudo ufw logging on
سطوح مختلف ثبتوقایع را میتوان با قالب فرمان sudo ufw logging low|medium|high تنظیم کرد. low سطح پیشفرض خواهد بود.
یک ورودی ثبتوقایع عادی شامل موارد زیر خواهد بود و در آدرس /var/logs/ufw قرار خواهد گرفت.
Sep 16 15:08:14 <hostname> kernel: [UFW BLOCK] IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=123.45.67.89 DST=987.65.43.21 LEN=40 TOS=0x00 PREC=0x00 TTL=249 ID=8475 PROTO=TCP SPT=48247 DPT=22 WINDOW=1024 RES=0x00 SYN URGP=0
مقادیر اولیه، تاریخ، زمان و عنوان هاست سرور شما را در بر میگیرند. سایر مقادیر مهم به شرح زیر هستند.
[UFW BLOCK]: این جایی است که توضیح رخداد قرار میگیرد. به عنوان نمونه در اینجا، یک ارتباط بلوکه شده است.
IN: اگر این مقدار یک عدد داشته باشد، رخداد یک «ورودی» بوده است.
OUT: اگر این مقدار یک عدد داشته باشد، رخداد یک «خروجی» بوده است.
MAC: ترکیبی از آدرسهای مک منبع و مقصد
SRC: آدرس IP از packet منبع
DST: آدرس IP از packet مقصد
LEN: طول packet
TTL: طول عمر packet. اینکه چقدر طول میکشد که قبل از رسیدن به مقصد، این بسته بین روترها جابجا شود تا اینکه به انقضا برسد.
PROTO: پروتکل packet
SPT: پورت منبع بسته
DPT: پورت مقصد بسته
WINDOW: ابعاد packet قابلدریافت برای فرستنده
SYN URGP: نشاندهنده نیاز به فرآیند ارتباطی بین سرور و کلاینت موسوم به three-way handshake. عدد صفر به معنای عدمنیاز خواهد بود.