جدول محتوایی

آموزش IPtable Firewall – معرفی

در آموزش IPtable Firewall برای راه اندازی ما از دو سرور اوبونتو 22.04 استفاده خواهیم کرد. یکی دارای یک web server است که با Nginx ارائه می شود و دیگری پایگاه داده MySQL را برای برنامه میزبانی می کند. اگر چه ما از این تنظیمات به عنوان مثال استفاده خواهیم کرد، شما باید بتوانید تکنیک های مربوط به نیازهای سرور خود را پیدا کنید.

پیش نیازهای آموزش IPtable Firewall

برای شروع، باید دو سرور جدید اوبونتو 22.04 داشته باشید. یک حساب کاربری معمولی با سطح دسترسی sudo در هر کدام اضافه کنید. ما اینجا از یک وب سرور و یک پایگاه داده استفاده خواهیم کرد.

خرید هاست وردپرس

مرحله 1 – راه اندازی فایروال

با پیاده سازی یک پیکربندی فایروال پایه برای هر یک از سرورهای خود شروع خواهیم کرد. ما تقریباً همه چیز غیر از ترافیک SSH را میبندیم و سپس برای سرویس های خاص خود دسترسی هایی در فایروال ایجاد می کنیم.

iptables به طور خودکار بر روی اوبونتو 22.04 با استفاده از nftables نصب می شود، بنابراین نیازی به نصب هیچ بسته اضافی ندارید.

با استفاده از nano یا ویرایشگر متن مورد علاقه خود، فایل /etc/iptables/rules.v4 را باز کنید:

sudo nano /etc/iptables/rules.v4

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

*filter
# Allow all outgoing, but drop incoming and forwarding packets by default
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# Custom per-protocol chains
:UDP - [0:0]
:TCP - [0:0]
:ICMP - [0:0]

# Acceptable UDP traffic

# Acceptable TCP traffic
-A TCP -p tcp --dport 22 -j ACCEPT

# Acceptable ICMP traffic

# Boilerplate acceptance policy
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT

# Drop invalid packets
-A INPUT -m conntrack --ctstate INVALID -j DROP

# Pass traffic to protocol-specific chains
## Only allow new connections (established and related should already be handled)
## For TCP, additionally only allow new SYN packets since that is the only valid
## method for establishing a new TCP connection
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP

# Reject anything that's fallen through to this point
## Try to be protocol-specific w/ rejection message
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable

# Commit the changes
COMMIT

*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT

*security
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT

ذخیره کنید و فایل را ببندید. اگر از nano استفاده می کنید، Ctrl+X را برای خروج فشار دهید، سپس وقتی از شما خواسته شد، Y و سپس Enter را فشار دهید.

خرید سرور مجازی

مرحله 2 – پورت های مورد استفاده سرویس های خود را پیدا کنید

از ابزار netstat استفاده میکنیم از آنجایی که نود های شما فقط از طریق IPv4 ارتباط برقرار می کنند، آرگومان -4 را اضافه می کنیم، اما اگر از IPv6 نیز استفاده می کنید، می توانید آن را حذف کنید. آرگومان های دیگری که برای یافتن سرویس های در حال اجرا خود نیاز دارید عبارتند از -p، -l، -u، -n و -t که می توانید آنها را به صورت -plunt ارائه دهید.

این استدلال ها را می توان به صورت زیر تقسیم کرد:

p: نمایش PID و نام برنامه ای که هر سوکت به آن تعلق دارد.
l: فقط سوکت های در حال ارتباط را نشان دهید.
u: نمایش ترافیک UDP.
n: نمایش شماره پورت به جای نام سرویس.
t: نمایش ترافیک TCP

sudo netstat -4 plunt

در وب سرور شما، خروجی شما ممکن است به شکل زیر باشد:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1058/sshd
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4187/nginx

اولین ستون آدرس IP و پورتی را نشان می دهد که سرویس های نامبرده از آن استفاده میکنند. آدرس ویژه 0.0.0.0 به این معنی است که سرویس مورد نظر به تمام آدرس های موجود گوش می دهد.

در سرور پایگاه داده ، خروجی شما ممکن است به شکل زیر باشد:

sudo netstat -4 plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1097/sshd
tcp        0      0 192.0.2.30:3306     0.0.0.0:*               LISTEN      3112/mysqld

در این مثال، آدرس 192.0.2.30 نشان دهنده آدرس IP خصوصی سرور پایگاه داده است.

به مقادیری که در این مرحله می یابید توجه داشته باشید. اینها جزئیات شبکه ای هستند که برای تنظیم پیکربندی فایروال خود به آنها نیاز دارید.

در وب سرور خود، باید اطمینان حاصل کنید که پورت های زیر در دسترس هستند:

پورت 80 در تمام آدرس ها
پورت 22 در همه آدرس ها (از قبل در قوانین فایروال لحاظ شده است)
سرور پایگاه داده شما باید اطمینان حاصل کند که پورت های زیر در دسترس هستند:

پورت 3306 در آدرس 192.0.2.30 (یا رابط مرتبط با آن)
پورت 22 در همه آدرس ها (از قبل در قوانین فایروال لحاظ شده است)

مرحله 3 – قوانین Firewall وب سرور خود را تنظیم کنید

اکنون که اطلاعات پورت مورد نیاز خود را دارید، مجموعه قوانین فایروال وب سرور خود را تنظیم خواهید کرد. فایل قوانین را در ویرایشگر خود با دسترسی sudo باز کنید:

sudo nano /etc/iptables/rules.v4

در وب سرور، باید پورت 80 را به لیست ترافیک قابل قبول خود اضافه کنید. از آنجایی که سرور به همه آدرس‌های موجود گوش می‌دهد – سرورهای وب معمولاً انتظار دارند از هر جایی قابل دسترسی باشند.

بازدیدکنندگان وب سرور شما از پروتکل TCP برای اتصال استفاده خواهند کرد. می توانید پورت 80 را به آن اضافه کنید، درست زیر پورت SSH خود:

*filter
. . .

# Acceptable TCP traffic
-A TCP -p tcp --dport 22 -j ACCEPT
-A TCP -p tcp --dport 80 -j ACCEPT

. . .

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

پس از اتمام کار فایل را ذخیره کرده و ببندید. سرور وب شما اکنون دارای یک خط مشی فایروال است که به تمام ترافیک قانونی اجازه می دهد و در عین حال همه چیزهای دیگر را مسدود می کند.

فایل قوانین خود را تست کنید:

sudo iptables-restore -t < /etc/iptables/rules.v4

اگر هیچ خطای نمایش داده نشد، فایروال را دوباره راه اندازی کنید تا مجموعه قوانین جدید را اجرا کنید:

sudo service iptables-persistent reload

مرحله 4 – قوانین(rule) فایروال سرور پایگاه داده را تنظیم کنید

در سرور پایگاه داده خود، باید اجازه دسترسی به پورت 3306 در آدرس IP خصوصی سرور خود را بدهید. در این مورد، آن آدرس 192.0.2.30 بود. شما می توانید دسترسی به مقصد این آدرس را به طور خاص محدود کنید، یا می توانید با رابطی(interface) که به آن آدرس اختصاص داده شده است، دسترسی را محدود کنید.

برای پیدا کردن شماره ip های هر interface این دستور رو بزنید:

ip -4 addr show scope global
Output
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 203.0.113.5/24 brd 104.236.113.255 scope global eth0
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.0.2.30/24 brd 192.0.2.255 scope global eth1
       valid_lft forever preferred_lft forever

شماره آیپی های هر اینترفیس با رنگ زرد مشخص شدن

در مرحله بعد، قوانین فایروال را در سرور پایگاه داده تنظیم خواهید کرد. فایل قوانین را با دسترسی sudo در سرور پایگاه داده خود باز کنید:

sudo nano /etc/iptables/rules.v4

یک قانون به زنجیره TCP ما اضافه می کنید تا یک استثنا برای اتصال بین وب و سرورهای پایگاه داده شما ایجاد کند.

برای بستن دسترسی بر اساس آدرس valid مورد نظر، قانون(rule) را مانند زیر اضافه کنید:

*filter
. . .

# Acceptable TCP traffic
-A TCP -p tcp --dport 22 -j ACCEPT
-A TCP -p tcp --dport 3306 -d 192.0.2.30 -j ACCEPT

. . .

اگر ترجیح می‌دهید بر اساس اسم اینترفیس قانون یا rule را بنویسید:

*filter
. . .

# Acceptable TCP traffic
-A TCP -p tcp --dport 22 -j ACCEPT
-A TCP -p tcp --dport 3306 -i eth1 -j ACCEPT

. . .

پس از اتمام کار فایل را ذخیره کرده و ببندید.

در این پست آموزش IPtable Firewall را با شما به اشتراک گذاشتیم پیروز و سربلند باشید.

16رای - امتیاز 4.7 ممنون از امتیازی که دادید..!

دسته بندی شده در: