پرانیستی او هېر شوی پورټ سرور ته د ننوتلو کلاسیکه لاره ده: په عامه پته ډیټابېس، د ډیبګ ډشبورډ، یا کانټینر چې داسې پورټ یې خپور کړی چې هېڅوک یې نه غوښت. که دوه کمانډونه او یو لومه وپېژنئ، کتنه یوه دقیقه وخت نیسي. لاندې هر څه مو زموږ له امېج څخه په نوي 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 پورټونه پرانیستي وي.
د هر بدلون وروسته د کتنې لړ
sudo ss -tulpn: آیا هره کرښه چې0.0.0.0یا[::]لري هغه څه دي چې تاسو یې پرانیستل غوښتل؟- له لپټاپ څخه
nmap د-سرور-ip: آیا پرانیستي پورټونه سره سمون لري؟ - په عامه پته ډیټابېس، کش یا د مدیریت پینل: نن یې
127.0.0.1یا د فایروال شا ته ولېږدوئ. - د Docker هره
ports:ننوتنه: که عامه وېب پورټ نه وي، آیا په127.0.0.1:پیلېږي؟ - SSH ټولو ته پرانیستی دی: fail2ban یا یوازې په کلي ننوتل ورزیات کړئ.
په Windows Server کې همدا کتنه Get-NetTCPConnection -State Listen ده، او قواعد په Windows Firewall کې دي. د $3 Nano څخه پیل هر Linux پلان یوه نسخه لري چې خپله IPv4 پته لري، او هلته هغه څه چې تاسو یې په ss کې وینئ ټوله نړۍ یې ویني، پرته له هغه چې ستاسو فایروال یې مخه نیسي.
تبصرې
لا تبصرې نشته. لومړی اوسئ.