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:… (የተወሰነ አድራሻ)ያንን አድራሻ መድረስ የሚችል ማንም

ስለዚህ አዲሱ ሰርቨር ወደ ውጭ የሚያጋልጠው አንድ ነገር ብቻ ነው፦ SSH በፖርት 22፣ በIPv4 እና በIPv6። በ127.0.0.53 ላይ ያለው DNS ሪዞልቨር የግል ነው።

ኢንተርኔት ሊያየው የሚችለውን ብቻ ለመዘርዘር የ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 እና አንድ worker በwww-data አሳየ፣ ሁለቱም በ*:80 ላይ፣ ለIPv4 እና IPv6። fuser PIDዎችን ብቻ ያትማል፣ በስክሪፕቶች ውስጥ ጠቃሚ ነው። ፖርቱን ነጻ ማድረግ ካስፈለገ 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 ይመልሳል፣ በfiltered ፖርት ላይ ደግሞ ጊዜው እስኪያልቅ ይጠብቃል። ለ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 ውስጥ የሚያዩትን ዓለም ሁሉ ያያል፣ ፋየርዎልዎ ከሚያግደው በስተቀር።

FAQ

በአዲስ VPS ላይ የትኞቹ ፖርቶች ክፍት ናቸው?

በእኛ Ubuntu 24.04 ኢሜጅ ላይ አንድ ብቻ፦ SSH በፖርት 22። ከዚህ ሌላ የሚያዳምጠው በ127.0.0.53 እና 127.0.0.54 ላይ ያለው የአካባቢው DNS ሪዞልቨር ብቻ ነው፤ ኢንተርኔት ሊደርስበት አይችልም። ከሌላ ማሽን ሁሉንም 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 ፖርት ብቻ ነው፤ ሌላው ሁሉ ሆን ተብሎ አይደረስበትም።

አስተያየቶች

እስካሁን አስተያየቶች የሉም። መጀመሪያ ይሁኑ።

አስተያየት ይተዉ

አስተያየቶች ከመታየታቸው በፊት ይጣራሉ።