เพื่อปกป้องเซิร์ฟเวอร์ของเราจากการบังคับใช้รหัสผ่านอย่างดุร้าย คุณสามารถใช้ยูทิลิตี้ sshguard หรือ sshit
หลักการทำงาน.
sshguard และ sshit ทำงานบนหลักการเดียวกัน พวกเขาวิเคราะห์ข้อความของระบบเกี่ยวกับการรับรองความถูกต้องที่ไม่ถูกต้อง และหากถึงค่าที่กำหนด ให้ป้อน IP โจมตีลงในกฎไฟร์วอลล์ที่บล็อก หลังจากช่วงระยะเวลาหนึ่ง IP จะถูกลบออกจากกฎ
ดังนั้นจึงจำเป็นต้องมีไฟร์วอลล์ที่กำหนดค่าไว้เพื่อดำเนินการ
SSHGuard
sshguard สามารถทำงานร่วมกับ
- ไฟร์วอลล์เนทิฟ AIX- สำหรับระบบปฏิบัติการ IBM AIX
- netfilter/iptables- สำหรับระบบปฏิบัติการบน Linux
- ตัวกรองแพ็คเก็ต (PF)- สำหรับระบบปฏิบัติการ BSD (เปิด, ฟรี, Net, DragonFly -BSD)
- ไอพีไฟร์วอลล์ (IPFW)- สำหรับ FreeBSD และ Mac OS X
- ไอพีฟิลเตอร์ (IPFILTER)- สำหรับ FreeBSD, NetBSD และ Solaris
- hosts_access ของ tcpd (/etc/hosts.allow)- พกพาข้าม UNIX
- โมฆะ- แบ็กเอนด์แบบพกพาที่ไม่ต้องทำอะไรเลยเพื่อใช้การตรวจจับ แต่ไม่ใช่การป้องกัน
ฉันใช้ PF ดังนั้นจึงมีตัวอย่างใน PF ในบันทึกนี้
กำลังติดตั้ง sshguard
ฟรีBSD:
ติดตั้งจากพอร์ต
Cd /usr/ports/security/sshguard-pf/&& ทำให้การติดตั้งสะอาด
หากคุณไม่ได้ใช้พอร์ตด้วยเหตุผลบางประการ ให้ดาวน์โหลดเวอร์ชันล่าสุดจากเว็บไซต์ sshguard และสร้างด้วยตนเอง
./configure --with-firewall=pf && ทำ && ทำการติดตั้ง
เดเบียน:
apt-get ติดตั้ง sshguardการกำหนดค่าระบบปฏิบัติการเพื่อรัน sshguard
สร้างไฟล์เพื่อจัดเก็บบันทึก
# touch /var/log/sshguard
เดเบียน (เสียงฮืด ๆ):
แก้ไขบรรทัดต่อไปนี้ใน //etc/default/sshguard
#mcedit /etc/default/sshguard #ARGS="-a 40 -p 420 -s 1200" ARGS="-a 5 -p 420 -s 2400 -b 5:/etc/sshguard/blacklist"
และรีสตาร์ท sshguard
บริการ sshguard เริ่มต้นใหม่
ฟรีBSD:
เราจำเป็นต้องเพิ่มสองบรรทัดในการกำหนดค่า PF
โต๊ะ
เราประกาศตารางที่ sshguard เข้าสู่ IP ของโรบ็อต
บล็อกอย่างรวดเร็วด้วย $if0 proto tcp จาก
จริงๆ แล้ว กฎการบล็อกควรถูกทำเครื่องหมายไว้ที่ด้านบนสุดของบล็อกกฎของไฟล์การกำหนดค่า PF $if0 เป็นอินเทอร์เฟซที่การเชื่อมต่อจะถูกบล็อก หากต้องการบล็อกบนอินเทอร์เฟซทั้งหมด ให้แทนที่ด้วยอินเทอร์เฟซใด ๆ
อ่านไฟล์การกำหนดค่าอีกครั้ง
Auth.info;authpriv.info |exec/usr/local/sbin/sshguard
และรีสตาร์ท syslog
#/etc/rc.d/syslogd รีสตาร์ท
ที่จริงแล้วหลังจากการยักย้ายเหล่านี้ sshguard จะบล็อกการโจมตีด้วยพารามิเตอร์เริ่มต้น
เมื่อโจมตีเข้ามา. /var/log/auth.logเราจะเห็นสิ่งต่อไปนี้
Jun1611:01:40 www sshd:การทดสอบผู้ใช้ไม่ถูกต้องจาก61.172.251.183 Jun1612:29:48 www sshd:การทดสอบผู้ใช้ไม่ถูกต้องจาก85.114.130.168 Jun1612:29:49 www sshd:การทดสอบผู้ใช้ไม่ถูกต้องจาก85.114.130.168 Jun1612: 29: 49 www sshd: การทดสอบผู้ใช้ไม่ถูกต้องจาก 85.114.130.168Jun1612:29:50 www sshd: การทดสอบผู้ใช้ไม่ถูกต้องจาก 85.114.130.168Jun1612:29:50 www sshguard: Blocking85.114.130.168:4for>420secs:4 ล้มเหลวมากกว่า 2 วินาที
การกำหนดค่าตัวเลือก sshguard
sshguard มีพารามิเตอร์จำนวนหนึ่งที่เราสามารถแทนที่ได้
-กจำนวนครั้งในการพยายามตรวจสอบสิทธิ์ที่ล้มเหลว หลังจากนั้น IP จะถูกบล็อก ค่าเริ่มต้นคือ 4
-พีหลังจากผ่านไปกี่วินาที ip จะถูกปลดบล็อก ค่าเริ่มต้นคือ 420
-ส sshguard จำ ip ได้กี่วินาที ค่าเริ่มต้นคือ 1200 เพื่อให้ชัดเจนยิ่งขึ้น หากมีการโจมตีหนึ่งครั้งจาก IP ทุก 30 นาที IP จะไม่ถูกแบนด้วยการตั้งค่าเริ่มต้น
-ว IP สีขาว เครือข่าย หรือเส้นทางไปยังไฟล์ที่อยู่สีขาว รูปแบบไฟล์เป็นหนึ่งบรรทัด - หนึ่งรายการ # กำหนดความคิดเห็น
-ขกำหนดจำนวนบล็อก IP ที่จะเพิ่มลงในบัญชีดำและเส้นทางไปยังรายการนั้น บัญชีดำจะถูกโหลดเมื่อ sshguard เริ่มทำงาน และจะไม่ถูกล้างโดยอัตโนมัติ
sshguard ไม่มีไฟล์กำหนดค่า พารามิเตอร์ถูกตั้งค่าเมื่อ sshguard เริ่มทำงาน ในกรณีของเรา sshguard จะเริ่ม syslog ดังนั้นเราจะแก้ไข syslog.conf เพื่อให้ sshguard บล็อก IP หลังจากพยายามตรวจสอบสิทธิ์ไม่สำเร็จ 3 ครั้งเป็นเวลา 30 นาที และหลังจาก 5 บล็อก ให้ขึ้นบัญชีดำ
Auth.info;authpriv.info |exec/usr/local/sbin/sshguard -a 3-p 1500-b 5:/usr/local/etc/sshguard.blacklist
ครั้งแรกที่ถูกบล็อคเป็นเวลา 420 วินาที และถูกลบหลังจากผ่านไป 7 นาที
ครั้งที่สองที่ 2*420y จะถูกลบหลังจาก 14 นาที
ครั้งที่สามที่ 2*2*420 แล้วลบหลังผ่านไป 28 นาที ฯลฯ...
2^(N-1)*420 ครั้งที่ N
เหี้ย
Sshit เป็นสคริปต์ Perl ดังนั้นจึงจำเป็นที่ระบบจะต้องมี Perl เช่นเดียวกับ 2 โมดูล
- IPC::แชร์ได้
- Proc::PID::ไฟล์
Sshit ใช้งานได้กับ pf และ ipfw เท่านั้น
กำลังติดตั้งเหี้ยๆ
cd /usr/ports/security/sshit/&& ทำให้การติดตั้งสะอาดการกำหนดค่าเหี้ยๆ
Sshit มีไฟล์การกำหนดค่า /usr/local/etc/sshit.conf ซึ่งคุณสามารถแทนที่ค่าเริ่มต้นได้
FIREWALL_TYPE = "pf"; # ไฟร์วอลล์ใดที่เราใช้ MAX_COUNT =3; # จำนวนความพยายามในการรับรองความถูกต้องที่ล้มเหลวหลังจากที่ IP ถูกบล็อกภายใน_TIME =60; # ภายในกี่วินาที จำนวนการตรวจสอบสิทธิ์ที่ล้มเหลวที่ระบุจะต้องเกิดขึ้น RESET_IP =300; # หลังจากผ่านไปกี่วินาที IP จะถูกปลดบล็อก PFCTL_CMD = "/sbin/pfctl"; PF_TABLE ="badhosts"#table name ที่มีการป้อน ips ที่ไม่ถูกต้อง
การตั้งค่าระบบปฏิบัติการเพื่อให้ shit ทำงานได้
โดยการเปรียบเทียบกับการตั้งค่าสำหรับ sshguard เราจะแก้ไขไฟล์การกำหนดค่า PF
โต๊ะ
อ่านไฟล์การกำหนดค่าอีกครั้ง
#pfctl -f /etc/pf.conf
การแก้ไข syslog.conf
Auth.info;authpriv.info |exec/usr/local/sbin/sshit
และรีสตาร์ท syslog
SSH เป็นโปรโตคอลที่ปลอดภัยสำหรับการถ่ายโอนข้อมูล (คำสั่ง ไฟล์ วิดีโอ ฯลฯ) ระหว่างคอมพิวเตอร์
มันถูกเปิดใช้งานตามค่าเริ่มต้นบน VPS และเซิร์ฟเวอร์เฉพาะของผู้ให้บริการโฮสติ้งส่วนใหญ่ เนื่องจากช่วยให้คุณจัดการเครื่องระยะไกลได้อย่างง่ายดายและปลอดภัย อย่างไรก็ตาม คุณสามารถเช่าเซิร์ฟเวอร์ VPS บนบริการ Well-Web ได้ในราคาไม่แพง เนื่องจากเปิดใช้งาน SSH บน VPS ทั้งหมด เพื่อหลีกเลี่ยงปัญหาเมื่อใช้ Secure Shell จึงจำเป็นต้องมีการป้องกัน SSH ที่เหมาะสม
ปิดการใช้งานการเข้าถึงจากรูท
ก่อนอื่น ขอแนะนำให้ปิดการใช้งานความสามารถในการเชื่อมต่อกับเครื่องจากระยะไกลภายใต้บัญชี superuser (รูท) ในการดำเนินการนี้ คุณต้องค้นหาไฟล์ sshd_config ซึ่งโดยปกติ (แต่ไม่เสมอไป) จะอยู่ในไดเร็กทอรี /etc/ssh/ แล้วเปิดขึ้นมา
ในนั้นคุณจะต้องค้นหารายการ PermitRootLogin และแทนที่ค่าด้วย "ไม่" นั่นคือคุณควรได้รับรายการต่อไปนี้:
หมายเลข PermitRootLogin
โดยปกติแล้ว สิ่งนี้จะไม่ป้องกันการแฮ็ก แต่ก็ยังทำให้ยากขึ้นบ้าง
เพื่อลดความเป็นไปได้ของการแฮ็ก ขอแนะนำให้ใช้การอนุญาตโดยใช้คีย์แทนการอนุญาตการเข้าสู่ระบบและรหัสผ่าน ซึ่งสามารถทำได้หลายวิธี นี่เป็นการป้องกัน SSH ที่ดีต่อการใช้กำลังดุร้ายด้วย
การเปลี่ยนพอร์ตเริ่มต้น
เนื่องจากการแฮ็กเซิร์ฟเวอร์ผ่าน SSH มักเกิดขึ้นผ่านการค้นหารหัสผ่าน (กำลังดุร้าย) จึงมีเหตุผลที่จะเปลี่ยนพอร์ตมาตรฐาน 22 เป็นพอร์ตอื่น นี่เป็นเรื่องง่ายมากที่จะทำ ก่อนอื่นคุณต้องเปิดไฟล์ sshd_config ที่กล่าวถึงแล้วและเพิ่มหนึ่งบรรทัดที่นั่น:
พอร์ต port_number
รายการจะมีลักษณะเช่นนี้:
พอร์ต 3048วิธีนี้จะช่วยลดจำนวนผู้ที่ต้องการเข้าถึงเซิร์ฟเวอร์โดยไม่ได้รับอนุญาตได้อย่างมาก ก่อนเปลี่ยนหมายเลขพอร์ต ตรวจสอบให้แน่ใจว่าหมายเลขพอร์ตจะไม่รบกวนการทำงานของแอปพลิเคชันอื่นๆ คุณต้องเลือกพอร์ตที่ยังไม่ได้ใช้งานเพื่อให้โปรแกรมไม่ขัดแย้งกันเพราะเหตุนี้
ข้อ จำกัด การเข้าถึง IP
วิธีการป้องกันอีกวิธีหนึ่งที่จะลดโอกาสของการเชื่อมต่อโดยไม่ได้รับอนุญาตจนเกือบเป็นศูนย์คือการตั้งค่าข้อจำกัดการอนุญาต สามารถกำหนดค่า SSH ในลักษณะที่ให้เฉพาะเครื่องระยะไกลที่มีที่อยู่ IP เฉพาะเท่านั้นที่สามารถเข้าสู่ระบบเซิร์ฟเวอร์ได้ ในการดำเนินการนี้ในไฟล์ sshd_config ในบรรทัด AllowUser คุณจะต้องเพิ่ม @IP_number ในชื่อผู้ใช้แต่ละคน รายการอาจมีลักษณะดังนี้:
อนุญาตผู้ใช้ [ป้องกันอีเมล], [ป้องกันอีเมล]
ก่อนที่จะใช้วิธีนี้ ขอแนะนำให้ตรวจสอบให้แน่ใจว่าไม่มีสถานการณ์ที่คุณอาจต้องเข้าสู่ระบบเซิร์ฟเวอร์จากเครื่องที่การกำหนดค่าไม่ได้ระบุที่อยู่ IP
รหัสผ่านที่ปลอดภัย
และแน่นอนว่าคุณควรใช้รหัสผ่านที่ทนทานต่อการใช้กำลังดุร้าย ยาวและมีสัญลักษณ์ที่แตกต่างกันมากที่สุดเท่าที่จะเป็นไปได้ โดยเฉพาะอย่างยิ่งกับ krakozyabrs นี่เป็นสิ่งที่ต้องมี
OpenSSHช่วยให้คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์จากระยะไกล จัดการไฟล์ และจัดการระบบ วันนี้เราต้องการพูดคุยเกี่ยวกับวิธีที่ดีที่สุดที่จะเพิ่มความปลอดภัยของระบบที่ใช้ OpenSSH
ไฟล์การกำหนดค่า
- /etc/ssh/sshd_config.php- ไฟล์กำหนดค่าเซิร์ฟเวอร์ OpenSSH;
- /etc/ssh/ssh_config.php- ไฟล์การกำหนดค่าไคลเอนต์ OpenSSH;
- ~/.ssh/- ไดเร็กทอรีที่เก็บการตั้งค่า SSH ของผู้ใช้
- ~/.ssh/authorized_keys หรือ ~/.ssh/authorized_keys- รายการคีย์ (RSA หรือ DSA) ที่ใช้เชื่อมต่อกับบัญชีผู้ใช้
- /etc/nologin- หากไฟล์นี้มีอยู่ในระบบ sshd จะห้ามผู้ใช้ทั้งหมดยกเว้นรูทไม่ให้เชื่อมต่อกับระบบ
- /etc/hosts.allow และ /etc/hosts.deny- ระบบห้าม (ส่วนหนึ่งของการรักษาความปลอดภัย) ทำงานคล้ายกับ ACL;
- พอร์ต SSH เริ่มต้น - 22
ไม่จำเป็น - ปิดมัน
หากเซิร์ฟเวอร์ของคุณไม่ต้องการการเชื่อมต่อ SSH ระยะไกล อย่าลืมปิดการใช้งานแล้ว ในระบบเช่น CentOS/RHEL จะทำดังนี้:
Chkconfig sshd ปิด yum ลบ openssh-server
ใช้ SSH เวอร์ชัน 2
โปรโตคอล SSH เวอร์ชันแรกมีปัญหาด้านความปลอดภัยซึ่งได้รับการแก้ไขในเวอร์ชันที่สอง ดังนั้นให้ใช้เวอร์ชันที่สอง ตรวจสอบให้แน่ใจว่าได้ระบุตัวเลือก Protocol 2 ในไฟล์ /etc/ssh/sshd_config
จำกัดการเข้าถึง SSH
ตามค่าเริ่มต้น ผู้ใช้ระบบทั้งหมดสามารถเชื่อมต่อกับระบบผ่าน SSH ได้ เราขอแนะนำให้จำกัดการเข้าถึง SSH ด้วยเหตุผลด้านความปลอดภัย ตัวอย่างเช่น หากต้องการอนุญาต SSH สำหรับผู้ใช้รูท เมเรียน และเครือข่าย ให้ทำดังนี้
AllowUsers รูทเครือข่าย Merion
ในทางกลับกัน คุณสามารถอนุญาตให้ผู้ใช้ทุกคนเข้าถึงได้ ยกเว้นที่ระบุไว้:
DenyUsers รูทเครือข่าย Merion
เวลาไม่มีการใช้งาน
สิ่งสำคัญคือต้องระบุเวลาที่เซสชั่นที่ไม่ได้ใช้งานจะสิ้นสุดลง (เสร็จสิ้น) ซึ่งสามารถทำได้ด้วยตัวเลือกต่อไปนี้:
ClientAliveInterval 300 ClientAliveCountMax 0
ในการตั้งค่านี้ เราระบุเวลาที่ไม่มีการใช้งานเป็น 300 วินาที (5 นาที)
เกี่ยวกับไฟล์ .rhosts
ความจริงก็คือไฟล์นี้มีรายชื่อโฮสต์และผู้ใช้ หากไฟล์นี้มีโฮสต์และผู้ใช้ผสมกัน ผู้ใช้รายนี้จะสามารถเชื่อมต่อกับระบบผ่าน SSH ได้โดยไม่ต้องขอรหัสผ่าน เราขอแนะนำให้ปิดการใช้งานคุณสมบัติ "มหัศจรรย์" นี้:
ไม่สนใจRhosts ใช่
ไม่มีการรับรองความถูกต้องตามโฮสต์!
ที่เรียกว่า การรับรองความถูกต้องตามโฮสต์อนุญาตให้ผู้ใช้จากโฮสต์เฉพาะเชื่อมต่อกับเซิร์ฟเวอร์ ปิดการใช้งาน:
หมายเลขการตรวจสอบความถูกต้องตามโฮสต์
การเชื่อมต่อโดยตรงผ่านรูท
หมายเลข PermitRootLogin
ทำแบนเนอร์
สำหรับการเชื่อมต่อแต่ละครั้ง ให้สร้างแบนเนอร์ที่คุณสามารถคุกคามผู้โจมตีที่กำลังพยายามเข้าถึงการเข้าถึงโดยไม่ได้รับอนุญาต พารามิเตอร์แบนเนอร์มีหน้าที่ในการตั้งค่าแบนเนอร์
พอร์ต 22 จากภายในเท่านั้น!
เข้าถึงพอร์ตระบบ 22 ผ่านกฎไฟร์วอลล์แบบลูกโซ่เท่านั้น วิธีที่ดีที่สุดคือปล่อยให้เข้าถึงได้จากภายใน LAN เท่านั้น ตัวอย่างเช่นใน ไอพีเทเบิลคุณสามารถให้สิทธิ์เข้าถึง 192.168.11.0/24:
RH-Firewall-1-INPUT -s 192.168.11.0/24 -m state --state ใหม่ -p tcp --dport 22 -j ยอมรับ
ฟังได้ที่ไหน.
ตามค่าเริ่มต้น SSH จะรับฟังการเชื่อมต่อบนอินเทอร์เฟซที่มีอยู่ทั้งหมด เราขอแนะนำให้เปลี่ยนพอร์ตเริ่มต้นและระบุที่อยู่ IP ที่จะรอการเชื่อมต่อ เช่น เราจะระบุพอร์ต 962 และที่อยู่ IP 192.168.11.24
พอร์ต 962 ListenAddress 192.168.11.24
รหัสผ่านที่รัดกุมแบบเข้ารหัส
ใช้รหัสผ่านที่รัดกุม มีเครื่องมือมากมายบนอินเทอร์เน็ตที่จะสร้างรหัสผ่านที่รัดกุมแบบออนไลน์ ไม่มีค่าใช้จ่ายและไม่มี SMS :)
ห้ามรหัสผ่านที่ว่างเปล่า
มีผู้ใช้ที่ไม่มีรหัสผ่าน การเข้าถึง SSH จะต้องถูกปฏิเสธโดยใช้ตัวเลือก:
พอร์ต 962 PermitEmptyPasswords no
วิเคราะห์บันทึก
ตั้งค่าการบันทึกเหตุการณ์เป็นโหมด INFO หรือ DEBUG ซึ่งจะช่วยให้คุณขยายการควบคุมระบบได้:
ข้อมูลระดับบันทึก
บทความนี้มีประโยชน์กับคุณหรือไม่?
บอกฉันทีว่าทำไม?
ขออภัยที่บทความนี้ไม่มีประโยชน์สำหรับคุณ: (โปรดหากไม่ยากระบุสาเหตุ เราจะขอบคุณมากสำหรับคำตอบโดยละเอียด ขอบคุณที่ช่วยให้เราดีขึ้น!
ในบทความนี้เราจะดูวิธีการพื้นฐานในการปกป้อง SSH มวลการโจมตีแบบบรูตฟอร์ซ ในกรณีนี้ การโจมตีแบบ bruteforce ขนาดใหญ่ไม่ได้หมายความถึงการคาดเดารหัสผ่านแบบกำหนดเป้าหมายสำหรับ SSH ของคุณโดยเฉพาะ แต่เป็นการดักจับเซิร์ฟเวอร์จำนวนมากเพื่อระบุคู่รหัสผ่านเข้าสู่ระบบและรหัสผ่านที่ไม่สามารถคาดเดาได้ในภายหลัง
คุณสมบัติหลักของการโจมตี SSH bruteforce ขนาดใหญ่คือการสแกนช่วง IP อย่างครอบคลุมบนพอร์ตเปิด 22 และการใช้ชื่อผู้ใช้และรหัสผ่านที่ใช้กันทั่วไป (เช่น root:passwd123, admin:server123 ฯลฯ)
หากต้องการดูสถิติจากไฟล์บันทึกของการพยายามอนุญาต SSH ที่ไม่สำเร็จบนเซิร์ฟเวอร์ของคุณ ให้ป้อนคำสั่ง:
Cat /var/log/secure* | grep "รหัสผ่านล้มเหลว" | grep sshd | awk "(พิมพ์ $1,$2)" | การเรียงลำดับ -k 1,1M -k 2n | ยูนิค -ซี
ภาพหน้าจอนี้แสดงสถิติเกี่ยวกับจำนวนการอนุญาตที่ล้มเหลวในแต่ละวัน หากคุณขโมยข้อมูลที่คล้ายกัน คุณควรดำเนินการเพื่อปกป้อง SSH ของคุณจากการโจมตีที่รุนแรง
1. ถ้าคุณ ไม่ใช้สำหรับการอนุญาตชื่อผู้ใช้ที่ใช้บ่อย เช่น รูท ผู้ดูแลระบบ ผู้ดูแลระบบ ผู้ใช้ ฯลฯ และใช้รหัสผ่านที่ซับซ้อนในการอนุญาต จากนั้นคุณสามารถไปยังจุดที่สองได้ทันที หากต้องการเปลี่ยนรหัสผ่านให้ซับซ้อนยิ่งขึ้น ให้ป้อนคำสั่ง:
รหัสผ่าน #your_login#
ที่ไหน #ของคุณ_เข้าสู่ระบบ#— ชื่อผู้ใช้ของคุณ
เมื่อป้อนรหัสผ่านใหม่ รหัสผ่านจะไม่แสดง เคอร์เซอร์จะยังคงอยู่ในที่เดียว
เข้าสู่เซิร์ฟเวอร์ผ่าน SSH สร้างผู้ใช้ใหม่และให้รหัสผ่านแก่เขาเพื่อดำเนินการนี้ให้ป้อนคำสั่ง:
Adduser #ผู้ใช้ใหม่# passwd #ผู้ใช้ใหม่#
ที่ไหน #ผู้ใช้ใหม่#— ชื่อผู้ใช้ใหม่ของคุณ อย่าใช้ชื่อผู้ใช้ที่ใช้บ่อยเป็นชื่อผู้ใช้ ซึ่งเป็นตัวเลือกที่ดี your_nameadmin(ตัวอย่างเช่น foxadmin, useralex, rootidler)
2. หลังจากนั้นเข้าสู่ระบบผ่าน SSH ด้วยชื่อผู้ใช้และรหัสผ่านใหม่ และเปิดการกำหนดค่า SSH daemon (sshd_config) ด้วยคำสั่ง:
Vi /etc/ssh/sshd_config.vi
หลังจากนั้นคุณควรเห็นสิ่งนี้:
เส้นที่ขึ้นต้นด้วย # ถูกแสดงความคิดเห็น
ถึง ปกป้อง SSH จากความดุร้ายขนาดใหญ่ยกเลิกหมายเหตุและเปลี่ยนแปลงหรือเพิ่มพารามิเตอร์ต่อไปนี้ ไฟล์:
ก) ท่าเรือ- ท่าเรือที่ SSHDยอมรับและเชื่อมต่อบริการ ไม่ใส่ข้อคิดเห็น (ลบก่อนเริ่มบรรทัด #
) และเปลี่ยนค่าเริ่มต้น 22
ไปยังอื่น ๆ ตั้งแต่ 1024 ถึง 65536 ยกเว้นพอร์ตที่สงวนไว้ - รายการพอร์ตที่สงวนไว้เช่น:
พอร์ต 2022
ลบ # และเปลี่ยนค่า พอร์ต 22ให้กดบนคีย์บอร์ดของคุณก่อน ฉันหลังจากแก้ไขบรรทัดที่ต้องการแล้ว ให้กดปุ่ม เอสซี
ข) เข้าสู่ระบบ GraceTime— ระยะเวลารอการลงทะเบียนผู้ใช้ในระบบ หากผู้ใช้ล้มเหลวในการเข้าสู่ระบบภายในเวลาที่กำหนดโดยคำสั่งนี้ เซสชันจะสิ้นสุดลง มาลดค่านี้กัน:
เข้าสู่ระบบGraceTime 1น
ค) อนุญาตการรูทเข้าสู่ระบบ- อนุญาตให้ผู้ใช้ รากเข้าสู่ระบบผ่านโปรโตคอล SSH มาเปลี่ยนเป็น เลขที่.
หมายเลข PermitRootLogin
ง) อนุญาตผู้ใช้— ชื่อผู้ใช้ที่อนุญาตให้เข้าสู่ระบบผ่านโปรโตคอล SSH โดยคั่นด้วยช่องว่าง ที่นี่ แทนที่จะเป็น #your_login# เราจะระบุชื่อผู้ใช้ที่สร้างขึ้นใหม่
อนุญาตให้ผู้ใช้ #your_login#
จ) MaxAuthTries— จำนวนความพยายามเข้าสู่ระบบต่อเซสชัน เมื่อถึงจำนวนความพยายามสูงสุดที่อนุญาต เซสชันจะสิ้นสุดลง
MaxAuth ลอง 2
เป็นผลให้เราได้รับ:
พอร์ต 2022 LoginGraceTime 1m PermitRootLogin ไม่ AllowUsers #your_login# MaxAuthTries 2
ในบทความนี้ เราจะทำการตั้งค่าให้เสร็จสิ้น สสสเพื่อป้องกันสิ่งใหญ่โต กำลังดุร้าย- หลังจากแก้ไขแล้ว , กด บนแป้นพิมพ์ :
มีบรรทัดปรากฏด้านล่างแล้วป้อนเข้าไป สและกดปุ่ม เข้า- ในกรณีนี้ การเปลี่ยนแปลงที่ทำทั้งหมดจะถูกบันทึก
หากคุณทำอะไรผิด (เช่น ลบบางสิ่งโดยไม่ตั้งใจ) เพื่อออกโดยไม่บันทึกใช้แทนแป้นพิมพ์ลัด ส, กุญแจ คิว!
หลังจากตั้งค่า SSH เสร็จแล้ว ให้รีสตาร์ท daemon ด้วยคำสั่ง:
บริการ sshd เริ่มต้นใหม่
ตอนนี้เมื่อเชื่อมต่อผ่าน SSH ให้ใช้พอร์ตใหม่ 2022 (หรืออันที่คุณระบุไว้ในการตั้งค่า) แทน พอร์ตมาตรฐาน 22.
ในบทความถัดไปเกี่ยวกับการตั้งค่า SSH ฉันอยากจะบอกคุณว่าเราจะห้ามการตรวจสอบรหัสผ่านและอนุญาตให้มีการอนุญาตโดยใช้คีย์ SSH ส่วนตัวเท่านั้น ดังนั้นจึงปกป้องตัวเราเองจากการเดารหัสผ่านให้มากที่สุด
ติดต่อกับ
ในบันทึกสั้นๆ นี้ ฉันได้รวบรวมวิธีต่างๆ ในการเพิ่มความปลอดภัยของเซิร์ฟเวอร์ 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 # ห้ามการเข้าสู่ระบบระยะไกลภายใต้บัญชีรูท PermitRootLogin no # เปิดใช้งานการตรวจสอบสิทธิ์ของไฟล์อย่างชัดเจน และไดเรกทอรีที่มีคีย์ ssh StrictModes ใช่ # กี่ครั้งที่จะขอรหัสผ่านหากคุณป้อนไม่ถูกต้อง MaxAuthTries 3 # ห้ามเข้าสู่ระบบด้วยรหัสผ่านที่ว่างเปล่า PermitEmptyPasswords ไม่ # ห้ามเข้าสู่ระบบด้วยรหัสผ่านในหลักการ # (ใช้รหัสสาธารณะ/ส่วนตัวแทน) การตรวจสอบรหัสผ่านหมายเลข # ปิดการใช้งานการอนุญาต "การตอบสนองต่อความท้าทาย" # เพราะ มันไม่มีประโยชน์เมื่อใช้คีย์ 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 ใหม่
ความคิดเห็น
- เมื่อใช้การรับรองความถูกต้องของคีย์ จำเป็นต้องมีคีย์ ก่อนหน้านี้สร้างบนเครื่องไคลเอนต์และคัดลอกกุญแจสาธารณะไปยังเซิร์ฟเวอร์ ตัวอย่าง:
- ไฟล์ /var/log/auth.log จะมีข้อความจาก sshd- ในกรณีที่ไฟล์นี้หายไป คุณจะต้องกำหนดค่าระบบการบันทึกของคุณ ตัวอย่างสำหรับ syslog และ syslon-ng ฉันใช้ syslog-ng และจำเป็นต้องเพิ่มบรรทัดต่อไปนี้ในไฟล์ /etc/syslog-ng/syslog-ng.conf:
และรีสตาร์ทบริการ syslog-ng
- หากคุณใช้พอร์ตที่ไม่ได้มาตรฐาน คุณอาจต้องกำหนดค่าไฟร์วอลล์ของคุณ (iptables, firewalld ฯลฯ)
ตัวอย่างการตั้งค่าสำหรับ iptables:
หากนั่นยังไม่พอ
นี่เป็นเพียงการตั้งค่าพื้นฐาน นอกจากนี้ คุณยังสามารถกำหนดค่าได้
- ไฟร์วอลล์ (iptables)