SSD Nodes Learn Hosting plans →
మార్గదర్శకాలు Matt Connorద్వారా Matt Connor · అప్‌డేట్ చేయబడింది 2026-09-04

Rocky Linux లో SSH పోర్ట్‌ను మార్చడం ఎలా?

Rocky Linux లేదా AlmaLinux లో SSH పోర్ట్ మార్చేటప్పుడు firewalld, SELinux మరియు sshd_config సెట్టింగ్‌లను ఎలా కాన్ఫిగర్ చేయాలో తెలుసుకోండి. కనెక్షన్ కట్ అవ్వకుండా ఈ దశలను అనుసరించండి.

SSH పోర్ట్‌ను మార్చడానికి ఇక్కడ మూడు దశలు ఎందుకు అవసరం

Rocky Linux, AlmaLinux, CentOS Stream లేదా Fedora లలో SSH పోర్ట్‌ను మార్చడానికి కేవలం ఒక సవరణ సరిపోదు. కొత్త పోర్ట్‌పై కనెక్షన్ పనిచేస్తుందో లేదో నిర్ణయించడంలో మూడు వేర్వేరు వ్యవస్థలు పాత్ర పోషిస్తాయి. ప్యాకెట్ మెషీన్‌కు చేరుతుందో లేదో firewalld నిర్ణయిస్తుంది. ఆ పోర్ట్ నంబర్‌ను బైండ్ చేయడానికి sshd అనుమతి ఉందో లేదో SELinux నిర్ణయిస్తుంది. sshd_config ఏ పోర్ట్ కోసం daemon అభ్యర్థిస్తుందో నిర్ణయిస్తుంది. SELinux దశను విస్మరిస్తే daemon ప్రారంభం కావడానికి నిరాకరిస్తుంది. firewalld దశను విస్మరిస్తే daemon ప్రారంభమై, వింటుంది (listen), కానీ ఎవరూ దానిని చేరుకోలేరు.

Ubuntu లో ఇదే పని ఒక సవరణ మరియు రీస్టార్ట్‌తో పూర్తవుతుంది, ఎందుకంటే Ubuntu SELinux కు బదులుగా AppArmor ను ఉపయోగిస్తుంది మరియు sshd ఏ పోర్ట్‌లను బైండ్ చేయవచ్చో పరిమితం చేసే ప్రొఫైల్‌ను కలిగి ఉండదు. అక్కడ ufw రన్ అవుతుంటే, మీరు ఒక రూల్‌ను జోడిస్తే సరిపోతుంది. తేడా అంతా ఇదే. RHEL ఫ్యామిలీ OSలు కొత్తగా ఇన్‌స్టాల్ చేసినప్పుడు firewalld రన్ అవుతూ, SELinux ఎన్‌ఫోర్సింగ్ మోడ్‌లో ఉంటాయి, ఈ రెండూ పోర్ట్ నంబర్ల విషయంలో కఠినంగా ఉంటాయి.

ఈ క్రమంలో పనిని పూర్తి చేయండి, తద్వారా మీ ప్రస్తుత సెషన్ ప్రతి దశలోనూ యాక్టివ్‌గా ఉంటుంది:

  1. firewalld లో కొత్త పోర్ట్‌ను తెరవండి, ప్రస్తుతానికి పోర్ట్ 22 ను అలాగే ఉంచండి.
  2. semanage ఉపయోగించి కొత్త పోర్ట్ కోసం SELinux లేబుల్‌ను జోడించండి.
  3. sshd కాన్ఫిగరేషన్‌లో పోర్ట్‌ను సెట్ చేయండి.
  4. sshd ను రీస్టార్ట్ చేయండి, ఆపై మొదటి టెర్మినల్‌ను మూసివేసే ముందు రెండవ టెర్మినల్ నుండి కొత్త పోర్ట్ ద్వారా లాగిన్ అవ్వండి.
మీరు ప్రారంభించే ముందు మీ ప్రొవైడర్ వెబ్ కన్సోల్ (VNC లేదా సీరియల్) ఎక్కడ ఉందో కనుగొని, దాని ద్వారా లాగిన్ అవ్వగలరో లేదో తనిఖీ చేయండి. మార్పు విఫలమైతే, తిరిగి సర్వర్‌లోకి ప్రవేశించడానికి ఆ కన్సోలే మీకు మార్గం. పోర్ట్ మార్పు అనేది వినియోగదారులు తాము ఇప్పుడే చెల్లించిన సర్వర్‌కు తామే లాక్ అయిపోవడానికి అత్యంత సాధారణ కారణాలలో ఒకటి.

ముందుగా, semanage ను ఇన్‌స్టాల్ చేయండి

semanage అనేది SELinux పాలసీ సెట్టింగ్‌లను సవరించే సాధనం, అయితే Rocky Linux లేదా AlmaLinux యొక్క కనీస (minimal) ఇన్‌స్టాలేషన్‌లో ఇది ఉండదు. ఇది policycoreutils-python-utils ప్యాకేజీలో ఉంటుంది.

sudo dnf install -y policycoreutils-python-utils

ఆ ప్యాకేజీని ఇన్‌స్టాల్ చేయకుండానే కమాండ్‌ను రన్ చేస్తే sudo: semanage: command not found అని వస్తుంది, ఆ సమయంలోనే చాలా మంది పాఠకులు SELinux ఇన్‌స్టాల్ కాలేదని భావించి ఈ దశను వదిలేస్తారు. SELinux ఇన్‌స్టాల్ అయి ఉంటుంది. కేవలం మేనేజ్‌మెంట్ సాధనం మాత్రమే లోపించింది. ఒకవేళ మీకు dnf సింటాక్స్ కొత్తగా అనిపిస్తే, dnf మరియు apt కమాండ్ల సమానార్థకాలు మీకు తెలిసిన వాటితో పోల్చుకోవడానికి సహాయపడతాయి.

ఒక పోర్ట్‌ను ఎంచుకుని, దానిని ఏదీ ఉపయోగించడం లేదని నిర్ధారించుకోండి

1024 నుంచి 65535 మధ్య ఏదైనా ఖాళీ TCP పోర్ట్ సరిపోతుంది. ఒక పోర్ట్‌ను ఖరారు చేసే ముందు ఈ రెండు తనిఖీలు చేయండి:

sudo ss -tlnp | grep -w 2222
sudo semanage port -l | grep -w 2222

మొదటి కమాండ్, ఆ పోర్ట్ నంబర్‌పై ఏదైనా ప్రాసెస్ ఇప్పటికే వింటుందో (listening) లేదో చూపిస్తుంది. రెండవ కమాండ్, SELinux పాలసీ ఆ పోర్ట్‌ను ఇప్పటికే వేరే ఏదైనా సర్వీస్ రకానికి కేటాయించిందో లేదో చూపిస్తుంది. పోర్ట్ ఖాళీగా ఉంటే, ఈ రెండు కమాండ్‌లు ఏ ఫలితాన్ని ఇవ్వవు. ఒకవేళ పాలసీ ఇప్పటికే ఆ పోర్ట్‌ను కేటాయించి ఉంటే, 2వ దశలోని semanage port -a కమాండ్ ValueError: Port tcp/2222 already defined ఎర్రర్‌తో విఫలమవుతుంది. అప్పుడు వేరే పోర్ట్ నంబర్‌ను ఎంచుకోవడమే పరిష్కారం.

ఈ గైడ్ అంతటా ఉదాహరణ కోసం 2222 పోర్ట్‌ను ఉపయోగిస్తున్నాము. అయితే, 22 తర్వాత స్కానర్లు ప్రయత్నించే మొదటి పోర్ట్ ఇదే కాబట్టి, నిజమైన సర్వర్‌పై అంత సులభంగా దొరకని పోర్ట్‌ను ఎంచుకోండి.

దశ 1: firewalld లో పోర్ట్‌ను తెరవడం

sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

--permanent కమాండ్ నియమాన్ని డిస్క్‌లోని జోన్ ఫైల్‌లో రాస్తుంది, కానీ నడుస్తున్న ఫైర్‌వాల్‌పై ఎటువంటి ప్రభావం చూపదు. --reload కమాండ్ డిస్క్‌లో ఉన్న కాన్ఫిగరేషన్‌ను నడుస్తున్న ఫైర్‌వాల్‌లోకి లోడ్ చేస్తుంది. రీలోడ్ చేయడాన్ని విస్మరిస్తే, ఆ నియమం ఉనికిలో ఉన్నప్పటికీ firewalld తదుపరిసారి రీస్టార్ట్ అయ్యే వరకు ఏ పని చేయదు; ఈ మొత్తం ప్రక్రియ ఎటువంటి కారణం లేకుండా విఫలమైనట్లు కనిపించడానికి ఇది అత్యంత సాధారణ కారణాలలో ఒకటి.

ప్రస్తుతానికి ssh సర్వీస్ ఎంట్రీని అలాగే వదిలేయండి. ఆ ఎంట్రీ పోర్ట్ 22ను తెరిచి ఉంచుతుంది, మరియు మీరు పరీక్షలు చేస్తున్నప్పుడు ఇది మీకు బ్యాకప్ లాగా పనిచేస్తుంది.

మీ ప్రొవైడర్ కంట్రోల్ ప్యానెల్‌ను కూడా తనిఖీ చేయండి. చాలా హోస్టింగ్ సంస్థలు ఆపరేటింగ్ సిస్టమ్‌కు వెలుపల, VPS ముందు నెట్‌వర్క్ ఫైర్‌వాల్‌ను నిర్వహిస్తాయి, కాబట్టి మీరు firewalld లో తెరిచిన పోర్ట్ కూడా అప్‌స్ట్రీమ్ స్థాయిలో బ్లాక్ చేయబడవచ్చు. VPS కోసం firewalld ప్రాథమిక మార్గదర్శిని ఈ మోడల్ మీకు కొత్త అయితే, జోన్‌లు మరియు రన్‌టైమ్ వర్సెస్ పర్మనెంట్ విభజన గురించి వివరిస్తుంది.

దశ 2: SELinux కోసం పోర్ట్‌ను లేబుల్ చేయడం

sudo semanage port -a -t ssh_port_t -p tcp 2222
sudo semanage port -l | grep ssh_port_t

-a కొత్త పోర్ట్ అసైన్‌మెంట్‌ను జోడిస్తుంది. -t ssh_port_t అనేది SSH పోర్ట్‌లు కలిగి ఉండే రకం. రెండవ కమాండ్ ప్రస్తుతం ssh_port_t పరిధిలోకి వచ్చే అన్నింటినీ జాబితా చేస్తుంది, తద్వారా మీరు డెమన్‌ను తాకడానికి ముందే మీ నంబర్ జోడించబడిందో లేదో నిర్ధారించుకోవచ్చు.

SELinux ఎందుకు పోర్ట్‌ను బ్లాక్ చేస్తుంది

SELinux (Security-Enhanced Linux) సిస్టమ్‌లోని ప్రతి ఆబ్జెక్ట్‌కు ఒక లేబుల్‌ను కేటాయిస్తుంది, TCP పోర్ట్ నంబర్లు కూడా ఇతర ఆబ్జెక్ట్‌ల వలె పరిగణించబడతాయి. SSH డెమోన్ sshd_t అనే డొమైన్‌లో పరిమితం చేయబడి నడుస్తుంది. పాలసీ ప్రకారం sshd_t అనేది ssh_port_t అని లేబుల్ చేయబడిన TCP పోర్ట్‌లకు మాత్రమే బైండ్ అవ్వగలదు, డిఫాల్ట్‌గా 22 అనే పోర్ట్‌కు మాత్రమే ఆ లేబుల్ ఉంటుంది. మీరు డెమోన్‌ను 2222 పోర్ట్‌కు బైండ్ చేయమని కోరినప్పుడు, కెర్నల్ ఆ లేబుల్‌ను తనిఖీ చేస్తుంది, ఆ నంబర్‌కు కేటాయించిన సాధారణ టైప్ పాలసీని కనుగొని, సాకెట్‌పై name_bind అనుమతిని నిరాకరిస్తుంది.

అందుకే ఈ వైఫల్యం ఫైర్‌వాల్ సమస్యలా అనిపించదు. లిజనింగ్ సాకెట్ ఏర్పడకముందే కెర్నల్ దీనిని తిరస్కరిస్తుంది, కాబట్టి sshd ఎర్రర్‌ను రిపోర్ట్ చేసి నిలిచిపోతుంది. ఫైర్‌వాల్ సమస్య దీనికి భిన్నంగా ఉంటుంది: అక్కడ డెమోన్ ఆరోగ్యంగా నడుస్తూ ఉంటుంది, కానీ వచ్చే ప్యాకెట్లు దారిలోనే తొలగించబడతాయి.

getenforce మీ సర్వర్ ఏ మోడ్‌లో ఉందో తెలియజేస్తుంది. Permissive లో ఉన్నప్పుడు, నిరాకరణలు రికార్డ్ చేయబడతాయి కానీ అమలు చేయబడవు, కాబట్టి పోర్ట్ మార్పు పని చేస్తున్నట్లు అనిపిస్తుంది, కానీ ఎవరైనా setenforce 1 రన్ చేసినప్పుడు లేదా సర్వర్ ఎన్‌ఫోర్సింగ్ మోడ్‌లోకి రీబూట్ అయినప్పుడు అది విఫలమవుతుంది. ఏది ఏమైనా పోర్ట్‌కు లేబుల్ వేయడం మంచిది. సర్వర్ కోసం SELinux ప్రాథమిక మార్గదర్శి మోడ్‌లు, కాంటెక్స్ట్‌లు మరియు బూలియన్ల గురించి వివరంగా వివరిస్తుంది. పోర్ట్‌లు మాత్రమే కాకుండా, ఇతర ఆబ్జెక్ట్‌ల విషయంలో కూడా ఇది సమస్యగా మారుతుంది; అదే పాలసీ ఒక కంటైనర్ మౌంట్ చేసిన హోస్ట్ డైరెక్టరీని చదవకుండా ఆపుతుంది, ఆ పాత్‌ను రీలేబుల్ చేసే వరకు ఇది కొనసాగుతుంది. అందుకే Rocky Linux లేదా AlmaLinux పై Docker ఇన్‌స్టాలేషన్ గైడ్‌లలో SELinux కి సంబంధించిన ఒక అడుగు ఉంటుంది, ఇది Ubuntu గైడ్‌లలో ఉండదు.

దశ 3: sshd కాన్ఫిగరేషన్‌లో పోర్ట్‌ను సెట్ చేయడం

Rocky Linux 9 మరియు 10, AlmaLinux 9 మరియు 10, అలాగే ప్రస్తుత Fedora వెర్షన్లలో, /etc/ssh/sshd_config ఒక include లైన్‌తో ప్రారంభమవుతుంది, కాబట్టి మీ మార్పుల కోసం ఒక drop-in ఫైల్‌ను ఉపయోగించడం సరైన పద్ధతి. దీనివల్ల ప్యాకేజీ అప్‌డేట్‌లు జరిగినప్పుడు మీ మార్పులు చెరిగిపోవు.

grep -n '^Include' /etc/ssh/sshd_config
echo 'Port 2222' | sudo tee /etc/ssh/sshd_config.d/10-port.conf
sudo sshd -t

ఒకవేళ grep లో Include లైన్ లేకపోతే (ఇది Rocky Linux 8 మరియు ఇతర పాత ఇమేజ్‌లలో కనిపిస్తుంది), అప్పుడు Port 2222 ను నేరుగా /etc/ssh/sshd_config లో చేర్చండి. sshd -t మొత్తం కాన్ఫిగరేషన్‌ను (drop-in ఫైళ్లతో సహా) పరిశీలించి, ఏవైనా syntax లోపాలు ఉంటే తెలియజేస్తుంది. మీరు restart చేసే ముందు అది చూపించే లోపాలను సరిచేయండి, ఎందుకంటే కాన్ఫిగరేషన్ సరిగ్గా లేకపోతే daemon మళ్ళీ ప్రారంభం కాదు.

Port ఒకటి కంటే ఎక్కువసార్లు కనిపించవచ్చు, మరియు sshd జాబితా చేయబడిన ప్రతి పోర్ట్ వద్ద వింటుంది (listens). మొదటి రోజున Port 22 ను Port 2222 తో పాటు ఉంచడం ఒక సురక్షితమైన పద్ధతి, అయితే తర్వాత దాన్ని తొలగించడం మర్చిపోవద్దు.

మీ sshd ఒక socket unit ద్వారా ప్రారంభించబడిందా?

కొన్ని ఇమేజ్‌లు SSHను నిరంతరం నడిచే సేవగా కాకుండా, systemd socket activation ద్వారా ప్రారంభిస్తాయి. అక్కడ అటువంటి అమరిక ఉన్నప్పుడు, listening socket బాధ్యత systemd తీసుకుని, కనెక్షన్‌లను sshdకి అందిస్తుంది. కాబట్టి sshd_config లోని Port లైన్ పూర్తిగా విస్మరించబడుతుంది. ఏదైనా రీస్టార్ట్ చేసే ముందు దీనిని తనిఖీ చేయండి:

systemctl is-enabled sshd.socket

enabled అని సమాధానం వస్తే, ఆ పోర్ట్ sshd_config లో కాకుండా socket unit లో సెట్ చేయబడిందని అర్థం:

sudo systemctl edit sshd.socket
[Socket]
ListenStream=
ListenStream=2222

ఇక్కడ ఖాళీ ListenStream= అవసరం. డ్రాప్-ఇన్ ఫైళ్ల ద్వారా విలువలు ఒకదానికొకటి కలుస్తాయి (accumulate అవుతాయి), కాబట్టి ముందుగా ఆ జాబితాను క్లియర్ చేయడానికి ఖాళీ అసైన్‌మెంట్ ఇవ్వకపోతే, ఆ socket 22 మరియు 2222 రెండింటిపై వింటుంది. దీనిని sudo systemctl daemon-reload తో వర్తింపజేసి, ఆపై sudo systemctl restart sshd.socket చేయండి. ఒకవేళ ఆ unit డిసేబుల్ చేయబడినా లేదా మీ సర్వర్‌లో లేకపోయినా, ఈ విభాగం మీకు వర్తించదు.

దశ 4: రీస్టార్ట్ చేసి, రెండవ టెర్మినల్ నుండి పరీక్షించండి

sudo systemctl restart sshd
systemctl status sshd
sudo ss -tlnp | grep sshd

ఈ టెర్మినల్‌ను అలాగే ఉంచండి. దీని నుండి లాగ్ అవుట్ అవ్వకండి. మీ సొంత మెషీన్‌లో రెండవ టెర్మినల్‌ను తెరిచి, కొత్త పోర్ట్ ద్వారా కనెక్ట్ అవ్వండి:

ssh -p 2222 youruser@203.0.113.10

రెండవ లాగిన్ విజయవంతమైన తర్వాత మాత్రమే మొదటి సెషన్‌ను మూసివేయండి. ఒకవేళ అది పని చేయకపోతే, మీరు చేసిన మార్పులను వెనక్కి తీసుకోవడానికి మీ వద్ద ఇంకా షెల్ అందుబాటులో ఉంటుంది. ఈ ఒక్క అలవాటు ఐదు నిమిషాల పనికి మరియు ప్రొవైడర్ కన్సోల్‌లో గంటల తరబడి గడపడానికి మధ్య ఉన్న వ్యత్యాసాన్ని చూపిస్తుంది.

Firewall drop లేదా SELinux denial? వీటిని ఎలా గుర్తించాలి

మీ ల్యాప్‌టాప్ నుండి చూసినప్పుడు ఈ రెండు వైఫల్యాలు దాదాపు ఒకేలా కనిపిస్తాయి. కానీ సర్వర్ వైపు నుండి చూస్తే, వీటి మధ్య చాలా తేడా ఉంటుంది.

  • systemctl status sshd కమాండ్ ద్వారా సేవ (unit) విఫలమైందని చూపిస్తే, ఆ daemon తన socket ను పొందలేదని అర్థం. ఇది configuration లోపం లేదా SELinux denial కావచ్చు.
  • ఒకవేళ సేవ active లో ఉండి, ss -tlnp కమాండ్ ద్వారా sshd కొత్త port కు bound అయిందని చూపిస్తే, daemon సరిగ్గానే పనిచేస్తోంది. సమస్య నెట్‌వర్క్ మార్గంలో ఉంది: అంటే firewalld, సర్వర్ ప్రొవైడర్ యొక్క ప్రత్యేక firewall, లేదా మీరు కనెక్ట్ అవ్వడానికి ప్రయత్నించిన address మరియు port లో సమస్య ఉండవచ్చు.

SELinux సమస్య అయితే, ఊహించడం కంటే audit record ను చదవండి:

sudo ausearch -m AVC -ts recent
sudo journalctl -u sshd -n 50 --no-pager

name_bind denial, tcp_socket క్లాస్‌పై జరిగినప్పుడు, అది comm="sshd" లోని ప్రాసెస్‌ను, src= లోని పోర్ట్ నంబర్‌ను, మరియు tcontext= లో ఆ పోర్ట్‌కు ఉన్న లేబుల్‌ను తెలియజేస్తుంది. ఆ చివరి ఫీల్డే అసలు సమాధానం. ssh_port_t కాకుండా మరేదైనా ఉంటే, మీరు ఉపయోగిస్తున్న పోర్ట్‌కు రెండవ దశ వర్తించలేదని అర్థం. సాధారణంగా ఇది పోర్ట్ నంబర్‌లో టైపింగ్ తప్పు లేదా తప్పుడు ప్రోటోకాల్ వాడటం వల్ల జరుగుతుంది. ఒకవేళ మీరు ఆ రికార్డును సులభంగా అర్థమయ్యే వాక్యంలా చూడాలనుకుంటే setroubleshoot-server ను ఇన్‌స్టాల్ చేసి, sealert ను ఉపయోగించండి.

కర్నల్ bind అవ్వడాన్ని తిరస్కరించినప్పుడు sshd స్వయంగా రాసే సందేశం ఇలా ఉంటుంది:

error: Bind to port 2222 on 0.0.0.0 failed: Permission denied.

1024 కంటే ఎక్కువ ఉన్న పోర్ట్‌పై Permission denied రావడం, అంటే bind అవ్వడానికి root అనుమతులు అవసరం లేని చోట, అది SELinux సమస్యకు సంకేతం. అదే లైన్‌లో Address already in use కనిపిస్తే అది వేరే లోపం: మరొక ప్రాసెస్ ఇప్పటికే ఆ పోర్ట్‌ను వాడుతోంది. క్లయింట్ వైపు నుండి, connection refused మరియు connection timed out మధ్య తేడా నెట్‌వర్క్ సమస్యలను వేరు చేయడానికి సహాయపడుతుంది. ఎందుకంటే connection refused అంటే మీ ప్యాకెట్ హోస్ట్‌కు చేరింది కానీ అక్కడ ఏ సేవ వినడం లేదు అని అర్థం, అదే connection timed out అంటే అసలు ఎటువంటి స్పందన రాలేదని అర్థం.

పోర్ట్ 22ను మూసివేసి మీ క్లయింట్లను అప్‌డేట్ చేయండి

కొత్త పోర్ట్ ద్వారా కొన్ని లాగిన్‌లు విజయవంతంగా జరిగిన తర్వాత, 22వ పోర్ట్‌ను తొలగించండి:

sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

పోర్ట్ 22పై ఉన్న SELinux లేబుల్‌ను అలాగే ఉంచండి. ఇది బేస్ పాలసీ నుండి వస్తుంది, మరియు ఫైర్‌వాల్ ప్యాకెట్లను అనుమతించడం ఆపివేసిన తర్వాత ఇది ఎటువంటి అదనపు యాక్సెస్‌ను ఇవ్వదు.

ఆ తర్వాత క్లయింట్లను సరిచేయండి, ఎందుకంటే డిఫాల్ట్ పోర్ట్‌ను ఉపయోగిస్తాయని భావించే ప్రతి టూల్‌కు ఇప్పుడు కొత్త పోర్ట్ గురించి తెలియజేయాలి. ప్రతిసారీ -p అని టైప్ చేసే బదులు, మీ సొంత మెషీన్‌లో ఒకసారి ~/.ssh/config లో ఇలా నమోదు చేయండి:

Host myvps
  HostName 203.0.113.10
  Port 2222
  User youruser

scp, sftp, rsync మరియు Ansible అన్నీ ఆ ఫైల్‌ను చదువుతాయి. బ్యాకప్ జాబ్‌లు, మానిటరింగ్ చెక్‌లు మరియు పోర్ట్ 22ను హార్డ్‌కోడ్ చేసిన cron స్క్రిప్ట్‌లు ఆ ఫైల్‌ను చదవవు, కాబట్టి ఈ మార్పు మీ గుర్తులో తాజాగా ఉన్నప్పుడే వాటిని వెతికి సరిచేయండి.

పోర్ట్ మార్చడం వల్ల కలిగే ప్రయోజనాలు మరియు పరిమితులు

ఇది లాగ్ ఫైళ్లలో అనవసరమైన సమాచారాన్ని తగ్గిస్తుంది. ఆటోమేటెడ్ స్కానర్లు నిరంతరం port 22 పై దాడులు చేస్తుంటాయి, పోర్ట్ మార్చడం ద్వారా ఆ లాగ్ ఎంట్రీలు తొలగిపోతాయి, దీనివల్ల నిజమైన ఈవెంట్లను గుర్తించడం సులభం అవుతుంది. ఇది ఒక భద్రతా నియంత్రణ (security control) కాదు. పూర్తి పోర్ట్ పరిధిని స్కాన్ చేసే ఏ స్కానర్ అయినా మీ daemon ను కనుగొని, దాని version banner ను చదవగలదు. పోర్ట్ మార్పును కేవలం నిర్వహణలో భాగంగా మాత్రమే చూడండి. అసలైన భద్రత కోసం password లాగిన్‌లను నిలిపివేసి, key-only authentication ను అమలు చేయండి. దీని గురించి VPS కోసం SSH హార్డెనింగ్ గైడ్ లో దశలవారీగా వివరించబడింది.

పైన పేర్కొన్నవన్నీ రెండు ప్రధాన RHEL రీబిల్డ్స్‌పై ఒకేలా పనిచేస్తాయి, ఎందుకంటే అవి ఒకే మూలాల (sources) నుండి నిర్మించబడ్డాయి. మీరు ఇంకా దేనిని ఎంచుకోవాలో నిర్ణయించుకోకపోతే Rocky Linux మరియు AlmaLinux ల పోలిక చూడండి. 2020లో CentOS తన పాత రూపాన్ని కోల్పోవడంతో, ఇప్పుడు రెండు దాదాపు ఒకేలా ఉండే రీబిల్డ్స్ అందుబాటులో ఉన్నాయి. దీనికి సంబంధించిన పూర్తి చరిత్ర Red Hat నుండి CentOS, Rocky మరియు AlmaLinux వరకు అనే కథనంలో ఉంది. ఏదైనా పాత గైడ్‌ను అనుసరించే ముందు, cat /etc/os-release ఉపయోగించి మీకు ఏ release ఇవ్వబడిందో తనిఖీ చేయండి. Rocky Linux 8 కోసం రాసిన గైడ్‌లు ఇప్పటికీ సెర్చ్ ఫలితాల్లో ముందుంటాయి మరియు వాటిలోని semanage మరియు firewall-cmd దశలు సరైనవే, కానీ Rocky 8 లో sshd_config.d include లైన్ ఉండదు మరియు socket unit గురించి ఆలోచించాల్సిన అవసరం ఉండదు. కాబట్టి, ఆ గైడ్‌లలోని sshd కి సంబంధించిన అంశాలు ప్రస్తుత సిస్టమ్‌లతో సరిపోలవు.

fail2ban కు కొత్త port గురించి తెలియజేయాలి

fail2ban బేస్ రిపోజిటరీలలో అందుబాటులో ఉండదు. ఇది EPEL (extra packages for enterprise Linux) నుంచి వస్తుంది:

sudo dnf install -y epel-release
sudo dnf install -y fail2ban fail2ban-firewalld

fail2ban-firewalld సబ్-ప్యాకేజీ fail2ban తన bans ను firewalld ద్వారా రాసేలా చేస్తుంది, firewalld రూల్స్‌ను నియంత్రించే సర్వర్‌లో మీకు ఇదే అవసరం.

స్టాక్ sshd జైల్ port = ssh ను సెట్ చేస్తుంది, మరియు ఆ పేరు /etc/services ద్వారా 22 కి రిజాల్వ్ అవుతుంది. మీరు మార్పు చేసిన తర్వాత, ఆ జైల్ ఎవరూ దాడి చేయని port ను గమనిస్తుంది, కాబట్టి 2222 పై విఫలమైన లాగిన్ ప్రయత్నాలు పెరుగుతున్నా అది ఎవరినీ ban చేయదు. /etc/fail2ban/jail.local లో port ను నంబర్ ద్వారా సెట్ చేయండి:

[sshd]
enabled = true
port = 2222
backend = systemd
maxretry = 5
bantime = 3600

backend = systemd అనేది /var/log/secure నుంచి కాకుండా journal నుంచి వైఫల్యాలను చదువుతుంది, rsyslog అందుబాటులో లేని minimal ఇన్‌స్టాలేషన్‌లో ఇదే సురక్షితమైన ఎంపిక. దీన్ని sudo systemctl enable --now fail2ban తో ప్రారంభించండి మరియు sudo fail2ban-client status sshd తో జైల్ స్థితిని పరిశీలించండి. జైల్ సింటాక్స్ Ubuntu 24.04 లో SSH కోసం fail2ban సెటప్ లో ఉపయోగించిన దానిలాగే ఉంటుంది. ప్యాకేజీ మూలం మరియు ban చర్య మాత్రమే మారుతాయి.

పోర్ట్ మార్చడం కంటే ప్యాచింగ్ ముఖ్యం

SSH పోర్ట్‌ను మార్చి, నాలుగు నెలలుగా సెక్యూరిటీ అప్‌డేట్‌లు చేయని సర్వర్, పోర్ట్ 22పై ఉండి ప్రతిరోజూ రాత్రి ఆటోమేటిక్‌గా ప్యాచింగ్ చేసుకునే సర్వర్ కంటే ప్రమాదకరమైన స్థితిలో ఉంటుంది. మీరు ఇప్పటికే root యూజర్‌గా ఉన్నప్పుడే, అదే సెషన్‌లో unattended updates ను ఆన్ చేయండి: Rocky Linux మరియు AlmaLinux లలో ఆటోమేటిక్ dnf అప్‌డేట్‌లు అనే గైడ్, టైమర్ సెట్టింగ్స్ మరియు అప్‌డేట్‌లను డౌన్‌లోడ్ చేయడం లేదా నేరుగా ఇన్‌స్టాల్ చేయడం వంటి ఎంపికల గురించి వివరిస్తుంది. ఒక అప్‌డేట్ ఇన్‌స్టాల్ అయినంత మాత్రాన పాత కోడ్‌తో నడుస్తున్న daemons ఆటోమేటిక్‌గా రీస్టార్ట్ అవ్వవు, కాబట్టి ఏ సేవలకు రీస్టార్ట్ లేదా రీబూట్ అవసరమో తనిఖీ చేయడం ముఖ్యం. ముఖ్యంగా openssh-server లేదా దానికి సంబంధించిన లైబ్రరీలు అప్‌డేట్ అయినప్పుడు ఈ తనిఖీ తప్పనిసరి.

FAQ

Rocky Linux లో port మార్చిన తర్వాత sshd ఎందుకు ప్రారంభం కాదు?

దాదాపు అన్ని సందర్భాల్లో SELinux port label లేకపోవడమే దీనికి కారణం. sshd అనేది sshd_t డొమైన్‌లో పరిమితంగా (confined) నడుస్తుంది, మరియు పాలసీ ప్రకారం ఇది కేవలం ssh_port_t అని లేబుల్ చేయబడిన పోర్టులకు మాత్రమే బైండ్ అవ్వగలదు, ఇది డిఫాల్ట్‌గా కేవలం 22వ పోర్ట్ మాత్రమే. కెర్నల్ ఈ బైండింగ్‌ను తిరస్కరిస్తుంది, కాబట్టి డెమన్ వినడానికి (listening) బదులుగా నిష్క్రమిస్తుంది, మరియు journalctl -u sshd లో error: Bind to port 2222 on 0.0.0.0 failed: Permission denied. వంటి లైన్ కనిపిస్తుంది. మీ పోర్ట్ నంబర్‌తో sudo semanage port -a -t ssh_port_t -p tcp 2222 కమాండ్‌ను రన్ చేసి, ఆపై సర్వీస్‌ను రీస్టార్ట్ చేయండి. ఒకవేళ semanage కనుగొనబడకపోతే, ముందుగా policycoreutils-python-utils ను ఇన్‌స్టాల్ చేయండి.

SELinux permissive మోడ్‌లో ఉన్నప్పుడు కూడా నాకు semanage అవసరమా?

అవును. Permissive మోడ్‌లో ఉన్నప్పుడు, నిరాకరణ (denial) రికార్డ్ చేయబడుతుంది కానీ బైండింగ్ అనుమతించబడుతుంది, కాబట్టి మార్పు విజయవంతమైనట్లు కనిపిస్తుంది. కానీ లేబుల్ మాత్రం అలాగే ఉండదు. ఎవరైనా setenforce 1 రన్ చేసినప్పుడు, లేదా /etc/selinux/config లో SELINUX=enforcing తో బాక్స్ బూట్ అయినప్పుడు, sshd ఆ పోర్ట్ మీద ప్రారంభం కావడం ఆగిపోతుంది. లేబుల్‌ను జోడించడం అనేది ఒకే కమాండ్ పని, ఇది వారాల తర్వాత ఎటువంటి స్పష్టమైన కారణం లేకుండా వచ్చే వైఫల్యాన్ని నివారిస్తుంది.

పోర్ట్ లేబుల్ చేయబడింది మరియు sshd నడుస్తోంది, మరి నా కనెక్షన్ ఎందుకు టైమ్ అవుట్ అవుతోంది?

డెమన్ నడుస్తోందంటే SELinux కి ఎటువంటి అభ్యంతరం లేదని అర్థం, కాబట్టి ప్యాకెట్ వచ్చే దారిలోనే డ్రాప్ అవుతోంది. మీ పోర్ట్ కోసం sudo firewall-cmd --list-ports ని తనిఖీ చేయండి, మరియు --permanent రూల్ తర్వాత మీరు firewall-cmd --reload రన్ చేశారో లేదో నిర్ధారించుకోండి, ఎందుకంటే పర్మనెంట్ రూల్ మాత్రమే రన్ అవుతున్న ఫైర్‌వాల్‌కు వర్తించదు. ఆ తర్వాత VPS ముందు ఉన్న నెట్‌వర్క్ ఫైర్‌వాల్ కోసం మీ హోస్ట్ కంట్రోల్ ప్యానెల్‌ను తనిఖీ చేయండి. చాలామంది ఇక్కడే బ్లాక్ అవుతారు, ఆపరేటింగ్ సిస్టమ్ లోపల ఏదీ దీనిని చూపించదు.

22వ పోర్ట్‌కు బదులుగా నేను ఏ పోర్ట్ ఉపయోగించాలి?

1024 నుండి 65535 మధ్య ఉన్న ఏదైనా ఖాళీ TCP పోర్ట్. నిజమైన సర్వర్‌పై 2222 మరియు 22222 లను వాడకండి, ఎందుకంటే స్కానర్లు 22 తర్వాత వీటినే ప్రయత్నిస్తాయి. ఆ నంబర్ ఖాళీగా ఉందని sudo ss -tlnp తో నిర్ధారించుకోండి, SELinux పాలసీ ఇప్పటికే దానిని కేటాయించలేదని sudo semanage port -l తో తనిఖీ చేయండి, మరియు భవిష్యత్తులో మీరు ఇన్‌స్టాల్ చేసే సర్వీసులకు కేటాయించిన పోర్టులను వదిలేయండి. గుర్తుంచుకోవడానికి కష్టంగా ఉండే పెద్ద నంబర్ వాడటం మంచిది, ఎందుకంటే మీరు దానిని ఒక్కసారి ~/.ssh/config లో రాస్తే సరిపోతుంది, మళ్ళీ ఎప్పుడూ టైప్ చేయాల్సిన అవసరం ఉండదు.