Linux սերվերի պաշտպանություն. Ինչ անել առաջինը

Linux սերվերի պաշտպանություն. Ինչ անել առաջինը
Habib M'henni/Wikimedia Commons, CC BY-SA

Մեր օրերում սերվերը հոսթինգում բարձրացնելը մի քանի րոպեի և մի քանի մկնիկի կտտոցների խնդիր է։ Բայց գործարկումից անմիջապես հետո նա հայտնվում է թշնամական միջավայրում, քանի որ նա բաց է ողջ համացանցի համար, ինչպես անմեղ աղջիկը ռոքեր դիսկոտեկում: Սկաներներն արագ կգտնեն այն և կհայտնաբերեն ավտոմատ կերպով գրված հազարավոր բոտեր, որոնք մաքրում են ցանցը՝ փնտրելով խոցելիություններ և սխալ կազմաձևումներ: Կան մի քանի բաներ, որոնք դուք պետք է անեք գործարկումից անմիջապես հետո՝ հիմնական պաշտպանությունն ապահովելու համար:

Պարունակություն

Ոչ արմատային օգտվող

Առաջին քայլը ձեզ համար ոչ արմատային օգտատեր ստեղծելն է: Բանն այն է, որ օգտատերը root բացարձակ արտոնություններ համակարգում, և եթե թույլ տաք նրան հեռավար կառավարում, ապա հաքերի աշխատանքի կեսը կկատարեք՝ նրա համար վավեր օգտանուն թողնելով։

Հետևաբար, դուք պետք է ստեղծեք մեկ այլ օգտվող և անջատեք հեռավոր կառավարումը SSH-ի միջոցով root-ի համար:

Նոր օգտվողը սկսվում է հրամանով useradd:

useradd [options] <username>

Այնուհետև հրամանով դրա համար գաղտնաբառ է ավելացվում passwd:

passwd <username>

Վերջապես, այս օգտվողը պետք է ավելացվի մի խմբի, որն իրավունք ունի կատարել բարձրացված հրամաններ sudo. Կախված Linux բաշխումից, դրանք կարող են լինել տարբեր խմբեր: Օրինակ, CentOS-ում և Red Hat-ում օգտատերը ավելացվում է խմբին wheel:

usermod -aG wheel <username>

Ubuntu-ում այն ​​ավելացվում է խմբին sudo:

usermod -aG sudo <username>

SSH գաղտնաբառերի փոխարեն ստեղներ

Կոպիտ ուժի կամ գաղտնաբառի արտահոսքը ստանդարտ հարձակման վեկտոր է, ուստի ավելի լավ է անջատել գաղտնաբառի նույնականացումը SSH-ում (Secure Shell) և փոխարենը օգտագործել բանալիների նույնականացում:

SSH արձանագրության ներդրման համար կան տարբեր ծրագրեր, ինչպիսիք են լշ и կաթիլ, բայց ամենահայտնին OpenSSH-ն է։ OpenSSH հաճախորդի տեղադրում Ubuntu-ում.

sudo apt install openssh-client

Սերվերի տեղադրում.

sudo apt install openssh-server

SSH daemon (sshd) գործարկում Ubuntu սերվերի վրա.

sudo systemctl start sshd

Ավտոմատ կերպով գործարկել deemon-ը յուրաքանչյուր բեռնախցիկի վրա.

sudo systemctl enable sshd

Հարկ է նշել, որ OpenSSH-ի սերվերային մասը ներառում է հաճախորդի մասը։ Այսինքն՝ միջոցով openssh-server դուք կարող եք միանալ այլ սերվերների: Ավելին, ձեր հաճախորդի մեքենայից դուք կարող եք սկսել SSH թունելը հեռավոր սերվերից դեպի երրորդ կողմի հոսթ, այնուհետև երրորդ կողմի հոսթը կդիտարկի հեռավոր սերվերը որպես հարցումների աղբյուր: Շատ հարմար հատկություն՝ ձեր համակարգը քողարկելու համար: Մանրամասների համար տե՛ս հոդվածը «Գործնական խորհուրդներ, օրինակներ և SSH թունելներ».

Հաճախորդի մեքենայի վրա, սովորաբար, անիմաստ է տեղադրել լիարժեք սերվեր, որպեսզի կանխվի համակարգչին հեռակա կապի հնարավորությունը (անվտանգության նկատառումներով):

Այսպիսով, ձեր նոր օգտատիրոջ համար նախ պետք է ստեղծեք SSH ստեղներ այն համակարգչում, որտեղից դուք մուտք կունենաք սերվեր.

ssh-keygen -t rsa

Հանրային բանալին պահվում է ֆայլում .pub և կարծես պատահական նիշերի շարան լինի, որը սկսվում է ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

Այնուհետև արմատի տակից ստեղծեք SSH գրացուցակ սերվերի վրա օգտվողի հիմնական գրացուցակում և ավելացրեք SSH հանրային բանալին ֆայլին: authorized_keys, օգտագործելով Vim-ի նման տեքստային խմբագրիչ.

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

Վերջապես, սահմանեք ճիշտ թույլտվությունները ֆայլի համար.

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

և փոխել սեփականության իրավունքն այս օգտատիրոջը՝

chown -R username:username /home/username/.ssh

Հաճախորդի կողմից դուք պետք է նշեք նույնականացման գաղտնի բանալի գտնվելու վայրը.

ssh-add DIR_PATH/keylocation

Այժմ դուք կարող եք մուտք գործել սերվեր օգտվողի անվան տակ՝ օգտագործելով այս բանալիը.

ssh [username]@hostname

Թույլտվությունից հետո դուք կարող եք օգտագործել scp հրամանը ֆայլերը, կոմունալը պատճենելու համար սշֆս ֆայլային համակարգ կամ գրացուցակներ հեռակա տեղադրելու համար:

Ցանկալի է ստեղծել մասնավոր բանալու մի քանի կրկնօրինակներ, քանի որ եթե անջատեք գաղտնաբառի նույնականացումը և կորցնեք այն, ապա ընդհանրապես ձեր սեփական սերվեր մուտք գործելու հնարավորություն չեք ունենա:

Ինչպես նշվեց վերևում, SSH-ում դուք պետք է անջատեք նույնականացումը root-ի համար (սա է պատճառը, որ մենք սկսեցինք նոր օգտվող):

CentOS/Red Hat-ի վրա մենք գտնում ենք գիծը PermitRootLogin yes կազմաձևման ֆայլում /etc/ssh/sshd_config և փոխիր այն.

PermitRootLogin no

Ubuntu-ում ավելացրեք տողը PermitRootLogin no դեպի կազմաձևման ֆայլ 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Ստուգելուց հետո, որ նոր օգտվողը նույնականացնում է իր բանալիով, կարող եք անջատել գաղտնաբառի նույնականացումը՝ գաղտնաբառի արտահոսքի կամ կոպիտ ուժի վտանգը վերացնելու համար: Այժմ, սերվեր մուտք գործելու համար հարձակվողը պետք է ստանա անձնական բանալի:

CentOS/Red Hat-ի վրա մենք գտնում ենք գիծը PasswordAuthentication yes կազմաձևման ֆայլում /etc/ssh/sshd_config և փոխել այն այսպես.

PasswordAuthentication no

Ubuntu-ում ավելացրեք տողը PasswordAuthentication no ներկայացնել 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

SSH-ի միջոցով երկգործոն նույնականացումը միացնելու հրահանգների համար տե՛ս այստեղ.

Firewall

Firewall-ը ապահովում է, որ միայն այն նավահանգիստների երթևեկությունը, որոնք դուք ուղղակիորեն թույլ եք տալիս, կգնա սերվեր: Սա պաշտպանում է այլ ծառայությունների կողմից պատահաբար միացված նավահանգիստների շահագործումից, ինչը մեծապես նվազեցնում է հարձակման մակերեսը:

Նախքան firewall-ը տեղադրելը, դուք պետք է համոզվեք, որ SSH-ը ներառված է բացառությունների ցանկում և չի արգելափակվի: Հակառակ դեպքում, firewall-ը գործարկելուց հետո մենք չենք կարողանա միանալ սերվերին:

Ubuntu բաշխումը գալիս է Uncomplicated Firewall-ով (ufw), և CentOS/Red Hat-ով - firewalld.

SSH-ի թույլտվություն Ubuntu-ի firewall-ում.

sudo ufw allow ssh

CentOS/Red Hat-ի վրա օգտագործեք հրամանը firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Այս ընթացակարգից հետո կարող եք գործարկել firewall-ը:

CentOS/Red Hat-ում գործարկեք համակարգային ծառայությունը firewall-ի համար.

sudo systemctl start firewalld
sudo systemctl enable firewalld

Ubuntu-ում մենք օգտագործում ենք հետևյալ հրամանը.

sudo ufw enable

Fail2Ban

Ծառայություն Fail2Ban վերլուծում է սերվերի տեղեկամատյանները և հաշվում յուրաքանչյուր IP հասցեից մուտքի փորձերի քանակը: Պարամետրերը սահմանում են կանոններ, թե քանի մուտքի փորձ է թույլատրվում որոշակի ընդմիջումով, որից հետո այս IP հասցեն արգելափակվում է որոշակի ժամանակահատվածով: Օրինակ՝ թույլ տանք 5 ժամվա ընթացքում SSH նույնականացման 2 անհաջող փորձ, ապա արգելափակել տրված IP հասցեն 12 ժամով։

Fail2Ban-ի տեղադրում CentOS-ի և Red Hat-ի վրա.

sudo yum install fail2ban

Տեղադրում Ubuntu-ում և Debian-ում.

sudo apt install fail2ban

Գործարկել:

systemctl start fail2ban
systemctl enable fail2ban

Ծրագիրն ունի երկու կազմաձևման ֆայլ. /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Արգելքի սահմանափակումները նշված են երկրորդ ֆայլում:

SSH-ի համար կալանավայրը լռելյայն միացված է լռելյայն կարգավորումներով (5 փորձ, 10 րոպե ընդմիջում, 10 րոպե արգելք):

[ԼԱՆԿԱՅԻՆ] ignorecommand=bantime=10m findtime=10m maxretry=5

Բացի SSH-ից, Fail2Ban-ը կարող է պաշտպանել այլ ծառայություններ nginx կամ Apache վեբ սերվերի վրա:

Անվտանգության ավտոմատ թարմացումներ

Ինչպես գիտեք, բոլոր ծրագրերում մշտապես հայտնաբերվում են նոր խոցելիություններ։ Տեղեկատվության հրապարակումից հետո օգտատերերը ավելացվում են հանրաճանաչ Exploit փաթեթներին, որոնք զանգվածաբար օգտագործվում են հաքերների և դեռահասների կողմից բոլոր սերվերները անընդմեջ սկանավորելիս: Հետևաբար, շատ կարևոր է տեղադրել անվտանգության թարմացումները դրանց հայտնվելուն պես:

Ubuntu սերվերում անվտանգության ավտոմատ թարմացումները լռելյայն միացված են, ուստի հետագա գործողություն չի պահանջվում:

CentOS/Red Hat-ի վրա դուք պետք է տեղադրեք հավելվածը dnf-ավտոմատ և միացրեք ժամաչափը.

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

Ժամաչափի ստուգում.

sudo systemctl status dnf-automatic.timer

Նախնական պորտերի փոփոխություն

SSH-ը մշակվել է 1995 թվականին՝ փոխարինելու telnet-ը (պորտ 23) և ftp-ը (պորտ 21), ուստի ծրագրի հեղինակ Թաթու Իլտոնենը լռելյայն ընտրված նավահանգիստ 22-ը, և հաստատվել է IANA-ի կողմից:

Բնականաբար, բոլոր հարձակվողները տեղյակ են, թե որ պորտի վրա է աշխատում SSH-ը և սկանավորել այն մնացած ստանդարտ նավահանգիստների հետ՝ պարզելու ծրագրաշարի տարբերակը, ստուգելու ստանդարտ արմատային գաղտնաբառերը և այլն:

Ստանդարտ նավահանգիստների փոփոխությունը՝ խճճվածություն, մի քանի անգամ նվազեցնում է աղբի տրաֆիկի քանակը, տեղեկամատյանների չափը և սերվերի բեռը, ինչպես նաև նվազեցնում է հարձակման մակերեսը: Չնայած ոմանք քննադատել «անհայտության միջոցով պաշտպանվելու» այս մեթոդը. (անվտանգություն անհայտության միջոցով): Պատճառն այն է, որ այս տեխնիկան հակադրվում է հիմնարարին ճարտարապետական ​​պաշտպանություն. Հետևաբար, օրինակ, ԱՄՆ Ստանդարտների և տեխնոլոգիաների ազգային ինստիտուտը XNUMXթ «Սերվերի անվտանգության ուղեցույց» մատնանշում է բաց սերվերի ճարտարապետության անհրաժեշտությունը. «Համակարգի անվտանգությունը չպետք է հիմնվի դրա բաղադրիչների իրականացման գաղտնիության վրա», - ասվում է փաստաթղթում:

Տեսականորեն, լռելյայն նավահանգիստների փոփոխությունը դեմ է բաց ճարտարապետության պրակտիկային: Բայց գործնականում վնասակար տրաֆիկի քանակը իրականում կրճատվում է, ուստի սա պարզ և արդյունավետ միջոց է:

Նավահանգստի համարը կարող է կազմաձևվել՝ փոխելով հրահանգը Port 22 կազմաձևման ֆայլում / etc / ssh / sshd_config. Այն նաև նշվում է պարամետրով -p <port> в sshd. SSH հաճախորդ և ծրագրեր sftp նաև աջակցեք տարբերակին -p <port>.

Parameter -p <port> կարող է օգտագործվել հրամանի հետ միանալու ժամանակ պորտի համարը նշելու համար ssh linux-ում։ IN sftp и scp պարամետրը օգտագործվում է -P <port> (կապիտալ P): Հրամանի տողի հրահանգը վերացնում է ցանկացած արժեք կազմաձևման ֆայլերում:

Եթե ​​կան շատ սերվերներ, Linux սերվերը պաշտպանելու համար այս բոլոր գործողությունները կարող են ավտոմատացվել սկրիպտով: Բայց եթե կա միայն մեկ սերվեր, ապա ավելի լավ է ձեռքով վերահսկել գործընթացը:

Գովազդի իրավունքների մասին

Պատվիրեք և սկսեք անմիջապես: VDS-ի ստեղծում ցանկացած կոնֆիգուրացիա և ցանկացած օպերացիոն համակարգով մեկ րոպեի ընթացքում: Առավելագույն կոնֆիգուրացիան թույլ կտա առավելագույնս դուրս գալ՝ 128 պրոցեսորի միջուկ, 512 ԳԲ RAM, 4000 ԳԲ NVMe: Էպոս 🙂

Linux սերվերի պաշտպանություն. Ինչ անել առաջինը

Source: www.habr.com