Fail2ban ашиглан SSH серверийг бүдүүлэг хүчний халдлагаас хэрхэн хамгаалах вэ. SSH серверийг хамгаалах Стандарт бус порт ашиглах

SSH нь сервертэй аюулгүй холболт үүсгэх боломжийг олгодог боловч SSH үйлчилгээ нь өөрөө зөв ажиллахын тулд интернетэд холбогдсон байх ёстой. Энэ нь боломжит халдагчдад халдлагын векторыг үүсгэдэг тул SSH нэмэлт хамгаалалт хэрэгтэй.

Ерөнхийдөө сүлжээнд нэвтрэх боломжтой аливаа үйлчилгээ нь боломжит зорилтот зорилт юм. Эдгээр үйлчилгээний бүртгэлд та удаа дараа системтэй нэвтрэх оролдлогуудыг анзаарч магадгүй - эдгээр нь хэрэглэгчид болон роботуудын хийсэн бүдүүлэг хүчний халдлага юм.

fail2ban үйлчилгээ нь урьдчилан тодорхойлсон тооны амжилтгүй нэвтрэх оролдлогын үндсэн дээр iptables галт ханыг автоматаар дахин тохируулах дүрмийг ашиглан халдлагыг багасгаж чадна. Энэ нь серверт администраторын оролцоогүйгээр зөвшөөрөлгүй хандалтад шуурхай хариу өгөх боломжийг олгоно.

Энэхүү гарын авлага нь Ubuntu 14.04 сервер дээр fail2ban-г суулгах, тохируулахад тусална.

fail2ban-г суулгаж байна

Ubuntu репозитор нь fail2ban багцыг хангадаг тул үүнийг стандарт багц менежер ашиглан суулгаж болно.

Багцын индексээ шинэчилж, fail2ban-г дараах тушаалуудыг ашиглан суулгана уу:

sudo apt-get шинэчлэлт
sudo apt-get install fail2ban

Одоо та хэрэгслийг тохируулж эхлэх боломжтой.

fail2ban тохиргоо

fail2ban тохиргооны файлууд /etc/fail2ban санд хадгалагддаг. Анхдагч тохиргоог jail.conf файлаас олж болно.

Энэ файлыг багцын шинэчлэлтийн үед өөрчлөх боломжтой тул засварлах шаардлагагүй. Түүний агуулгыг өөр файл руу хуулж, тэнд параметрүүдийг тохируулах нь дээр. Эдгээр хоёр файл зөв ажиллаж байгаа эсэхийг шалгахын тулд jail.local файлд хүчингүй болгохыг хүссэн тохиргоогоо л шинэ файлд үлдээсэн нь дээр. Бүх үндсэн тохиргоог jail.conf файлаас унших болно.

jail.conf-г хуулж jail.local файлын үндэс болгон ашиглаарай. Үүнийг хийхийн тулд дараахыг оруулна уу:

awk "( printf "# "; хэвлэх; )" /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

Үүний дараа jail.conf-г харна уу:

sudo nano /etc/fail2ban/jail.conf

Энэ файлд зарим параметрүүдийг шинэчлэх боломжтой. Хэсгийн тохиргоо нь fail2ban дэмждэг бүх үйлчилгээнд хэрэгжинэ (хэрэв эдгээр үйлчилгээний тохиргооны файлд эдгээр утгыг дараагүй бол).


. . .
ignoreip = 127.0.0.1/8
. . .

ignoreip параметр нь fail2ban-ийн үл тоомсорлох эх хаягуудыг тохируулдаг. Анхдагч байдлаар, энэ нь дотоод машинаас ирж буй аливаа урсгалыг зөвшөөрдөг. Та үл тоомсорлох бусад хаягуудыг ignoreip зааврын төгсгөлд зайгаар тусгаарлаж нэмж болно.


. . .
bantime = 600
. . .

Bantime параметр нь баталгаажуулалт амжилтгүй болсон тохиолдолд үйлчлүүлэгчийг хаах хугацааг тогтоодог. Түүний утгыг секундээр хэмждэг. Анхдагч утга нь 600 секунд (10 минут).


. . .
олох хугацаа = 600
maxretry = 3
. . .

Дараагийн анхаарах хоёр параметр бол findtime болон maxretry юм. Тэд хамтдаа хууль бус хэрэглэгчдийг хаах нөхцөлийг тодорхойлдог.

Maxretry хувьсагч нь нэвтрэх оролдлогын тоог, findtime нь хэрэглэгчийн баталгаажуулах ёстой хугацааны интервалыг зааж өгдөг. Хэрэв үйлчлүүлэгч эдгээр үзүүлэлтүүдийн аль нэгийг давсан бол түүнийг хаах болно. Анхдагч байдлаар fail2ban үйлчилгээ нь 10 минутын дотор 3 удаа итгэмжлэл өгөхгүй байгаа үйлчлүүлэгчдийг блоклодог.


. . .
destemail = root@localhost
илгээгчийн нэр = Fail2Ban
mta = илгээх
. . .

Destemail, sendername болон mta гэсэн параметрүүд нь танд имэйл дохиог тохируулах боломжийг олгоно. destemail параметр нь хаягийг зааж өгдөг Имэйл, блоклогдсон хэрэглэгчдийн тухай мессежийг хүлээн авах ёстой. sendername параметр нь мессеж илгээгчийг тодорхойлдог. mta параметр нь аль нь болохыг тодорхойлдог Шуудангийн үйлчилгээшуудан илгээхэд ашиглагдана. Эдгээр параметрүүдийг jail.local хэсэгт нэмж тохирох утгыг тохируулна уу.


. . .
үйлдэл = $(action_)s
. . .

Энэ тохиргоо нь хориг тавьсан тохиолдолд fail2ban юу хийхийг тохируулдаг. action_ утгыг энэ параметрээс бага зэрэг өмнө файлд тодорхойлсон. Анхдагч үйлдэл нь галт ханыг дахин тохируулснаар хоригийн хугацаа дуусах хүртэл халдагчийн урсгалыг хаах болно.

Хэрэв та имэйлийн сэрэмжлүүлгийг тохируулахыг хүсвэл jail.local файлд үйлдлийн элемент нэмж, тайлбарыг арилгаад, түүний утгыг action_-ээс action_mw болгон өөрчилнө үү. Хэрэв та имэйлд бүртгэлээс харгалзах мөрүүдийг оруулахыг хүсвэл action_mwl утгыг зааж өгч болно. Хэрэв та и-мэйл анхааруулга ашиглахаар шийдсэн бол таны имэйлийн тохиргоо үүнийг дэмждэг эсэхийг шалгаарай.

Хувь хүний ​​параметрүүд

Хувь хүний ​​үйлчилгээнд үзүүлэх дэмжлэг нь ижил нэртэй тусгай хэсгүүдэд багтсан болно. Жишээлбэл, ssh үйлчилгээний параметрүүдийг хэсэгт зааж өгч болно.

Эдгээр хэсэг бүрийг jail.local дээрх хэсгийн толгойн тайлбарыг арилгаад идэвхжүүлсэн мөрийг "true" болгож өөрчилснөөр идэвхжүүлж болно:


. . .
идэвхжүүлсэн = үнэн
. . .

Анхдагч байдлаар, зөвхөн SSH үйлчилгээг дэмждэг бөгөөд бусад бүх үйлчилгээг идэвхгүй болгодог.

Эдгээр хэсгүүд нь тухайн хэсэгт заасан утгыг үндэс болгон ашиглаж, шаардлагатай бол тохируулна. Аливаа утгыг хүчингүй болгохын тулд jail.local-д тохирох үйлчилгээний хэсгийг нэмж, утгыг нь өөрчил.

Бусад зарим параметрүүдийг энд тохируулсан болно. Шүүлтүүрийн параметр нь бүртгэл дэх мөр нь баталгаажуулалтын оролдлого амжилтгүй болсон эсэхийг тодорхойлоход тусалдаг; Logpath параметр нь fail2ban-д энэ үйлчилгээний бүртгэлүүд хаана байрлаж байгааг хэлдэг.

Шүүлтүүрийн параметрийн утга нь /etc/fail2ban/filter.d директорт байрлах .conf өргөтгөлтэй файлын холбоос юм. Эдгээр файлуудыг агуулна тогтмол илэрхийллүүд, энэ нь бүртгэл дэх мөр нь баталгаажуулалтын амжилтгүй оролдлогын тухай мессеж мөн эсэхийг тодорхойлдог. Эдгээр файлууд нь нэлээд төвөгтэй бөгөөд анхдагч тохиргоо нь ихэнх тохиолдолд сайн байдаг тул энэ зааварчилгааны хамрах хүрээнээс гадуур байна.

Та энэ лавлахаас шүүлтүүрүүдийг харж болно:

ls /etc/fail2ban/filter.d

Шаардлагатай үйлчилгээтэй холбоотой файлыг олоод нээнэ үү текст засварлагч. Ихэнх файлууд нь маш сайн тайлбартай байдаг тул та үйлчилгээний хамгаалалтын скрипттэй танилцаж болно. Эдгээр шүүлтүүрүүдийн ихэнх нь jail.conf файлд харгалзах хэсгүүдтэй байдаг (тэдгээрийг анхдагчаар идэвхгүй болгосон). Шаардлагатай бол тэдгээрийг jail.local файлд идэвхжүүлж болно.

Та Nginx ашиглан үйлчилдэг вэбсайттай гэж бодъё. Вэб серверийн бүртгэлүүд амжилтгүй нэвтрэх оролдлогоор байнга шинэчлэгддэг. Fail2ban хэрэгсэл нь nginx-http-auth.conf файлыг ашиглан /var/log/nginx/error.log-г байнга шалгах боломжтой.

Үүнд шаардлагатай бараг бүх параметрүүд /etc/fail2ban/jail.conf файлын хэсэгт байгаа. Та jail.local файлын энэ хэсгийн тайлбарыг болиулж, идэвхжүүлсэн параметрийг үнэн болгоход л хангалттай.

. . .
идэвхжүүлсэн = үнэн
. . .

Үүний дараа та fail2ban-г дахин эхлүүлэх хэрэгтэй.

fail2ban-г тохируулж байна

Одоо та fail2ban хэрхэн ажилладагийг мэддэг болсон. SSH болон Nginx үйлчилгээнд автоматаар хаах бодлого тохируулж үзнэ үү. Мөн IP хаяг хаагдсан тохиолдолд имэйл илгээхийн тулд fail2ban хэрэгсэл хэрэгтэй.

Эхлэхийн тулд шаардлагатай програм хангамжийг суулгана уу.

Fail2ban нь бүртгэлээ хянаж, мэдэгдэл илгээхийн тулд sendmail хийх тул танд nginx хэрэгтэй болно. Мөн танд iptables-persistent багц хэрэгтэй бөгөөд ингэснээр сервер ачаалах үед галт ханын дүрмийг хадгалж, автоматаар ачаалах болно. Эдгээр бүх багцыг Ubuntu-ийн стандарт репозитороос татаж авч болно:

sudo apt-get шинэчлэлт
sudo apt-get суулгах nginx sendmail iptables-persistent

Үндсэн галт ханыг тохируулахын тулд fail2ban үйлчилгээг зогсоо.

Галт хана тохируулж байна

Үндсэн галт хана нь дэмжих ёстой тогтоосон холболтууд, түүнчлэн сервер өөрөө үүсгэсэн траффик болон SSH болон вэб серверийн портуудад зориулагдсан урсгал. Бусад бүх хөдөлгөөн хаагдана. Дүрэм нь дараах байдалтай байна.

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate БАЙГУУЛСАН,ХОЛБООТОЙ -j ХҮЛЭЭН АВАХ
sudo iptables -A INPUT -p tcp --dport 22 -j CEPT
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ХҮЛЭЭН АВАХ
sudo iptables -A INPUT -j DROP

Эдгээр тушаалууд нь дээрх бодлогыг хэрэгжүүлдэг. Одоогийн галт ханын дүрмийг харахын тулд дараахыг бичнэ үү:

sudo iptables -S
-P ОРОЛТ ХҮЛЭЭН АВАХ
-Р Урагшаа ХҮЛЭЭН АВАХ
-P OUTPUT ХҮЛЭЭН АВАХ
-A INPUT -i lo -j CEPT




-A INPUT -j DROP

Галт ханын дүрмийг дахин ачаалсны дараа алдахгүйн тулд хадгалаарай.

sudo dpkg-iptables-персистентийг дахин тохируулах

fail2ban-г дахин эхлүүлэх:

sudo үйлчилгээ fail2ban эхлэх

Асуулгын галт ханын дүрэм:

sudo iptables -S
-P ОРОЛТ ХҮЛЭЭН АВАХ
-Р Урагшаа ХҮЛЭЭН АВАХ
-P OUTPUT ХҮЛЭЭН АВАХ
-N fail2ban-ssh

-A INPUT -i lo -j CEPT
-A INPUT -m conntrack --ctstate ХОЛБООТОЙ, БАЙГУУЛСАН -j ХҮЛЭЭН АВАХ
-A INPUT -p tcp -m tcp --dport 22 -j ХҮЛЭЭН АВАХ
-A INPUT -p tcp -m tcp --dport 80 -j ХҮЛЭЭН АВАХ
-A INPUT -j DROP
-Fail2ban-ssh -j БУЦАХ

Сүлжээ бүр өөрийн гэсэн үндсэн бодлоготой болсон. Галт хананд бас таван үндсэн дүрэм байдаг. Fail2ban бүтцийг улаанаар тодруулсан: энэ хэрэгсэл нь SSH хоригийн дүрмийг аль хэдийн хэрэгжүүлдэг. Заримдаа энэ бүтэц нь эхэндээ харагдахгүй, учир нь fail2ban нь эхний хориг хүртэл бүтцийг нэмэхгүй байж болно.

fail2ban-г тохируулж байна

Одоо та jail.local файлд fail2ban тохиргоог нэмэх хэрэгтэй:

sudo nano /etc/fail2ban/jail.local

Энд та илүү хатуу блоклох хугацааны интервалыг тохируулж болно. Гарчгийг олж тайлбарыг арилгана уу. Энэ хэсэгт үйлчилгээ нь үйлчлүүлэгчийг хагас цагийн турш блоклохын тулд bantime параметрийг өөрчил.


. . .
bantime = 1800
. . .

Та мөн мэдэгдлийг тохируулах хэрэгтэй. Эхлээд энэ хэсэгт байх ёстой destemail параметрийг олоорой. Эдгээр мессежийг цуглуулахын тулд ашиглахыг хүссэн имэйл хаягаа оруулна уу:


. . .
destemail = [имэйлээр хамгаалагдсан]
. . .

sendername-д тохиромжтой утгыг зааж өгнө үү. Имэйл үйлчилгээ хялбархан шүүж болохуйц тайлбарлах утгыг энд ашиглахыг зөвлөж байна.

Дараа нь та үйлдлийн үнэ цэнийг засах хэрэгтэй. Үйлчлүүлэгчийг блоклохын тулд action_mw тохиргоог хийж, дараа нь "whois" тайланг илгээж болно. action_mwl утга нь ижил үйлдэл хийхээс гадна зурваст харгалзах бүртгэлийн мөрүүдийг илгээдэг.


. . .
үйлдэл = %(action_mwl)s
. . .

Maxretry зааврын SSH хэсэгт та амжилтгүй баталгаажуулах оролдлогын тоог өөрчилж болно. Хэрэв та стандарт бус порт ашиглаж байгаа бол (22 биш) портын параметрт үүнийг зааж өгнө үү. Өмнө дурьдсанчлан энэ сервер аль хэдийн идэвхжсэн байна.

Дараа нь nginx-http-auth хэсгийг олоорой. Толгойн тайлбарыг арилгаж, идэвхжүүлсэн параметрийг "үнэн" болгож өөрчил.

. . .

идэвхжүүлсэн = үнэн
. . .

Хэрэв вэб сервер нь стандарт портуудыг ашигладаг бөгөөд түүний бүртгэлүүд нь стандарт лавлахад хадгалагддаг бол энэ хэсэгт үүнийг хийх хэрэгтэй.

fail2ban-г дахин эхлүүлнэ үү

Файлыг хадгалаад хаа.

Дараа нь fail2ban үйлчилгээг дахин эхлүүлнэ үү. Заримдаа үүнийг зогсоож, дахин эхлүүлсэн нь дээр.

sudo үйлчилгээ fail2ban зогсоох
sudo үйлчилгээ fail2ban эхлэх

Галт ханын бүх дүрмийг татаж авахад хэдэн минут шаардлагатай. Заримдаа эхний үйлчлүүлэгчийг хаах хүртэл дүрмийг нэмдэггүй. Хэсэг хугацааны дараа та шинэ дүрмийг шалгах боломжтой болно:

sudo iptables -S
-P ОРОЛТ ХҮЛЭЭН АВАХ
-Р Урагшаа ХҮЛЭЭН АВАХ
-P OUTPUT ХҮЛЭЭН АВАХ
-N fail2ban-nginx-http-auth

-N fail2ban-ssh

-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth


-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh

-A INPUT -i lo -j CEPT
-A INPUT -m conntrack --ctstate ХОЛБООТОЙ, БАЙГУУЛСАН -j ХҮЛЭЭН АВАХ
-A INPUT -p tcp -m tcp --dport 22 -j ХҮЛЭЭН АВАХ
-A INPUT -p tcp -m tcp --dport 80 -j ХҮЛЭЭН АВАХ
-A INPUT -j DROP
-Fail2ban-nginx-http-auth -j RETURN

-Fail2ban-ssh -j БУЦАХ

fail2ban бодлогоор үүсгэсэн мөрүүдийг улаанаар тодруулсан. Яг одоо тэд зүгээр л шинэ, ихэвчлэн хоосон сүлжээнүүд рүү урсгалыг чиглүүлж, дараа нь урсгалыг INPUT хэлхээнд буцааж дамжуулдаг.

Эдгээр гинжин хэлхээнд блоклох дүрэм нэмэгдэх болно.

Блоклох бодлогыг туршиж байна

Одоо та fail2ban сервер дээр итгэмжлэлгүй өөр серверээс холбогдож дүрмийг шалгах боломжтой.

Байгаагүй итгэмжлэлүүдийг ашиглан серверт SSH холболт үүсгэж үзнэ үү:

ssh blah@fail2ban_server_IP

Санамсаргүй тэмдэгтүүдийг нууц үг болгон оруулна уу. Хэд хэдэн удаа давтана. Хэзээ нэгэн цагт fail2ban нь хандахаас татгалзаж, "Зөвшөөрөл олгогдлоо" гэсэн мессежийг харуулах болно.

Эхний сервер рүү буцаж ирээд iptables-ийн шинэ дүрмийг үзнэ үү:

sudo iptables -S
-P ОРОЛТ ХҮЛЭЭН АВАХ
-Р Урагшаа ХҮЛЭЭН АВАХ
-P OUTPUT ХҮЛЭЭН АВАХ
-N fail2ban-nginx-http-auth
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -i lo -j CEPT
-A INPUT -m conntrack --ctstate ХОЛБООТОЙ, БАЙГУУЛСАН -j ХҮЛЭЭН АВАХ
-A INPUT -p tcp -m tcp --dport 22 -j ХҮЛЭЭН АВАХ
-A INPUT -p tcp -m tcp --dport 80 -j ХҮЛЭЭН АВАХ
-A INPUT -j DROP
-Fail2ban-nginx-http-auth -j RETURN
-Fail2ban-ssh -s 203.0.113.14/32 -j REJECT --reject-with icmp-port-unreachable
-Fail2ban-ssh -j БУЦАХ

Шинэ дүрмийг улаан өнгөөр ​​тодруулсан. Энэ нь хоёр дахь серверийн IP хаягаас SSH порт руу орох урсгалыг блоклодог. Та удахгүй үйлчлүүлэгчийг блоклосон тухай мэдэгдлийг хүлээн авах болно.

Дүгнэлт

Одоо та fail2ban-ийн үндсийг мэддэг болсон бөгөөд энэ хэрэгслийн үндсэн тохиргоог үүсгэж болно.

Secure Shell-ийг хаа сайгүй олж болно. 1995 онд гарснаасаа хойш SSH нь Linux-д алсаас нэвтрэх хүчирхэг протокол болгон өргөн хэрэглэгдэх болсон.

Гэсэн хэдий ч бидний мэдэж байгаагаар агуу хүч нь асар их үүрэг хариуцлага ирдэг. Буруу тохируулсан SSH дэмон нь тусламж гэхээсээ илүү аюул занал учруулж болзошгүй. Энэ нийтлэлд бид SSH аюулгүй байдлыг бэхжүүлэх таван алхамыг авч үзэх болно.

1. Root login-ыг идэвхгүй болгох.

Хамгийн энгийн алхам. Мэдээжийн хэрэг, SSH-ээр дамжуулан root нэвтрэхийг зөвшөөрөх шалтгаан бага байна. Ийм хандалтыг идэвхгүй болгох нь маш энгийн бөгөөд аюулгүй байдлыг сайжруулах болно.

/etc/ssh/sshd_config-г олъё (энэ нь өөр директорт байрлаж магадгүй, энэ нь тархалтаас хамаарна). Үүнд бид PermitRootLogin-ийн байршлыг тодорхойлж, утгыг "no" гэж солино.

PermitRootLogin дугаар

Мэдээжийн хэрэг, энэ нь энгийн хэрэглэгчийн хувьд системд нэвтэрч ороход хэн ч саад болохгүй, гэхдээ энэ нь системийг давамгайлахад нэмэлт саад болж байх болно.

Дээр бичсэн бүх зүйлийг уншиж, хэрэгжүүлсний дараа бид сервер дээр зөвшөөрөл авах түлхүүрүүдийг хүлээн авах болно. Бүх зүйл ажиллаж байгаа гэдэгт итгэлтэй болмогц та интерактив оролтыг идэвхгүй болгож болно:

Нууц үг Баталгаажуулалтын дугаар
ChallengeResponseAuthentication no

Энэхүү Python скриптийг ашигласнаар администратор амжилтгүй нэвтэрсэн тохиолдолд автоматаар хар жагсаалтад хостуудыг нэмж, үүрд хориглох боломжтой. Хамгийн энгийн аргатохиргоо:

Europa ~ # гарч ирэх -pv denyhosts
Эдгээр багцуудыг дарааллаар нь нэгтгэх болно:
Хамааралыг тооцоолж байна... дууссан!
app-admin/denyhosts-2.5 0 кБ
Татаж авсан нийт хэмжээ: 0 кБ
европа ~ # гарч ирж буй denyhosts

Хөтөлбөр дээр тийм ч олон баримт бичиг байдаггүй (жишээ нь ямар нэгэн зүйл байгаа бол), гэхдээ бүх тохиргооны сонголтыг ихэвчлэн доор тайлбарласан байдаг. тохиргооны файл.

Европ $ nano -w /etc/denyhosts.conf

DenyHosts-ийг тохируулах нь ямар нэгэн онцгой асуудал үүсгэхгүй гэж би бодохгүй байна - тохиргоог анхааралтай уншина уу.

Тохируулга хийсний дараа та програмыг демон хэлбэрээр эсвэл төлөвлөгчөөр дамжуулан ажиллуулж болно. Gentoo демон дээр:

Rc-шинэчлэлт нь өгөгдмөл denyhosts нэмнэ

Cron-ээр дамжуулан 10 минут тутамд:

Python /usr/bin/denyhosts -c /etc/denyhosts.conf

DenyHost-ийн бүх баяр баясгалан нь зөвхөн SSH сервер рүү нэвтрэхийг оролдож буй хостуудыг хаахаас гадна та "хар жагсаалт"-аа DenyHost серверүүдтэй синхрончлох боломжтой юм. Энэ нь бүх халдагчдыг агуулсан хостуудын нэгдсэн жагсаалтыг үүсгэдэг. Энэ нь довтолгооноос урьдчилан сэргийлэх болно.

4. Портын дугаарыг өөрчил.

Ихэнх хакердах оролдлого нь SSH демонуудыг сүлжээг сканнердсан автомат скриптүүдээс ирдэг. Ихэнх тохиолдолд тэд зөвхөн бидний гарт байдаг 22-р порт руу нэвтрэхийг оролддог. Портыг өөрчилснөөр бид ихэнх зөвшөөрөлгүй нэвтрэх оролдлогыг автоматаар таслах болно.

Тохиргоог өөрчлөх нь зүйтэй.

Ssh серверт нэвтрэх эрхийг хамгаалах хэд хэдэн дүрэм.

1. Стандарт портоос гадна өөр нэг портыг сонсохын тулд ssh серверийн тохиргоонд нэмнэ үү. (Санахад хялбар болгохын тулд та бүх сервертээ 4 давтагдах дугаар ашиглаж болно).

$ sudo vi /etc/ssh/sshd_config Порт 22 Порт xxxx

2. Бид 22-р порт руу залгах дуудлагыг зөвхөн итгэмжлэгдсэн IP хаягаар хязгаарладаг *жишээ нь 8.8.8.8 (та хэд хэдэн ийм дүрэм гаргаж болно, ажил, гэр)

$ sudo vi /etc/sysconfig/iptables -A INPUT -s 8.8.8.8 -p tcp -m төлөв --төлөв ШИНЭ -m tcp --dport 22 -j ХҮЛЭЭН АВАХ

3. Бид ipv6 ашиглаж байгаа эсэхийг шалгахаа бүү мартаарай, хэрэв тийм бол шаардлагагүй нэгийг хаа

$ sudo vi /etc/sysconfig/ip6tables *шүүлтүүр:ОРОЛТ ХҮЛЭЭН АВАХ :ДАМЖУУЛАХ ХҮЛЭЭН АВАХ :ГАРЦ ХҮЛЭЭН АВАХ -А ОРОЛТ -m төлөв --ТӨР БАЙГУУЛСАН,ХОЛБООТОЙ -j ХҮЛЭЭН АВАХ -ОРОЛТ -p ipv6-icmp -A INPUT - i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -A INPUT -j REJECT --reject-with icmp6-adm-prohibited -A FORWARD -j REJECT --reject-with icmp6-adm-хориотой COMIT

Зөвхөн тодорхой хаяг дээр ssh ашиглахын тулд тохиргооны файлд хангалттай sshd_configпараметрийг зааж өгнө үү Сонсох хаяг(жишээ нь ListenAddress 74.125.200.100). Энэ тохиолдолд ssh нь зөвхөн энэ хаяг дээр байх бөгөөд ipv6-ээр ажиллахгүй

4. Үйлчлүүлэгч тал дээр ssh тохиргооны файлыг ашиглана уу.

Байршил: ~/.ssh/config

# засах Бичих амжилтгүй: эвдэрсэн хоолой ServerAliveInterval 120 TCPKeepAlive үгүй ​​# богино нэрийг ашиглах Хост dev-vps # ip хаяг эсвэл нийтийн Домэйн нэрхост Хостын нэр 127.0.0.3 # Аль хэрэглэгч нэвтэрч орох вэ Хэрэглэгчийн хөгжүүлэгч # Зөвшөөрлийн түлхүүр файл (хэрэв ашигласан бол) IdentityFile ~/.ssh/id_rsa.dev

Мөн тохиргооны файлыг ашиглах өөр нэг жишээ:
{<1>}

Host ssh-server-1 Hostname 1.2.3.4 User dev Port 1234 Host ssh-server-2 User root # Hostname 192.168.10.20 # nc -q0-гүй бол RHEL дээр суурилсан & -q0 debian дээр суурилсан IdentityFile ~/.ssh/id_rsa.work -pc ProxyCommand ssh -q0 ssh-server-1 nc -q0 192.168.10.20 22

Одоо ssh-server-1-тэй холбогдоход бид шаардлагатай хост руу шууд шилжих болно. (Жишээ нь сервер дээрх өөр түлхүүрүүдийг ашиглахад тохиромжтой)

Тэгээд хипстерпрокси сонголт:

{<2>}

Ngrok клиентийг галт хананы ард байрлах сервер рүү татаж аваарай. Бид хоёртын файлыг ажиллуулж, аль портыг дамжуулах шаардлагатайг зааж өгнө

SSHнь сүлжээн дэх өгөгдөл дамжуулахын аюулгүй байдал, шифрлэлтийг хангахад хэрэглэгддэг протокол юм. Энэ нь тойрог хэлбэрээр өргөн хэрэглэгддэг Линуксалсын серверийг удирдах админууд. Интернэт дэх серверийн холболтууд серверт нэвтрэхийн тулд SSH үйлчилгээнд ихэвчлэн халдлагад өртдөг. Хамгийн түгээмэл нь администраторын эрхтэй хэрэглэгчийн нууц үгийг таах явдал юм. Энэхүү гарын авлагад бид аюулгүй байдлын үндсэн зөвлөмжийг авч үзэх болно SSHхолболтууд.

Нарийн төвөгтэй нууц үг тохируулна уу

Таны сервер халдагчдын халдлагад өртөж, серверийн нууц үгийг ашиглан таахыг оролдож магадгүй SSHХакердах эрсдэлийг бууруулахын тулд бид дараах параметрүүдтэй тохирох серверийн бүртгэлд нууц үг оруулахыг зөвлөж байна.

  • Дор хаяж 8 тэмдэгт
  • Том, жижиг үсэг ашиглах (AaBb)
  • Үсэг ашиглах - тоо, тэмдэг (!BasDf345$@)

Хүчтэй нууц үг нь зөвхөн хакердахаас хамгаалахгүй SSHпротокол, гэхдээ ерөнхийдөө серверийн аюулгүй байдлыг сайжруулах болно.

SSH түлхүүрүүдийг ашиглана уу

Таны серверийн нэмэлт хамгаалалт бол сервертэй холбогдох түлхүүрийг ашиглах явдал юм SSH, та холбогдох компьютер/сервер дээр түлхүүр үүсгэх хэрэгтэй:

Хэрхэн бий болгох вэ SSHтүлхүүр асаана Windows үйлдлийн систем:

Түлхүүр үүсгэхийн тулд Линукстушаалыг бичнэ үү:

Ssh-keygen -t rsa

Энэ түлхүүрийг холбогдох сервер дээрээ суулгахын тулд дараах тушаалыг бичнэ үү.

Ssh-copy-id -p 22 [имэйлээр хамгаалагдсан]

  • -х 22- түүний ажилладаг серверийн порт SSHпротокол (өөрчлөх боломжтой, доор дэлгэрэнгүй мэдээлэл)
  • админ- Серверээсээ нэвтэрнэ үү
  • 192.168.1.1 - Таны серверийн IP хаяг

Хэрэв та бүх зүйлийг зөв хийсэн бол одоо түлхүүрийг ашиглан серверт холбогдох боломжтой бөгөөд нууц үгээ оруулах бүрдээ шаардлагагүй болно.

Стандарт бус порт ашиглах

Стандарт SSHсервер дээр ажиллаж байгаа үйлчилгээ сонсдог 22 портӨгөгдлийг холбох/дамжуулахын тулд халдагчид үүнийг ашиглах боломжтой бөгөөд ихэнх хэрэглэгчид серверт холбогдох стандарт портыг өөрчилдөггүй. Тиймээс бид портоо өөрчлөх бөгөөд ингэснээр манай сервер хакердагдах эрсдэлийг дахин бууруулна.

Үүнийг хийхийн тулд тохиргооны файлыг нээнэ үү SSHсервер дээр:

Sudo nano /etc/ssh/sshd_config

Ийм тайлбартай мөрийг олцгооё:

# Порт 22

Тэмдгийг устгана уу # - сэтгэгдлийн сонголтыг устгаж, өөрчлөх 22 -аас эхлэн дурын тоонд 11060 өсөн нэмэгдэж буй дарааллаар, жишээ нь бид ашиглах болно 11 060 , мөр одоо иймэрхүү харагдах ёстой:

Порт 11060

Тохиргоог хадгалах" Ctrl+О"болон редактороос гарах" Ctrl+X".

Дахин ачаалах хэрэгтэй SSHүйлчилгээ - шинэ тохиргоог хүлээн авахын тулд дараах тушаалыг ажиллуулна уу:

Sudo үйлчилгээг sshd дахин эхлүүлнэ

Тиймээс бид холболтын портыг өөрчилсөн тул серверт холбогдохын тулд та стандарт бус портыг сонгох хэрэгтэй. 11060 , Жишээлбэл:

Ssh -p 11060 [имэйлээр хамгаалагдсан]

Зөвхөн хэсэг бүлэг хэрэглэгчдийн хандалтыг хязгаарлах

SSHХэрэв сервер дээр гурван бүртгэл байгаа бол холболтыг хувь хүний ​​дансанд хязгаарлаж болно. админ , Сергей , Алекс- зөвшөөрөх боломж танд байна алсын холболтзөвхөн тэдний зарим нь. Үүнийг хийхийн тулд тохиргооны файлыг нээнэ үү SSH:

Энэ файлын сумыг ашиглан хамгийн сүүлийн мөрөнд очиж дараах агуулгатай шинийг нэмнэ үү.

AllowUsers админ Алекс

Тохиргоог хадгалах" Ctrl+О"болон редактороос гарах" Ctrl+X".

Үйлчилгээг дахин эхлүүлнэ үү SSH:

Sudo үйлчилгээг sshd дахин эхлүүлнэ

Та ингэж зөвшөөрч байна алсаас хандаххэрэглэгчдэд зориулсан админТэгээд Алекс, хэрэглэгч байхад Сергейцаашид алсаас холбогдох боломжгүй болно.

SSH протоколыг идэвхжүүлэх 2

Стандартын дагуу SSHхувилбар 1 горимд ажилладаг, энэ хувилбар нь хуучирсан бөгөөд олон эмзэг байгаа боловч баталгаажуулах хэрэгтэй илүү сайн хамгаалалтҮүнийг хийхийн тулд тохиргооны файлыг нээнэ үү SSH:

Sudo nano /etc/ssh/ssh_config

Мөрийг олох:

# Протокол 2

Тэмдэгтийг арилгах # - тайлбар сонголтыг устгаад энэ мөрийг ашиглахын тулд дараах байдлаар харагдах ёстой.

Протокол 2

Тохиргоог хадгалах" Ctrl+О"болон редактороос гарах" Ctrl+X".

Үйлчилгээг дахин эхлүүлнэ үү SSH:

Sudo үйлчилгээг sshd дахин эхлүүлнэ

Хоосон нууц үгүүдийг идэвхгүй болгох

Өгөгдмөл SSHЭнэхүү үйлчилгээ нь нууц үггүй хэрэглэгчдийг холбогдохыг хориглодог боловч энэ сонголт таны сервер дээр идэвхгүй байж болзошгүй тул тохиргооны файлыг нээнэ үү. SSH:

Sudo nano /etc/ssh/ssh_config

Шугамыг ол PermitEmptyPasswordsмөн үнэ цэнэ нь байгаа эсэхийг шалгаарай "үгүй".

PermitEmptyPasswords дугаар

Нарийвчилсан бүртгэлийг идэвхжүүлэх

Үйлчилгээ үзүүлэх SSH IP хаягуудыг харуулсан амжилтгүй холболтын бүртгэлийг хөтөлж, тохиргооны файлыг нээнэ үү SSH:

Sudo nano /etc/ssh/ssh_config

Шугамыг ол Бүртгэлийн түвшинба оронд нь МЭДЭЭЛЭЛзааж өгнө үү ДЭЛГЭРЭНГҮЙ, мөр дараах байдлаар харагдах ёстой.

LogLevel VERBOSE

Файлыг хадгалах" Ctrl+О"болон засварлагчаас гарах" Ctrl+X".

Үйлчилгээг дахин эхлүүлнэ үү SSH:

Sudo үйлчилгээг sshd дахин эхлүүлнэ

Та тушаалыг оруулснаар шалгаж болно:

Cat /var/log/secure

Систем бидэнд дараах мэдээллийг өгөх болно.

6-р сарын 21 13:06:28 centos sshd: 118.212.143.47 порт 48263 ssh2-аас root-д зориулсан нууц үг амжилтгүй боллоо.

Энэ бичлэгээс бид байсан гэдгийг харж байна амжилтгүй оролдлогозаасан хаягаас сервер рүү нэвтрэх.

Анхаарал тавьсанд баярлалаа, тэгээд л болоо.

Энэхүү богино тэмдэглэлд би ssh серверийн аюулгүй байдлыг нэмэгдүүлэх аргуудыг нэгтгэсэн. Хамгийн энгийн бөгөөд гүйцэтгэхэд хялбар аргуудыг тайлбарласан бөгөөд илүү нарийн төвөгтэй аргуудыг зөвхөн сонирхсон уншигчдад зориулагдсан болно.

Үндсэн техникүүд

Бүх үйлдлийг sshd дэмоны тохиргооны файлд гүйцэтгэдэг - /etc/ssh/sshd_config. Доор би өөрийн тохиргооны файлын зарим хэсгийг тайлбартай өгөх болно.

### Сүлжээ ### # Бид стандарт бус порт (>1024) 5679 порт ашигладаг # Бид зөвхөн IPv4 холболтуудыг ашигладаг # inet = IPv4, inet6 = IPv6, дурын = хоёулаа ХаягГэр бүл inet # Та зөвхөн тодорхой IP-ээс холболтыг хүлээн авах боломжтой. хаягууд #ListenAddress 0.0 # Бид протоколын хоёр дахь хувилбарыг ашигладаг, учир нь Эхнийх нь # мэдэгдэж байгаа Протокол 2-ын сул талуудтай тул # Графикийн дахин чиглүүлэлт (X сервер) танд хэрэгтэй болтол нь идэвхгүй болгох X11Forwarding no # Disable TCPKeepAlive ба оронд ClientAliveInterval ашиглан TCP Spoofing TCPKeepAlive гэх мэт халдлагаас сэргийлэхийн тулд # # Хэрэглэгчийг өшиглөхгүй (10-аас хойш хэрэглэгчийг өшиглөх) 600 сек) идэвхгүй ClientAliveInterval 600 ClientAliveCountMax 3 ### Түлхүүр тохиргооны файлууд ### # Протоколын хувилбар 2-д зориулсан хостын түлхүүрүүд HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key com доторх процессыг ашиглан урсгал # хамгаалагдсан хязгаарлагдмал орчин - openSSH >= 5.9 ("тийм" - доод хувилбаруудын хувьд) UsePrivilegeSeparation хамгаалагдсан хязгаарлагдмал орчин # Эдгээр утгууд өөрчлөгдөхөд устгах шаардлагатай хуучин түлхүүр# /etc/ssh/ssh_host_rsa_key(,.pub), sshd-г # дахин эхлүүлж шинээр үүсгэнэ үү. # # Түлхүүр ашиглалтын хугацаа, өөрөөр хэлбэл. Үүнийг бий болгоход хэр хугацаа шаардагдах вэ? шинэ түлхүүр# өмнөхийг ашигласан тохиолдолд. KeyRegenerationInterval 1цаг # түлхүүрийн хүч ServerKeyBits 2048 # Нийтийн түлхүүр ашиглан зөвшөөрөл олгохыг зөвшөөрөх PubkeyAuthentication тийм # AuthorizedKeysFile .ssh/authorized_keys хэрэглэгчийн лавлах дахь итгэмжлэгдсэн түлхүүрүүдийн хадгалалтын байршил ### Бүртгэлийн ### # Fastailslogs-д зориулсан Fastails-ийн мессежийн угтвар. өөрөө LogLevel INFO ### Баталгаажуулалт ### # зөвшөөрөгдсөн хэрэглэгчдийн жагсаалт Хэрэглэгчдийг зөвшөөрөх данс root PermitRootLogin үгүй ​​# ssh товчлуураар файл болон директоруудын эрхийг тодорхой шалгахыг идэвхжүүлнэ StrictModes тийм # Буруу оруулсан бол хэдэн удаа нууц үгээ дахин асуух вэ MaxAuthTries 3 # Хоосон нууц үгээр нэвтрэхийг хориглох PermitEmptyPasswords үгүй ​​# Нууц үгээр нэвтрэхийг хориглох зарчим # (Үүний оронд нийтийн/хувийн түлхүүр ашиглана уу) Нууц үгийн баталгаажуулалт үгүй ​​# "Сорилт хариу" зөвшөөрлийг ашиглахыг идэвхгүй болгох, # учир нь ChallengeResponseAuthentication түлхүүрүүдийг ашиглахад ашиггүй болно no # Бид нууц үг ашигладаггүй тул бидэнд хэрэггүй (PAM, login(1)) UsePAM no UseLogin no # Үйлчлүүлэгчид зөвхөн тодорхой орчны хувьсагчийг дамжуулахыг зөвшөөрөх # RH BZ#CVE-2014-2532 # ShellShock exploit Зөвшөөрөх

Эдгээр нь sshd тохиргооны файлд тохируулагдсан параметрүүд юм. Тохиргоог өөрчилсний дараа та sshd үйлчилгээг дахин эхлүүлэх хэрэгтэй.

Сэтгэгдэл

  • Түлхүүр баталгаажуулалтыг ашиглах үед түлхүүр шаардлагатай өмнө ньүүсгэх дээр үйлчлүүлэгч машинболон нийтийн түлхүүрийг серверт хуулна. Жишээ:
үйлчлүүлэгч $ ssh-keygen клиент $ cat ~/.ssh/id_rsa.pub | ssh -p 5679 [имэйлээр хамгаалагдсан]"муур >> ~/.ssh/authorized_keys"
  • /var/log/auth.log файл нь дараах мессежүүдийг агуулна sshd. Хэрэв энэ файл байхгүй бол та бүртгэлийн системээ тохируулах хэрэгтэй. жишээ нь syslog болон syslon-ng. Би syslog-ng ашиглаж байгаа бөгөөд /etc/syslog-ng/syslog-ng.conf файлд дараах мөрүүдийг нэмэх шаардлагатай байна:
очих газрын баталгаажуулалтын бүртгэл (файл("/var/log/auth.log"); ); бүртгэл (эх сурвалж(src); очих газар(authlog); );

болон syslog-ng үйлчилгээг дахин эхлүүлнэ үү.

  • Хэрэв та стандарт бус порт ашигладаг бол галт ханаа (iptables, firewalld гэх мэт) тохируулах шаардлагатай байж магадгүй.
    Жишээ iptables-ийн тохиргоо:
root# iptables -A INPUT -p tcp -m state --state ШИНЭ, БАЙГУУЛСАН --dport 5679 -j ACCEPT root# үйлчилгээний iptables save root# iptables -L -n Chain INPUT (бодлогын ACCEPT) зорилтот prot opt's source destination ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 төлөв ШИНЭ tcp dpt:22 ACCEPT tcp -- 0.0.0.0/0 0/0 төлөв ШИНЭ 0. tcp dpt :80 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 төлөв ШИНЭ, БАЙГУУЛСАН tcp dpt:5679 ...

Хэрэв энэ нь хангалтгүй бол

Энэ зүгээр л үндсэн тохиргоо. Үүнээс гадна та тохируулж болно

  • галт хана (iptables)