วิธีป้องกันเซิร์ฟเวอร์ SSH จากการโจมตีแบบ Brute Force โดยใช้ Fail2ban การปกป้องเซิร์ฟเวอร์ SSH ใช้พอร์ตที่ไม่ได้มาตรฐาน

SSH ช่วยให้คุณสร้างการเชื่อมต่อที่ปลอดภัยไปยังเซิร์ฟเวอร์ได้ แต่บริการ SSH เองจะต้องมีการเข้าถึงอินเทอร์เน็ตเพื่อให้ทำงานได้อย่างถูกต้อง สิ่งนี้จะสร้างเวกเตอร์การโจมตีสำหรับผู้โจมตีที่อาจเกิดขึ้น ดังนั้น SSH จึงต้องการการป้องกันเพิ่มเติม

โดยทั่วไป บริการใดๆ ที่มีการเข้าถึงเครือข่ายถือเป็นเป้าหมายที่เป็นไปได้ ในบันทึกของบริการเหล่านี้ คุณอาจสังเกตเห็นความพยายามเข้าสู่ระบบซ้ำๆ อย่างเป็นระบบ ซึ่งเป็นการโจมตีแบบดุร้ายที่ดำเนินการโดยผู้ใช้และบอท

บริการ Fail2ban สามารถลดการโจมตีโดยใช้กฎที่กำหนดค่าไฟร์วอลล์ iptables ใหม่โดยอัตโนมัติตามจำนวนความพยายามเข้าสู่ระบบที่ล้มเหลวที่กำหนดไว้ล่วงหน้า สิ่งนี้จะช่วยให้เซิร์ฟเวอร์ตอบสนองต่อการเข้าถึงที่ไม่ได้รับอนุญาตได้ทันทีโดยไม่ต้องมีการแทรกแซงจากผู้ดูแลระบบ

คู่มือนี้จะช่วยคุณในการติดตั้งและกำหนดค่า failed2ban บนเซิร์ฟเวอร์ Ubuntu 14.04

การติดตั้ง Fail2ban

พื้นที่เก็บข้อมูล Ubuntu มีแพ็คเกจ failed2ban ดังนั้นจึงสามารถติดตั้งได้โดยใช้ตัวจัดการแพ็คเกจมาตรฐาน

อัพเดตดัชนีแพ็กเกจของคุณและติดตั้ง Fail2ban โดยใช้คำสั่งเหล่านี้:

อัปเดต sudo apt-get
sudo apt-get ติดตั้ง failed2ban

ตอนนี้คุณสามารถเริ่มตั้งค่ายูทิลิตี้ได้แล้ว

การกำหนดค่าที่ล้มเหลว 2ban

ไฟล์คอนฟิกูเรชัน 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 นาโน /etc/fail2ban/jail.conf

คุณสามารถอัปเดตพารามิเตอร์บางตัวในไฟล์นี้ได้ การตั้งค่าส่วนจะนำไปใช้กับบริการทั้งหมดที่ Fail2ban รองรับ (เว้นแต่ว่าค่าเหล่านี้จะถูกแทนที่ในไฟล์การกำหนดค่าของบริการเหล่านั้น)


. . .
เพิกเฉย = 127.0.0.1/8
. . .

พารามิเตอร์ละเลยจะกำหนดค่าที่อยู่ต้นทางที่ failed2ban จะเพิกเฉย ตามค่าเริ่มต้น จะอนุญาตการรับส่งข้อมูลใดๆ ที่มาจากเครื่องภายในเครื่อง คุณสามารถเพิ่มที่อยู่อื่นๆ ที่จะละเว้นได้โดยวางไว้ที่ส่วนท้ายของคำสั่งละเว้น โดยคั่นด้วยช่องว่าง


. . .
แบนไทม์ = 600
. . .

พารามิเตอร์ bantime จะกำหนดเวลาในระหว่างที่ไคลเอนต์จะถูกแบนหากไม่ผ่านการรับรองความถูกต้อง ค่าของมันถูกวัดเป็นวินาที ค่าเริ่มต้นคือ 600 วินาที (10 นาที)


. . .
เวลาค้นหา = 600
แม็กซ์รีทรีท = 3
. . .

พารามิเตอร์สองตัวถัดไปที่ต้องคำนึงถึงคือ findtime และ maxretry พวกเขาร่วมกันกำหนดเงื่อนไขที่ผู้ใช้ที่ผิดกฎหมายจะถูกบล็อก

ตัวแปร maxretry ระบุจำนวนความพยายามในการเข้าสู่ระบบ และ findtime ระบุช่วงเวลาที่ผู้ใช้ต้องตรวจสอบสิทธิ์ หากลูกค้าเกินกว่าตัวบ่งชี้เหล่านี้ เขาจะถูกบล็อก ตามค่าเริ่มต้น บริการ Fail2ban จะบล็อกไคลเอ็นต์ที่ไม่สามารถให้ข้อมูลประจำตัว 3 ครั้งภายใน 10 นาที


. . .
destemail = root@localhost
ชื่อผู้ส่ง = Fail2Ban
mta = ส่งเมล์
. . .

พารามิเตอร์ destemail ชื่อผู้ส่ง และ mta ช่วยให้คุณสามารถกำหนดค่าการแจ้งเตือนทางอีเมลได้ พารามิเตอร์ destemail ระบุที่อยู่ อีเมลซึ่งควรได้รับข้อความเกี่ยวกับผู้ใช้ที่ถูกบล็อก พารามิเตอร์ sendername ระบุผู้ส่งข้อความ พารามิเตอร์ mta กำหนดว่าสิ่งใด บริการไปรษณีย์จะถูกใช้ในการส่งจดหมาย เพิ่มพารามิเตอร์เหล่านี้ในส่วน Jail.local และตั้งค่าที่เหมาะสม


. . .
การกระทำ = $(การกระทำ_)s
. . .

การตั้งค่านี้จะกำหนดสิ่งที่ Fail2ban จะทำในกรณีที่ถูกแบน ค่า action_ ถูกกำหนดไว้ในไฟล์ก่อนพารามิเตอร์นี้เล็กน้อย การดำเนินการเริ่มต้นจะบล็อกการรับส่งข้อมูลของผู้โจมตีจนกว่าการแบนจะหมดลงโดยการกำหนดค่าไฟร์วอลล์ใหม่

หากคุณต้องการกำหนดค่าการแจ้งเตือนทางอีเมล ให้เพิ่มหรือยกเลิกการใส่หมายเหตุองค์ประกอบการดำเนินการลงในไฟล์ Jail.local และเปลี่ยนค่าจาก action_ เป็น action_mw หากคุณต้องการให้อีเมลรวมบรรทัดที่เกี่ยวข้องจากบันทึก คุณสามารถระบุค่า action_mwl ได้ หากคุณตัดสินใจที่จะใช้การแจ้งเตือนทางอีเมล ตรวจสอบให้แน่ใจว่าการตั้งค่าอีเมลของคุณรองรับ

พารามิเตอร์ส่วนบุคคล

การสนับสนุนบริการส่วนบุคคลจะรวมอยู่ในส่วนพิเศษที่มีชื่อเดียวกัน ตัวอย่างเช่น สามารถระบุพารามิเตอร์ของบริการ ssh ได้ในส่วนนี้

แต่ละส่วนเหล่านี้สามารถเปิดใช้งานได้โดยยกเลิกการใส่เครื่องหมายความคิดเห็นส่วนหัวของส่วนใน Jail.local และเปลี่ยนบรรทัดที่เปิดใช้งานเป็น "true":


. . .
เปิดใช้งาน = จริง
. . .

ตามค่าเริ่มต้น รองรับเฉพาะบริการ SSH และบริการอื่นๆ ทั้งหมดจะถูกปิดใช้งาน

ส่วนเหล่านี้ใช้ค่าที่ตั้งไว้ในส่วนนั้นเป็นพื้นฐานและปรับเปลี่ยนตามความจำเป็น หากต้องการแทนที่ค่าใด ๆ ให้เพิ่มส่วนสำหรับบริการที่เหมาะสมใน Jail.local และเปลี่ยนค่า

พารามิเตอร์อื่นๆ บางส่วนได้รับการตั้งค่าที่นี่เช่นกัน พารามิเตอร์ตัวกรองช่วยพิจารณาว่าบรรทัดในบันทึกบ่งชี้ว่าความพยายามในการรับรองความถูกต้องล้มเหลวหรือไม่ พารามิเตอร์ logpath จะบอก failed2ban ว่าบันทึกของบริการนั้นอยู่ที่ใด

ค่าของพารามิเตอร์ filter คือลิงก์ไปยังไฟล์ที่มีนามสกุล .conf อยู่ในไดเร็กทอรี /etc/fail2ban/filter.d ไฟล์เหล่านี้ประกอบด้วย การแสดงออกปกติซึ่งกำหนดว่าบรรทัดในบันทึกเป็นข้อความเกี่ยวกับความพยายามตรวจสอบสิทธิ์ที่ล้มเหลว ไฟล์เหล่านี้อยู่นอกเหนือขอบเขตของบทช่วยสอนนี้ เนื่องจากไฟล์เหล่านี้ค่อนข้างซับซ้อนและการตั้งค่าเริ่มต้นก็ใช้ได้ในกรณีส่วนใหญ่

คุณสามารถดูตัวกรองในไดเร็กทอรีนี้:

ls /etc/fail2ban/filter.d

ค้นหาไฟล์ที่เกี่ยวข้องกับบริการที่ต้องการแล้วเปิดด้วย โปรแกรมแก้ไขข้อความ- ไฟล์ส่วนใหญ่ได้รับการแสดงความคิดเห็นค่อนข้างดี และคุณสามารถทำความคุ้นเคยกับสคริปต์การป้องกันบริการได้ ตัวกรองเหล่านี้ส่วนใหญ่มีส่วนที่เกี่ยวข้องในไฟล์ Jail.conf (ปิดใช้งานตามค่าเริ่มต้น) สามารถเปิดใช้งานได้ในไฟล์ Jail.local หากจำเป็น

สมมติว่าคุณมีเว็บไซต์ที่ให้บริการโดยใช้ Nginx บันทึกของเว็บเซิร์ฟเวอร์ได้รับการอัปเดตอย่างต่อเนื่องโดยพยายามเข้าสู่ระบบไม่สำเร็จ ยูทิลิตี failed2ban สามารถใช้ไฟล์ nginx-http-auth.conf เพื่อตรวจสอบ /var/log/nginx/error.log อย่างต่อเนื่อง

พารามิเตอร์เกือบทั้งหมดที่จำเป็นสำหรับสิ่งนี้มีอยู่แล้วในส่วนในไฟล์ /etc/fail2ban/jail.conf คุณเพียงแค่ต้องยกเลิกหมายเหตุส่วนนี้ในไฟล์ Jail.local และตั้งค่าพารามิเตอร์ที่เปิดใช้งานเป็นจริง

. . .
เปิดใช้งาน = จริง
. . .

หลังจากนี้คุณจะต้องรีสตาร์ท Fail2ban

การตั้งค่า Fail2ban

ตอนนี้คุณรู้พื้นฐานการทำงานของ Fail2ban แล้ว ลองตั้งค่านโยบายการบล็อกอัตโนมัติสำหรับบริการ SSH และ Nginx คุณต้องใช้เครื่องมือ Fail2ban เพื่อส่งอีเมลหากที่อยู่ IP ถูกบล็อก

ในการเริ่มต้น ให้ติดตั้งซอฟต์แวร์ที่จำเป็น

คุณจะต้องมี nginx เนื่องจาก failed2ban จะตรวจสอบบันทึกของมัน และ sendmail เพื่อส่งการแจ้งเตือน คุณต้องมีแพ็คเกจ iptables-persistent เพื่อให้เซิร์ฟเวอร์บันทึกและโหลดกฎไฟร์วอลล์โดยอัตโนมัติเมื่อเซิร์ฟเวอร์บูท แพ็คเกจทั้งหมดนี้สามารถดาวน์โหลดได้จากที่เก็บ Ubuntu มาตรฐาน:

อัปเดต sudo apt-get
sudo apt-get ติดตั้ง nginx sendmail iptables-persistent

หยุดบริการ Fail2ban เพื่อตั้งค่าไฟร์วอลล์พื้นฐาน

การตั้งค่าไฟร์วอลล์

ไฟร์วอลล์พื้นฐานต้องรองรับ การเชื่อมต่อที่จัดตั้งขึ้นตลอดจนการรับส่งข้อมูลที่สร้างโดยเซิร์ฟเวอร์เองและการรับส่งข้อมูลที่กำหนดสำหรับพอร์ต SSH และเว็บเซิร์ฟเวอร์ การรับส่งข้อมูลอื่นๆ ทั้งหมดจะถูกปิดกั้น กฎมีลักษณะดังนี้:

sudo iptables -A INPUT -i lo -j ยอมรับ
sudo iptables -A INPUT -m conntrack --ctstate ก่อตั้งขึ้นที่เกี่ยวข้อง -j ยอมรับ
sudo iptables -A INPUT -p tcp --dport 22 -j ยอมรับ
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ยอมรับ
sudo iptables -A อินพุต -j DROP

คำสั่งเหล่านี้ใช้นโยบายข้างต้น หากต้องการดูกฎไฟร์วอลล์ปัจจุบันของคุณ ให้พิมพ์:

sudo iptables -S
-P ยอมรับอินพุต
-P ยอมรับไปข้างหน้า
-P เอาท์พุทยอมรับ
-A อินพุต -i lo -j ยอมรับ




-A อินพุต -j ลดลง

บันทึกกฎไฟร์วอลล์ของคุณเพื่อไม่ให้กฎหายไปหลังจากรีบูต

sudo dpkg- กำหนดค่า iptables ใหม่ - ถาวร

รีสตาร์ท Fail2ban:

บริการ sudo ล้มเหลว 2ban เริ่มต้น

กฎไฟร์วอลล์แบบสอบถาม:

sudo iptables -S
-P ยอมรับอินพุต
-P ยอมรับไปข้างหน้า
-P เอาท์พุทยอมรับ
-N failed2ban-ssh

-A อินพุต -i lo -j ยอมรับ
-A INPUT -m conntrack --ctstate ที่เกี่ยวข้อง ก่อตั้งแล้ว -j ยอมรับ
-A อินพุต -p tcp -m tcp --dport 22 -j ยอมรับ
-A อินพุต -p tcp -m tcp --dport 80 -j ยอมรับ
-A อินพุต -j ลดลง
-A failed2ban-ssh -j กลับมา

ตอนนี้แต่ละเครือข่ายมีนโยบายเริ่มต้นของตัวเอง นอกจากนี้ยังมีกฎพื้นฐานห้าข้อในไฟร์วอลล์ โครงสร้าง Fail2ban จะถูกเน้นด้วยสีแดง: เครื่องมือนี้บังคับใช้กฎการแบน SSH อยู่แล้ว บางครั้งโครงสร้างนี้ไม่แสดงในตอนแรก เนื่องจาก failed2ban อาจไม่เพิ่มโครงสร้างจนกว่าจะมีการแบนครั้งแรก

การตั้งค่า Fail2ban

ตอนนี้คุณต้องเพิ่มการตั้งค่า failed2ban ให้กับไฟล์ Jail.local:

sudo นาโน /etc/fail2ban/jail.local

ที่นี่คุณสามารถกำหนดช่วงเวลาการบล็อกที่เข้มงวดยิ่งขึ้นได้ ค้นหาและยกเลิกการแสดงความคิดเห็นในชื่อ ในส่วนนี้ ให้เปลี่ยนพารามิเตอร์ bantime เพื่อให้บริการบล็อกไคลเอนต์เป็นเวลาครึ่งชั่วโมง:


. . .
แบนไทม์ = 1800
. . .

คุณต้องตั้งค่าการแจ้งเตือนด้วย ขั้นแรก ค้นหาพารามิเตอร์ destemail ซึ่งควรอยู่ในส่วนนี้ด้วย ป้อนที่อยู่อีเมลที่คุณต้องการใช้เพื่อรวบรวมข้อความเหล่านี้:


. . .
ทำลายเมล= [ป้องกันอีเมล]
. . .

ในชื่อผู้ส่ง ให้ระบุค่าที่สะดวก ขอแนะนำให้ใช้ค่าอธิบายที่นี่เพื่อให้บริการอีเมลสามารถกรองออกได้อย่างง่ายดาย

จากนั้นคุณจะต้องแก้ไขคุณค่าของการกระทำ คุณสามารถตั้งค่า action_mw ให้บล็อกไคลเอนต์แล้วส่งรายงาน "whois" ค่า action_mwl จะทำสิ่งเดียวกัน แต่ยังส่งบรรทัดบันทึกที่เกี่ยวข้องในข้อความด้วย


. . .
การกระทำ = %(action_mwl)s
. . .

ในส่วน SSH ของคำสั่ง maxretry คุณสามารถเปลี่ยนจำนวนครั้งในการพยายามตรวจสอบสิทธิ์ที่ล้มเหลวได้ หากคุณกำลังใช้พอร์ตที่ไม่ได้มาตรฐาน (ไม่ใช่ 22) ให้ระบุพอร์ตนั้นในพารามิเตอร์พอร์ต ตามที่ระบุไว้ก่อนหน้านี้ เซิร์ฟเวอร์นี้เปิดใช้งานแล้ว

จากนั้นค้นหาส่วน nginx-http-auth ยกเลิกหมายเหตุส่วนหัวและเปลี่ยนพารามิเตอร์ที่เปิดใช้งานเป็น "จริง"

. . .

เปิดใช้งาน = จริง
. . .

นั่นคือทั้งหมดที่คุณต้องทำในส่วนนี้หากเว็บเซิร์ฟเวอร์ใช้พอร์ตมาตรฐานและบันทึกของเซิร์ฟเวอร์นั้นถูกจัดเก็บไว้ในไดเร็กทอรีมาตรฐาน

รีสตาร์ท Fail2ban

บันทึกและปิดไฟล์

จากนั้นรีสตาร์ทบริการ Fail2ban บางครั้งการหยุดแล้วเริ่มต้นใหม่อีกครั้งก็ยังดีกว่า

บริการ sudo failed2ban หยุด
บริการ sudo failed2ban เริ่มต้น

อาจใช้เวลาสักครู่ในการดาวน์โหลดกฎไฟร์วอลล์ทั้งหมด บางครั้งกฎจะไม่ถูกเพิ่มจนกว่าลูกค้ารายแรกจะถูกบล็อก หลังจากนั้นไม่นาน คุณจะสามารถตรวจสอบกฎใหม่ได้:

sudo iptables -S
-P ยอมรับอินพุต
-P ยอมรับไปข้างหน้า
-P เอาท์พุทยอมรับ
-N failed2ban-nginx-http-auth

-N failed2ban-ssh

-A อินพุต -p tcp -m มัลติพอร์ต --dports 80,443 -j failed2ban-nginx-http-auth


-A อินพุต -p tcp -m มัลติพอร์ต --dports 22 -j failed2ban-ssh

-A อินพุต -i lo -j ยอมรับ
-A INPUT -m conntrack --ctstate ที่เกี่ยวข้อง ก่อตั้งแล้ว -j ยอมรับ
-A อินพุต -p tcp -m tcp --dport 22 -j ยอมรับ
-A อินพุต -p tcp -m tcp --dport 80 -j ยอมรับ
-A อินพุต -j ลดลง
-A failed2ban-nginx-http-auth -j ส่งคืน

-A failed2ban-ssh -j กลับมา

บรรทัดที่สร้างโดยนโยบาย Fail2ban จะถูกเน้นด้วยสีแดง ในตอนนี้ พวกเขาเพียงแค่กำหนดเส้นทางการรับส่งข้อมูลไปยังเครือข่ายใหม่ ซึ่งส่วนใหญ่เป็นเครือข่ายว่าง จากนั้นจึงส่งต่อการไหลของการรับส่งข้อมูลกลับไปยังห่วงโซ่ INPUT

กฎการบล็อกจะถูกเพิ่มในเชนเหล่านี้

การทดสอบนโยบายการบล็อก

ตอนนี้คุณสามารถทดสอบกฎได้โดยการเชื่อมต่อจากเซิร์ฟเวอร์อื่นที่ไม่มีข้อมูลรับรองบนเซิร์ฟเวอร์ Fail2ban

ลองสร้างการเชื่อมต่อ SSH ไปยังเซิร์ฟเวอร์โดยใช้ข้อมูลรับรองที่ไม่มีอยู่จริง:

ssh blah@fail2ban_server_IP

ป้อนชุดอักขระแบบสุ่มเป็นรหัสผ่านของคุณ ทำซ้ำหลายครั้ง เมื่อถึงจุดหนึ่ง failed2ban จะปฏิเสธการเข้าถึงและแสดงข้อความ “Permission ถูกปฏิเสธ”

กลับไปที่เซิร์ฟเวอร์เครื่องแรกและดูกฎ iptables ใหม่:

sudo iptables -S
-P ยอมรับอินพุต
-P ยอมรับไปข้างหน้า
-P เอาท์พุทยอมรับ
-N failed2ban-nginx-http-auth
-N failed2ban-ssh
-A อินพุต -p tcp -m มัลติพอร์ต --dports 80,443 -j failed2ban-nginx-http-auth
-A อินพุต -p tcp -m มัลติพอร์ต --dports 22 -j failed2ban-ssh
-A อินพุต -i lo -j ยอมรับ
-A INPUT -m conntrack --ctstate ที่เกี่ยวข้อง ก่อตั้งแล้ว -j ยอมรับ
-A อินพุต -p tcp -m tcp --dport 22 -j ยอมรับ
-A อินพุต -p tcp -m tcp --dport 80 -j ยอมรับ
-A อินพุต -j ลดลง
-A failed2ban-nginx-http-auth -j ส่งคืน
-A failed2ban-ssh -s 203.0.113.14/32 -j ปฏิเสธ --ปฏิเสธด้วย icmp-port-ไม่สามารถเข้าถึงได้
-A failed2ban-ssh -j กลับมา

กฎใหม่จะเน้นด้วยสีแดง บล็อกการรับส่งข้อมูลจากที่อยู่ IP ของเซิร์ฟเวอร์ตัวที่สองไปยังพอร์ต SSH คุณจะได้รับการแจ้งเตือนในไม่ช้าว่าไคลเอนต์ถูกบล็อก

บทสรุป

ตอนนี้คุณคุ้นเคยกับพื้นฐานของ Fail2ban แล้ว และสามารถสร้างการกำหนดค่าพื้นฐานสำหรับเครื่องมือนี้ได้

Secure Shell สามารถพบได้ทุกที่ นับตั้งแต่เปิดตัวในปี 1995 SSH ได้กลายเป็นโปรโตคอลการเข้าถึงระยะไกลที่ทรงพลังสำหรับ Linux อย่างกว้างขวาง

อย่างไรก็ตาม อย่างที่เราทราบกันดีว่า พลังที่ยิ่งใหญ่มาพร้อมกับความรับผิดชอบที่ยิ่งใหญ่ SSH daemon ที่กำหนดค่าไม่ถูกต้องอาจเป็นภัยคุกคามมากกว่าความช่วยเหลือ ในบทความนี้ เราจะดูห้าขั้นตอนในการเสริมความปลอดภัย SSH

1. ปิดการใช้งานการเข้าสู่ระบบรูท

ขั้นตอนที่ง่ายที่สุด เห็นได้ชัดว่ามีเหตุผลเพียงเล็กน้อยที่จะอนุญาตให้รูทเข้าสู่ระบบผ่าน SSH การปิดใช้งานการเข้าถึงดังกล่าวทำได้ค่อนข้างง่ายและจะปรับปรุงความปลอดภัย

มาหา /etc/ssh/sshd_config กัน (อาจอยู่ในไดเร็กทอรีอื่น ขึ้นอยู่กับการกระจาย) ในนั้นเราจะกำหนดตำแหน่งของ PermitRootLogin และแทนที่ค่าด้วย "ไม่":

หมายเลข PermitRootLogin

แน่นอนว่าสิ่งนี้จะไม่ป้องกันใครก็ตามจากการบุกรุกระบบในฐานะผู้ใช้ทั่วไป แต่จะยังคงทำหน้าที่เป็นอุปสรรคเพิ่มเติมต่อการครอบงำของระบบ

เมื่ออ่านทุกสิ่งที่เขียนไว้ข้างต้นและนำไปปฏิบัติแล้ว ในที่สุดเราจะได้รับคีย์สำหรับการอนุญาตบนเซิร์ฟเวอร์ เมื่อคุณแน่ใจว่าทุกอย่างใช้งานได้แล้ว คุณสามารถปิดใช้งานการป้อนข้อมูลแบบโต้ตอบได้:

รหัสผ่านการตรวจสอบเลขที่
หมายเลข ChallengeResponseAuthentication

การใช้สคริปต์ Python นี้ ผู้ดูแลระบบสามารถเพิ่มโฮสต์ลงในบัญชีดำได้โดยอัตโนมัติ ในกรณีที่เข้าสู่ระบบไม่สำเร็จ และจะแบนโฮสต์ตลอดไป วิธีที่ง่ายที่สุดการตั้งค่า:

ยูโรปา ~ # โผล่ออกมา -pv ปฏิเสธโฮสต์
นี่คือแพ็คเกจที่จะรวมเข้าด้วยกันตามลำดับ:
กำลังคำนวณการพึ่งพา... เสร็จแล้ว!
ผู้ดูแลระบบแอป / ปฏิเสธโฮสต์-2.5 0 kB
ขนาดการดาวน์โหลดทั้งหมด: 0 kB
ยูโรปา ~ # ปรากฏโฮสต์ที่ปฏิเสธ

มีเอกสารประกอบโปรแกรมไม่มากนัก (หากมี เช่น) อย่างไรก็ตาม โดยปกติแล้ว ตัวเลือกการกำหนดค่าทั้งหมดจะอธิบายไว้ในนั้น ไฟล์การกำหนดค่า.

ยูโรปา $ นาโน -w /etc/denyhosts.conf

ฉันไม่คิดว่าการกำหนดค่า DenyHosts จะทำให้เกิดปัญหาพิเศษใดๆ เพียงแค่อ่านการกำหนดค่าอย่างละเอียด

หลังจากกำหนดค่าแล้ว คุณสามารถรันโปรแกรมเป็นดีมอนหรือผ่านตัวกำหนดตารางเวลาได้ ใน Gentoo daemon:

Rc-update เพิ่ม denyhosts เป็นค่าเริ่มต้น

ผ่าน cron พูดทุก ๆ 10 นาที:

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

ความสุขของ DenyHost ไม่เพียงแต่ในการบล็อกโฮสต์ที่พยายามเข้าถึงเซิร์ฟเวอร์ SSH ของคุณเท่านั้น แต่ยังรวมถึงความจริงที่ว่าคุณสามารถซิงโครไนซ์ “บัญชีดำ” ของคุณกับเซิร์ฟเวอร์ DenyHost ได้ ซึ่งจะสร้างรายชื่อโฮสต์โดยรวมที่มีผู้โจมตีทั้งหมด มันจะป้องกันการโจมตีที่ราก

4. เปลี่ยนหมายเลขพอร์ต

ความพยายามในการแฮ็กส่วนใหญ่มาจากสคริปต์อัตโนมัติที่สแกนเครือข่ายเพื่อหา SSH daemons ในกรณีส่วนใหญ่อย่างล้นหลาม พวกเขาพยายามบุกเข้าไปในพอร์ต 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 state --state ใหม่ -m tcp --dport 22 -j ยอมรับ

3. อย่าลืมตรวจสอบว่าเราใช้ ipv6 หรือไม่ หากเป็นเช่นนั้น ให้ปิดอันที่ไม่จำเป็น

$ sudo vi /etc/sysconfig/ip6tables *ตัวกรอง: ยอมรับอินพุต: ยอมรับล่วงหน้า: ยอมรับเอาต์พุต -A อินพุต -m state - สถานะที่จัดตั้งขึ้นที่เกี่ยวข้อง -j ยอมรับ -A อินพุต -p ipv6-icmp -j ยอมรับ -A อินพุต - ฉัน lo -j ยอมรับ -A อินพุต -m state - สถานะใหม่ -m tcp -p tcp --dport 80 -j ยอมรับ -A อินพุต -m state - สถานะใหม่ -m tcp -p tcp --dport 443 -j ยอมรับ -A อินพุต -j ปฏิเสธ --ปฏิเสธด้วย icmp6-adm-ห้าม -A ส่งต่อ -j ปฏิเสธ --ปฏิเสธด้วย icmp6-adm-ห้าม COMMIT

หากต้องการใช้ ssh เฉพาะกับที่อยู่ที่ระบุ ก็เพียงพอแล้วในไฟล์การกำหนดค่า sshd_configระบุพารามิเตอร์ ListenAddress(เช่น ListenAddress 74.125.200.100) ในกรณีนี้ ssh จะใช้ได้เฉพาะกับที่อยู่นี้และจะไม่ทำงานผ่าน ipv6

4. ใช้ไฟล์การกำหนดค่า ssh บนฝั่งไคลเอ็นต์

ที่ตั้ง: ~/.ssh/config

# แก้ไขการเขียนล้มเหลว: ไปป์ที่ใช้งานไม่ได้ ServerAliveInterval 120 TCPKeepAlive no # เพื่อใช้ชื่อย่อ Host dev-vps # ที่อยู่ ip หรือสาธารณะ ชื่อโดเมนโฮสต์ ชื่อโฮสต์ 127.0.0.3 # ภายใต้ผู้ใช้ที่จะเข้าสู่ระบบ ผู้พัฒนาผู้ใช้ # ไฟล์คีย์สำหรับการอนุญาต (ถ้าใช้) IdentityFile ~/.ssh/id_rsa.dev

และอีกตัวอย่างหนึ่งของการใช้ไฟล์กำหนดค่า:
{<1>}

โฮสต์ ssh-server-1 ชื่อโฮสต์ 1.2.3.4 ผู้ใช้ dev พอร์ต 1234 โฮสต์ ssh-server-2 ผู้ใช้ root # ชื่อโฮสต์ 192.168.10.20 # nc โดยไม่มี -q0 ถ้าใช้ RHEL & ด้วย -q0 debian ที่ใช้ IdentityFile ~/.ssh/id_rsa.work -pc ProxyCommand ssh -q0 ssh-เซิร์ฟเวอร์-1 nc -q0 192.168.10.20 22

และตอนนี้เมื่อเชื่อมต่อกับ ssh-server-1 เราจะข้ามไปยังโฮสต์ที่เราต้องการทันที (สะดวกในการใช้งาน เช่น มีคีย์ต่างกันบนเซิร์ฟเวอร์)

และยัง ฮิปสเตอร์ตัวเลือกพร็อกซี:

{<2>}

ดาวน์โหลดไคลเอนต์ ngrok ไปยังเซิร์ฟเวอร์ซึ่งอยู่ด้านหลังไฟร์วอลล์ เราเปิดตัวไบนารี่และระบุพอร์ตที่เราต้องส่งต่อ

สสสเป็นโปรโตคอลที่ใช้เพื่อความปลอดภัยและการเข้ารหัสของการส่งข้อมูลบนเครือข่าย มีการใช้กันอย่างแพร่หลายในแวดวง ลินุกซ์ผู้ดูแลระบบเพื่อจัดการเซิร์ฟเวอร์ระยะไกล การเชื่อมต่อเซิร์ฟเวอร์กับอินเทอร์เน็ตมักถูกโจมตีโดยบริการ SSH เพื่อเข้าถึงเซิร์ฟเวอร์ ที่พบบ่อยที่สุดคือการเดารหัสผ่านของผู้ใช้ที่มีสิทธิ์ของผู้ดูแลระบบ ในคู่มือนี้เราจะดูคำแนะนำด้านความปลอดภัยขั้นพื้นฐาน สสสการเชื่อมต่อ

ตั้งรหัสผ่านที่ซับซ้อน

เซิร์ฟเวอร์ของคุณอาจถูกโจมตีจากผู้โจมตีที่พยายามเดารหัสผ่านเซิร์ฟเวอร์โดยใช้ สสสเพื่อลดความเสี่ยงของการแฮ็ก เราแนะนำให้ตั้งรหัสผ่านสำหรับบัญชีเซิร์ฟเวอร์ที่สอดคล้องกับพารามิเตอร์ต่อไปนี้:

  • อย่างน้อย 8 ตัวอักษร
  • ใช้อักขระตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก (AaBb)
  • ใช้ตัวอักษร-ตัวเลขและเครื่องหมาย (!BasDf345$@)

รหัสผ่านที่รัดกุมจะไม่เพียงป้องกันการแฮ็กเท่านั้น สสสโปรโตคอล แต่โดยทั่วไปจะปรับปรุงความปลอดภัยของเซิร์ฟเวอร์

ใช้คีย์ SSH

การป้องกันเพิ่มเติมสำหรับเซิร์ฟเวอร์ของคุณคือการใช้คีย์เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ผ่าน สสสคุณต้องสร้างคีย์บนคอมพิวเตอร์/เซิร์ฟเวอร์ที่คุณจะเชื่อมต่อ:

วิธีการสร้าง สสสคีย์บน ระบบปฏิบัติการวินโดวส์:

เพื่อสร้างคีย์เข้า ลินุกซ์พิมพ์คำสั่ง:

Ssh-keygen -t rsa

หากต้องการติดตั้งคีย์นี้บนเซิร์ฟเวอร์ที่คุณจะเชื่อมต่อ ให้พิมพ์คำสั่ง:

Ssh-copy-id -p 22 [ป้องกันอีเมล]

  • -หน้า 22- พอร์ตเซิร์ฟเวอร์ที่ใช้งานได้ สสสโปรโตคอล (อาจมีการเปลี่ยนแปลง ข้อมูลเพิ่มเติมด้านล่าง)
  • ผู้ดูแลระบบ- เข้าสู่ระบบจากเซิร์ฟเวอร์ของคุณ
  • 192.168.1.1 - ที่อยู่ IP ของเซิร์ฟเวอร์ของคุณ

หากคุณทำทุกอย่างถูกต้อง ตอนนี้คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์โดยใช้รหัสได้ และคุณไม่จำเป็นต้องป้อนรหัสผ่านทุกครั้ง

ใช้พอร์ตที่ไม่ได้มาตรฐาน

มาตรฐาน สสสบริการที่ทำงานบนเซิร์ฟเวอร์รับฟัง 22 ท่าเรือในการเชื่อมต่อ/ถ่ายโอนข้อมูล ผู้โจมตีสามารถใช้ประโยชน์จากสิ่งนี้ได้ โดยอาศัยความจริงที่ว่าผู้ใช้ส่วนใหญ่ไม่เปลี่ยนพอร์ตมาตรฐานสำหรับการเชื่อมต่อกับเซิร์ฟเวอร์ ดังนั้นเราจะเปลี่ยนพอร์ตซึ่งจะช่วยลดความเสี่ยงที่เซิร์ฟเวอร์ของเราจะถูกแฮ็กอีกครั้ง

เมื่อต้องการทำเช่นนี้ ให้เปิดไฟล์การกำหนดค่า สสสบนเซิร์ฟเวอร์:

Sudo นาโน /etc/ssh/sshd_config.php

เรามาค้นหาบรรทัดแสดงความคิดเห็นดังนี้:

#พอร์ต22

ลบสัญลักษณ์ # - เพื่อลบตัวเลือกความคิดเห็นและเปลี่ยนแปลง 22 ไปจนถึงตัวเลขใดๆ ที่เริ่มต้นจาก 11060 และในลำดับที่เพิ่มขึ้น เช่น เราจะใช้ 11 060 ตอนนี้บรรทัดควรมีลักษณะดังนี้:

พอร์ต 11060

บันทึกการกำหนดค่า" Ctrl+โอ"และออกจากตัวแก้ไข" Ctrl+เอ็กซ์".

จำเป็นต้องรีบูต สสสบริการ - เพื่อยอมรับการตั้งค่าใหม่ ให้รันคำสั่ง:

บริการ Sudo sshd รีสตาร์ท

ดังนั้นเราจึงเปลี่ยนพอร์ตการเชื่อมต่อจากนี้ไป - เพื่อเชื่อมต่อกับเซิร์ฟเวอร์คุณต้องระบุพอร์ตที่ไม่ได้มาตรฐานพร้อมตัวเลือก -พี 11060 , ตัวอย่างเช่น:

Ssh -p 11060 [ป้องกันอีเมล]

จำกัดการเข้าถึงเฉพาะผู้ใช้บางส่วนเท่านั้น

สสสการเชื่อมต่อสามารถจำกัดได้สำหรับแต่ละบัญชี ตัวอย่างเช่น หากมีสามบัญชีบนเซิร์ฟเวอร์: ผู้ดูแลระบบ , เซอร์เกย์ , อเล็กซ์- คุณมีโอกาสที่จะอนุญาต การเชื่อมต่อระยะไกลสำหรับบางคนเท่านั้น เมื่อต้องการทำเช่นนี้ ให้เปิดไฟล์การกำหนดค่า สสส:

ในไฟล์นี้ ให้ใช้ลูกศรเพื่อลงไปที่บรรทัดสุดท้ายและเพิ่มบรรทัดใหม่ที่มีเนื้อหาดังต่อไปนี้:

อนุญาตผู้ใช้ผู้ดูแลระบบ alex

บันทึกการกำหนดค่า" Ctrl+โอ"และออกจากตัวแก้ไข" Ctrl+เอ็กซ์".

เริ่มบริการใหม่ สสส:

บริการ Sudo sshd รีสตาร์ท

เท่านี้คุณก็อนุญาตแล้ว การเข้าถึงระยะไกลสำหรับผู้ใช้ ผู้ดูแลระบบและ อเล็กซ์ในขณะที่ผู้ใช้ เซอร์เกย์จะไม่สามารถเชื่อมต่อระยะไกลได้อีกต่อไป

เปิดใช้งานโปรโตคอล SSH 2

ตามมาตรฐาน สสสทำงานในโหมดเวอร์ชัน 1 เวอร์ชันนี้ล้าสมัยและมีช่องโหว่มากมายแต่รับรองว่า ความปลอดภัยที่ดีขึ้นเราขอแนะนำให้เปลี่ยนไปใช้โหมดเวอร์ชัน 2 โดยเปิดไฟล์การกำหนดค่า สสส:

Sudo นาโน /etc/ssh/ssh_config.php

ค้นหาบรรทัด:

# พิธีสาร 2

ลบตัวละคร # - หากต้องการลบตัวเลือกความคิดเห็นและใช้บรรทัดนี้ ควรมีลักษณะดังนี้:

พิธีสาร 2

บันทึกการกำหนดค่า" Ctrl+โอ"และออกจากตัวแก้ไข" Ctrl+เอ็กซ์".

เริ่มบริการใหม่ สสส:

บริการ Sudo sshd รีสตาร์ท

ปิดการใช้งานรหัสผ่านที่ว่างเปล่า

ค่าเริ่มต้น สสสบริการนี้ห้ามไม่ให้ผู้ใช้ที่ไม่มีรหัสผ่านเชื่อมต่อ แต่ตัวเลือกนี้อาจถูกปิดใช้งานบนเซิร์ฟเวอร์ของคุณ ดังนั้นให้เปิดไฟล์การกำหนดค่า สสส:

Sudo นาโน /etc/ssh/ssh_config.php

หาเส้น อนุญาตให้ว่างเปล่ารหัสผ่านและตรวจสอบให้แน่ใจว่ามีค่าอยู่ "เลขที่".

อนุญาตให้เว้นว่างรหัสผ่านหมายเลข

เปิดใช้งานการบันทึกแบบละเอียด

เพื่อการบริการ สสสเก็บบันทึกการเชื่อมต่อที่ไม่สำเร็จซึ่งระบุที่อยู่ IP เปิดไฟล์การกำหนดค่า สสส:

Sudo นาโน /etc/ssh/ssh_config.php

หาเส้น ระดับบันทึกและแทน ข้อมูลโปรดระบุ ละเอียดเส้นควรมีลักษณะดังนี้:

LogLevel VERBOSE

บันทึกไฟล์" Ctrl+โอ" และออกจากตัวแก้ไข " Ctrl+เอ็กซ์".

เริ่มบริการใหม่ สสส:

บริการ Sudo sshd รีสตาร์ท

คุณสามารถตรวจสอบได้โดยป้อนคำสั่ง:

แมว /var/log/secure

ระบบจะให้ข้อมูลบางอย่างแก่เราดังนี้:

21 มิ.ย. 13:06:28 centos sshd: รหัสผ่านล้มเหลวสำหรับรูทจาก 118.212.143.47 พอร์ต 48263 ssh2

คือจากบันทึกนี้เราเห็นว่ามี ความพยายามที่ไม่สำเร็จเจาะเข้าสู่เซิร์ฟเวอร์จากที่อยู่ที่ระบุ

ขอบคุณสำหรับความสนใจของคุณนั่นคือทั้งหมดที่

ในบันทึกสั้นๆ นี้ ฉันได้รวบรวมวิธีต่างๆ ในการเพิ่มความปลอดภัยของเซิร์ฟเวอร์ ssh มีการอธิบายเทคนิคขั้นพื้นฐานและง่ายที่สุดในการดำเนินการ และเทคนิคที่ซับซ้อนกว่านั้นมีไว้สำหรับผู้อ่านที่สนใจเท่านั้น

เทคนิคพื้นฐาน

การดำเนินการทั้งหมดจะดำเนินการในไฟล์การกำหนดค่า sshd daemon - /etc/ssh/sshd_config ด้านล่างนี้ฉันจะให้ส่วนหนึ่งของไฟล์การกำหนดค่าของฉันพร้อมความคิดเห็น

### เครือข่าย ### # เราใช้พอร์ตที่ไม่ได้มาตรฐาน (>1024) พอร์ต 5679 # เราใช้เฉพาะการเชื่อมต่อ IPv4 # inet = IPv4, inet6 = IPv6, any = ทั้งสอง AddressFamily inet # คุณสามารถยอมรับการเชื่อมต่อจาก IP ที่แน่นอนเท่านั้น ที่อยู่ #ListenAddress 0.0.0.0 # เราใช้โปรโตคอลเวอร์ชันที่สองเพราะว่า อันแรกอยู่ภายใต้ช่องโหว่ # โปรโตคอลที่รู้จัก 2 # ปิดการใช้งานการเปลี่ยนเส้นทางกราฟิก (เซิร์ฟเวอร์ X) จนกระทั่ง # คุณต้องการมันอย่างชัดเจน X11 ไม่มีการส่งต่อ # ปิดการใช้งาน TCPKeepAlive และใช้ ClientAliveInterval แทน # เพื่อป้องกันการโจมตีเช่น TCP Spoofing TCPKeepAlive no # เตะผู้ใช้หลังจาก 10 นาที ( 600 วินาที) ของการไม่มีการใช้งาน ClientAliveInterval 600 ClientAliveCountMax 3 ### ไฟล์การกำหนดค่าคีย์ ### # HostKeys สำหรับโปรโตคอลเวอร์ชัน 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key # ใช้กระบวนการที่ไม่มีสิทธิพิเศษเพื่อ # ประมวลผลขาเข้าจากไคลเอ็นต์ Traffic # Sandbox - openSSH >= 5.9 ("ใช่" - สำหรับเวอร์ชันที่ต่ำกว่า) UsePrivilegeSeparation Sandbox # เมื่อค่าเหล่านี้เปลี่ยนแปลงจะต้องลบออก กุญแจเก่า# /etc/ssh/ssh_host_rsa_key(,.pub) และสร้างใหม่โดย # รีสตาร์ท sshd # # อายุการใช้งานที่สำคัญ เช่น จะต้องใช้เวลานานเท่าใดจึงจะถูกสร้างขึ้น? รหัสใหม่#กรณีใช้อันเดิม. KeyRemodelInterval 1h # ความแรงของคีย์ ServerKeyBits 2048 # อนุญาตการอนุญาตโดยใช้คีย์สาธารณะ PubkeyAuthentication ใช่ # ตำแหน่งที่เก็บข้อมูลของคีย์ที่เชื่อถือได้ในไดเร็กทอรีผู้ใช้ AuthorizedKeysFile .ssh/authorized_keys ### การบันทึก ### # คำนำหน้าสำหรับ syslog SyslogFacility AUTH # ระดับรายละเอียดข้อความสำหรับ sshd ข้อมูล LogLevel ของตัวเอง ### การตรวจสอบสิทธิ์ ### # รายชื่อผู้ใช้ที่อนุญาต AllowUsers ivan # จำกัด เวลาในการป้อนรหัสผ่านสำหรับคีย์ ssh LoginGraceTime 30s # ห้ามการเข้าสู่ระบบระยะไกล บัญชี root PermitRootLogin no # เปิดใช้งานการตรวจสอบสิทธิ์ของไฟล์และไดเร็กทอรีอย่างชัดเจนด้วยคีย์ ssh StrictModes ใช่ # กี่ครั้งที่จะถามรหัสผ่านอีกครั้งหากป้อน MaxAuthTries ไม่ถูกต้อง 3 # ห้ามเข้าสู่ระบบด้วยรหัสผ่านที่ว่างเปล่า PermitEmptyPasswords no # ห้ามเข้าสู่ระบบด้วยรหัสผ่านใน หลักการ # (ใช้รหัสสาธารณะ/ส่วนตัวแทนสิ่งนี้) หมายเลขการตรวจสอบรหัสผ่าน # ปิดการใช้งานการอนุญาต "ตอบสนองความท้าทาย" # เพราะ มันไม่มีประโยชน์เมื่อใช้คีย์ ChallengeResponseAuthentication no # เนื่องจากเราไม่ใช้รหัสผ่าน เราจึงไม่จำเป็นต้องใช้ (PAM, ล็อกอิน (1)) UsePAM no UseLogin no # อนุญาตให้ไคลเอ็นต์ส่งผ่านตัวแปรสภาพแวดล้อมบางชุดเท่านั้น # RH BZ # CVE-2014-2532 # การใช้ประโยชน์จาก ShellShock AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL

เหล่านี้เป็นพารามิเตอร์ที่ได้รับการกำหนดค่าในไฟล์การกำหนดค่า 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:

การรับรองความถูกต้องปลายทาง ( file("/var/log/auth.log"); ); เข้าสู่ระบบ ( แหล่งที่มา (src); ปลายทาง (รับรองความถูกต้อง); );

  • และรีสตาร์ทบริการ syslog-ng
    หากคุณใช้พอร์ตที่ไม่ได้มาตรฐาน คุณอาจต้องกำหนดค่าไฟร์วอลล์ของคุณ (iptables, firewalld ฯลฯ)ตัวอย่าง
การตั้งค่าสำหรับ iptables:

root# iptables -A INPUT -p tcp -m state --state ใหม่, สร้างขึ้น --dport 5679 -j ยอมรับ root# บริการ iptables บันทึก root# iptables -L -n Chain INPUT (ยอมรับนโยบาย) เป้าหมาย prot เลือกต้นทางปลายทาง ยอมรับ icmp -- 0.0.0.0/0 0.0.0.0/0 ยอมรับ tcp -- 0.0.0.0/0 0.0.0.0/0 สถานะ ใหม่ tcp dpt:22 ยอมรับ tcp -- 0.0.0.0/0 0.0.0.0/0 สถานะ ใหม่ tcp dpt :80 ยอมรับ tcp -- 0.0.0.0/0 0.0.0.0/0 สถานะ ใหม่ ก่อตั้งแล้ว tcp dpt:5679 ...

หากนั่นยังไม่พอ มันเป็นเพียงการตั้งค่าพื้นฐาน

  • - นอกจากนี้ คุณยังสามารถกำหนดค่าได้