EQVPS
ډشبورډپیل وکړئ

په VPS کې پرانیستي پورټونه څنګه وګورو: څه اوري، انټرنیټ څه ویني او د Docker حیرانتیا

هر هغه پورټ وګورئ چې ستاسو سرور یې اوري، تر شا یې پروسه ومومئ، سرور له بهر داسې سکین کړئ لکه برید کوونکی چې یې کوي، او هغه څه وتړئ چې اړتیا ورته نه لرئ. په دې کې د Docker هغه پورټ هم شامل دی چې فایروال چالان وي بیا هم پرانیستی پاتې کېږي. هره شمېره په نوي Ubuntu 24.04 سرور کې اندازه شوې.

پرانیستی او هېر شوی پورټ سرور ته د ننوتلو کلاسیکه لاره ده: په عامه پته ډیټابېس، د ډیبګ ډشبورډ، یا کانټینر چې داسې پورټ یې خپور کړی چې هېڅوک یې نه غوښت. که دوه کمانډونه او یو لومه وپېژنئ، کتنه یوه دقیقه وخت نیسي. لاندې هر څه مو زموږ له امېج څخه په نوي Ubuntu 24.04 سرور کې ترسره کړل او له دویم ماشین څخه مو سکین کړ، نو پایلې به همغه وي چې تاسو یې په خپل سرور کې وینئ.

1. څه اوري

کمانډ ss دی. توري معنا لري: TCP، UDP، اورېدونکي ساکټونه، د پورټونو شمېرې او د پروسې نوم:

sudo ss -tulpn

په نوي سرور کې شپږ کرښې چاپوي:

Netid State  Local Address:Port  Process
udp   UNCONN    127.0.0.54:53    systemd-resolve
udp   UNCONN 127.0.0.53%lo:53    systemd-resolve
tcp   LISTEN    127.0.0.54:53    systemd-resolve
tcp   LISTEN 127.0.0.53%lo:53    systemd-resolve
tcp   LISTEN       0.0.0.0:22    sshd
tcp   LISTEN          [::]:22    sshd

مهم ستون Local Address دی. دا وايي چې څوک نښلېدای شي:

پتهڅوک ورته رسېږي
127.0.0.1:… یا 127.0.0.53یوازې په همدې سرور کې پروګرامونه
0.0.0.0:…هر څوک د IPv4 له لارې، که فایروال یې بند نه کړي
[::]:…هر څوک د IPv6 له لارې (معمولاً IPv4 هم)
10.0.0.5:… (ټاکلې پته)هر څوک چې هغې پتې ته ورسېږي

نو نوی سرور بهر ته یوازې یو شی ښکاره کوي: په 22 پورټ کې SSH، د IPv4 او IPv6 له لارې. په 127.0.0.53 کې DNS resolver خصوصي دی.

د یوازې هغه څه لیدلو لپاره چې انټرنیټ یې لیدای شي، د loopback پتې فلټر کړئ:

sudo ss -tlnp | awk 'NR>1 && $4 !~ /^(127\.|\[::1\])/ {print $4, $6}'

دا د هر نصب وروسته وچلوئ. موږ nginx، Docker او یو کوچنی Python اپ نصب کړ، او لړ له 2 کرښو 10 ته ورسېد، په دې کې په 0.0.0.0:8081 کې docker-proxy او په یوه تصادفي localhost پورټ کې د containerd ساکټ هم و.

2. کومې پروسې پورټ نیولی

کله چې یو پورټ نیول شوی وي او غواړئ پوه شئ چا نیولی:

sudo lsof -i :80 -P -n
sudo fuser 80/tcp
sudo ss -tlnp 'sport = :80'

تر ټولو اسانه لوستل lsof دی. د nginx لپاره یې د root په توګه یوه اصلي پروسه او د www-data په توګه یو worker وښود، دواړه په *:80 کې، د IPv4 او IPv6 لپاره. fuser یوازې PIDs چاپوي چې په سکریپټونو کې ګټور دی. که پورټ خلاصول غواړئ، د PID وژلو پر ځای خدمت ودروئ، کنه systemd به یې بیا پیل کړي: sudo systemctl stop nginx.

3. انټرنیټ څه ویني

ss د سرور لید ښيي. د انټرنیټ لید کېدای شي توپیر ولري، ځکه چې په منځ کې فایروال دی یا خدمت له 127.0.0.1 سره تړل شوی. د رښتیني انځور لیدلو لپاره سرور له بل ماشین څخه سکین کړئ، له خپل لپ‌ټاپ یا دویم سرور څخه. وسیله nmap ده (apt install nmap، یا د Windows او macOS لپاره د nmap.org نصبوونکی).

nmap your-server-ip
nmap -p- your-server-ip
nmap -p 22,80,443,3306 your-server-ip

لومړۍ بڼه 1,000 تر ټولو عام پورټونه ګوري، دویمه ټول 65,535 او درېیمه یو لړ. زموږ په نوي سرور کې، له هر فایروال مخکې:

Not shown: 999 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
Nmap done: 1 IP address (1 host up) scanned in 6.83 seconds

د ټولو 65,535 پورټونو بشپړ سکین 8.9 ثانیې ونیولې او همغه یو پورټ یې وموند. تړل شوي پورټونه سمدلاسه په reset ځواب ورکوي، له همدې امله یې سکین چټک دی.

درې حالتونه مهم دي:

  • open: یو پروګرام نښلول ومنل. دا ستاسو د برید سطحه ده.
  • closed: سرور ځواب ورکړ چې هلته هېڅ نه اوري. خوندي دی، خو تاییدوي چې سرور شته او څه نه چلوي.
  • filtered: هېڅ ځواب نشته. فایروال پاکټ وغورځاوه. سکینر نه شي پوهېدای چې تر شا یې خدمت شته که نه.

د یو پورټ لپاره پرته له دې چې څه نصب کړئ، nc -zv د-سرور-ip 443 ځواب succeeded یا refused ورکوي، او په فلټر شوي پورټ کې تر وخت پای پورې انتظار باسي. د UDP لپاره nmap ته -sU ورزیات کړئ او انتظار ته چمتو اوسئ؛ زموږ په سرور کې درې عام UDP پورټونه، 53، 123 او 161، ټول closed وو.

د NAT پلانونو لپاره یادونه: له انټرنیټ څخه یوازې هغه SSH پورټ رسېږي چې موږ تاسو ته لېږدولی. د ګډې پتې سکین زموږ څنډه ښيي، نه ستاسو سرور، او نور پورټونه د لاسرسي وړ نه دي که هر څه پرې اوري. په هغه پلان کې چې خپله IPv4 پته لري، هر پرانیستی پورټ تاسو پخپله اداره کوئ.

4. هغه څه وتړئ چې اړتیا ورته نه لرئ

درې لارې، له غوره څخه تر پراخې پورې.

له localhost سره یې وتړئ. که یو خدمت یوازې په سرور کې پروګرامونه کاروي، پرېږدئ چې په 127.0.0.1 کې واوري. موږ یو کوچنی وېب اپ په --bind 127.0.0.1 8080 پیل کړ: ss په 127.0.0.1:8080 کې وښود، او له بهر nmap راپور ورکړ 8080/tcp closed. د ډیټابېسونو لپاره دا سم ډیفالټ دی: Redis، MySQL او PostgreSQL په Ubuntu کې له پیل څخه localhost اوري، او د Redis او MySQL لپاره زموږ لارښودونه همداسې پرېږدي.

خدمت ودروئ. sudo systemctl disable --now نوم اورېدونکی د تل لپاره لرې کوي. په ss وګورئ چې ورک شوی.

فایروال چالان کړئ. لومړی SSH، بیا هغه څه چې وړاندې کوئ اجازه ورکړئ، بیا یې فعال کړئ:

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw enable
sudo ufw status verbose

له بهر سکین بشپړ بدل شو:

Not shown: 997 filtered tcp ports (no-response)
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
8081/tcp open  blackice-icecap
Nmap done: 1 IP address (1 host up) scanned in 10.18 seconds

هر هغه پورټ چې اجازه یې نه وه له closed څخه filtered ته واوښت، او د 65,535 پورټونو بشپړ سکین اوس د 8.9 پر ځای 110 ثانیې ونیولې. سکینر ته د هر پورټ لپاره ډېر وخت، ستاسو د سرور په اړه لږ معلومات. زموږ د UFW لارښود د کچې محدودیت، یو IP ته اجازه ورکول او IPv6 تشریح کوي.

خو درېیمې کرښې ته وګورئ.

5. د Docker حیرانتیا

پورټ 8081 د فایروال د چالانېدو سره او پرته له کوم قاعدې چې اجازه یې ورکړي پرانیستی پاتې شو. دا پورټ د هغه کانټینر دی چې موږ په docker run -p 8081:80 nginx:alpine پیل کړ. Docker د کرنل فایروال ته خپل قواعد ورزیاتوي او دا د ufw له قواعدو مخکې ارزول کېږي. هغه قاعده چې یې زموږ په سرور کې ولیکله:

-A DOCKER ! -i docker0 -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.2:80

8081 پورټ ته هر پاکټ مخکې له دې چې ufw خبره وکړي کانټینر ته لېږدول کېږي. هر هغه کانټینر چې -p یا د ports: ننوتنه ولري همدا کار کوي، او ss یې په صادقانه ډول په 0.0.0.0:8081 کې د docker-proxy په توګه ښيي.

حل دا دی چې یوازې په localhost کې خپور کړئ:

docker rm -f web
docker run -d --name web -p 127.0.0.1:8081:80 nginx:alpine

په Compose کې د ports: لاندې "127.0.0.1:8081:80" ولیکئ. له بدلون وروسته ss وښود 127.0.0.1:8081، د Docker قاعدې ته -d 127.0.0.1/32 ورزیات شو، او له بهر سکین راپور ورکړ 8081/tcp filtered. د عامه اړخ لپاره nginx د reverse proxy په توګه له HTTPS سره مخې ته کېږدئ، څو په سرور کې یوازې 22، 80 او 443 پورټونه پرانیستي وي.

د هر بدلون وروسته د کتنې لړ

  1. sudo ss -tulpn: آیا هره کرښه چې 0.0.0.0 یا [::] لري هغه څه دي چې تاسو یې پرانیستل غوښتل؟
  2. له لپ‌ټاپ څخه nmap د-سرور-ip: آیا پرانیستي پورټونه سره سمون لري؟
  3. په عامه پته ډیټابېس، کش یا د مدیریت پینل: نن یې 127.0.0.1 یا د فایروال شا ته ولېږدوئ.
  4. د Docker هره ports: ننوتنه: که عامه وېب پورټ نه وي، آیا په 127.0.0.1: پیلېږي؟
  5. SSH ټولو ته پرانیستی دی: fail2ban یا یوازې په کلي ننوتل ورزیات کړئ.

په Windows Server کې همدا کتنه Get-NetTCPConnection -State Listen ده، او قواعد په Windows Firewall کې دي. د $3 Nano څخه پیل هر Linux پلان یوه نسخه لري چې خپله IPv4 پته لري، او هلته هغه څه چې تاسو یې په ss کې وینئ ټوله نړۍ یې ویني، پرته له هغه چې ستاسو فایروال یې مخه نیسي.

پوښتنې

په نوي VPS کې کوم پورټونه پرانیستي دي؟

زموږ د Ubuntu 24.04 امېج کې یوازې یو: په 22 پورټ کې SSH. له دې پرته یوازې په 127.0.0.53 او 127.0.0.54 کې سیمه‌ییز DNS resolver اوري چې انټرنیټ ورته نه رسېږي. له بل ماشین څخه د ټولو 65,535 TCP پورټونو سکین سم یو پرانیستی پورټ وموند.

د closed او filtered پورټ ترمنځ څه توپیر دی؟

closed یعنې سرور ځواب ورکړ چې هلته هېڅ نه اوري، نو سکینر سمدلاسه پوهېږي. filtered یعنې هېڅ ځواب نشته؛ فایروال چې پاکټونه غورځوي همدا کار کوي. دواړه یرغلګر بهر ساتي، خو filtered دا هم پټوي چې کوم خدمتونه شته او زموږ په سرور کې بشپړ سکین شاوخوا دولس چنده ورو کوي.

ss یو پورټ ښيي چې nmap یې closed بولي، ولې؟

خدمت یوازې په 127.0.0.1، یعنې loopback پته، اوري. پخپله په سرور کې پروګرامونه نښلېدای شي، له بهر هېڅوک نه. په ss کې Local Address ستون ته وګورئ: 127.0.0.1:8080 خصوصي دی، 0.0.0.0:8080 یا [::]:8080 که فایروال اجازه ورکړي له انټرنیټ څخه د لاسرسي وړ دي.

ufw مې چالان کړ، د Docker پورټ مې ولې لا هم پرانیستی دی؟

Docker خپل د فایروال قواعد لیکي او دا د ufw له قواعدو مخکې کتل کېږي. هغه کانټینر چې په -p 8081:80 پیل شوی و، زموږ په سرور کې د ufw د چالانېدو سره او د 8081 لپاره له کوم قاعدې پرته له بهر څخه د لاسرسي وړ و. پر ځای یې په localhost کې خپور کړئ: -p 127.0.0.1:8081:80، او د عامه اړخ لپاره nginx یا Caddy مخې ته کېږدئ.

له خپل کمپیوټر څخه پورټ څنګه وګورم؟

د یو پورټ لپاره nc -zv د-سرور-ip 443 وچلوئ، یا nmap نصب کړئ او د تر ټولو عامو زرو پورټونو لپاره nmap د-سرور-ip وچلوئ. د NAT په پلان کې له انټرنیټ څخه یوازې ستاسو لېږدول شوی SSH پورټ ځواب ورکوي؛ پاتې ټول په قصدي ډول د لاسرسي وړ نه دي.

تبصرې

لا تبصرې نشته. لومړی اوسئ.

یوه تبصره پریږدئ

تبصرې د ښکاره کیدو مخکې اعتدال کیږي.