ฉันเพิ่งตรวจสอบเซิร์ฟเวอร์ของฉัน/var/log/auth.log
และพบว่าฉันได้รับการแจ้งเตือนรหัสผ่านล้มเหลว / การทำลายมากกว่า 500 ครั้งต่อวัน! เว็บไซต์ของฉันมีขนาดเล็กและ URL ของมันไม่ชัดเจน เป็นเรื่องปกติหรือไม่ ฉันควรจะใช้มาตรการใด ๆ ?
ฉันเพิ่งตรวจสอบเซิร์ฟเวอร์ของฉัน/var/log/auth.log
และพบว่าฉันได้รับการแจ้งเตือนรหัสผ่านล้มเหลว / การทำลายมากกว่า 500 ครั้งต่อวัน! เว็บไซต์ของฉันมีขนาดเล็กและ URL ของมันไม่ชัดเจน เป็นเรื่องปกติหรือไม่ ฉันควรจะใช้มาตรการใด ๆ ?
คำตอบ:
ในอินเทอร์เน็ตทุกวันนี้มันค่อนข้างน่าเศร้า มีบอตเน็ตจำนวนมากที่พยายามลงชื่อเข้าใช้แต่ละเซิร์ฟเวอร์ที่พบในเครือข่าย IP ทั้งหมด โดยทั่วไปแล้วพวกเขาใช้การโจมตีแบบพจนานุกรมอย่างง่ายในบัญชีที่รู้จักกันดี (เช่นบัญชีรูทหรือแอปพลิเคชันบางบัญชี)
ไม่พบเป้าหมายการโจมตีผ่านทางรายการ Google หรือ DNS แต่ผู้โจมตีเพียงแค่ลองทุกที่อยู่ IP ในเครือข่ายย่อยที่แน่นอน (เช่น บริษัท โฮสติ้งรูทเซิร์ฟเวอร์ที่รู้จัก) ดังนั้นไม่สำคัญว่า URL ของคุณ (ดังนั้นรายการ DNS) ค่อนข้างคลุมเครือ
นั่นเป็นเหตุผลที่มันสำคัญมากที่จะ:
นอกจากนี้คุณสามารถติดตั้งfail2banซึ่งจะสแกน authlog และหากพบว่ามีความพยายามในการเข้าสู่ระบบที่ล้มเหลวจาก IP จำนวนหนึ่งก็จะดำเนินการเพิ่ม IP นั้นไปยัง/etc/hosts.deny
หรือ iptables / netfilter เพื่อล็อคผู้โจมตีสักสองสามนาที
นอกเหนือจากการโจมตีด้วย SSH แล้วการสแกนเว็บเซิร์ฟเวอร์ของคุณเพื่อหาแอปพลิเคชั่นเว็บที่มีช่องโหว่ (แอพบล็อกบางตัว CMSs, phpmyadmin เป็นต้น) ดังนั้นอย่าลืมอัปเดตให้ทันสมัยและกำหนดค่าอย่างปลอดภัยด้วย!
action.d/iptables.conf
การอ้างอิงที่ดีที่สุดคือการดาวน์โหลดและดู
เพียงไม่กี่ 100 ก็ดี ... เดือนที่แล้วฉันพบว่าหนึ่งในเซิร์ฟเวอร์ของฉันมี 40k ความพยายาม ฉันไปพบปัญหาในการวางแผน: แผนที่
เมื่อฉันเปลี่ยนพอร์ต ssh และนำ Port Knocking ไปใช้หมายเลขนั้นลดลงเป็น 0 :-)
grep 'Failed password' /var/log/secure* | grep sshd | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort | uniq
(ลบ | uniq ที่ส่วนท้ายหากคุณต้องการอนุญาตการทำซ้ำ) จากนั้นคุณสามารถวางไว้ใน CSV และอัปโหลดไปที่ zeemaps.com ฉันได้เห็นแผนที่ที่ดีขึ้นแล้วของฉันซึ่งพวกเขาจะใช้การนับเพื่อระบายสีแผนที่ (สีเขียวเป็นสีแดงสำหรับจำนวนครั้งในแต่ละเขต) แต่ฉันไม่ได้คิดว่ามันออกมาอย่างใดอย่างหนึ่ง
ฉันใช้ "tarpit" นอกเหนือจากการอนุญาตให้ใช้การพิสูจน์ตัวตนคีย์สาธารณะและการไม่อนุญาตการลงชื่อเข้าใช้รูทเท่านั้น
ในnetfilter
มีrecent
โมดูลซึ่งคุณสามารถใช้กับ ( INPUT
โซ่):
iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --set --name tarpit --rsource
iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 6 --name tarpit --rsource -j DROP
iptables -A INPUT -i if0 -p tcp --dport 22 -j ACCEPT
สิ่งที่ทำคือทุกครั้งที่พยายามเชื่อมต่อกับพอร์ต 22 นั้นแสดงรายการโดยrecent
โมดูลที่มี IP และสิ่งอื่น ๆ ภายใต้ชื่อ "tarpit" (ถ้าคุณอยากรู้ลองดู/proc/net/xt_recent/tarpit
) เห็นได้ชัดว่าคุณสามารถใช้ชื่ออื่น
ในการแสดงรายการหรือเพิกถอน IP ให้ใช้:
echo "+123.123.123.123" > /proc/net/xt_recent/tarpit
echo "-123.123.123.123" > /proc/net/xt_recent/tarpit
อัตรานี้จำกัดความพยายามเป็น 5 ใน 300 วินาที โปรดทราบว่าผู้ใช้ที่มีการเชื่อมต่อที่มีอยู่จะไม่ถูกรบกวนโดยข้อ จำกัด นั้นเนื่องจากพวกเขามีการเชื่อมต่อที่สร้างไว้แล้วและได้รับอนุญาตให้สร้างมากขึ้น (แม้จะเกินขีด จำกัด อัตรา)
ปรับกฎตามความชอบของคุณ แต่ต้องแน่ใจว่ากฎนั้นถูกเพิ่มในลำดับนั้น (เช่นเมื่อเพิ่มจากนั้นใช้กฎเหล่านี้ในลำดับนี้เมื่อแทรกจากนั้นในลำดับที่กลับกัน)
ลดเสียงดังลงอย่างมาก นอกจากนี้ยังให้ความปลอดภัยที่แท้จริง (กับการบังคับใช้เดรัจฉาน) ซึ่งแตกต่างจากความปลอดภัยที่รับรู้ของการเปลี่ยนพอร์ต อย่างไรก็ตามฉันยังคงแนะนำให้เปลี่ยนพอร์ตหากทำได้ในสภาพแวดล้อมของคุณ มันจะลดระดับเสียงลงเช่นกัน ...
คุณยังสามารถรวมสิ่งนี้เข้ากับ fail2ban ได้แม้ว่าฉันจะทำงานได้ดีโดยไม่มีมันและมีเพียงกฎข้างต้น
แก้ไข:
เป็นไปได้ที่จะล็อคตัวเองไม่ให้ทำสิ่งนี้เพื่อให้คุณสามารถเพิ่มสิ่งต่อไปนี้ที่ช่วยให้คุณล้างข้อมูลโดยห้ามเคาะพอร์ตใดพอร์ตหนึ่ง:
iptables -A INPUT -i if0 -p tcp --dport <knockport> -m state --state NEW -m recent --name tarpit --remove
ใช่แล้ว ทุกวันนี้มันค่อนข้างปกติ
โปรดใช้การรับรองความถูกต้องของคีย์สาธารณะเพื่อวัตถุประสงค์ด้านการดูแลระบบหากเป็นไปได้ สร้างคีย์ส่วนตัวบนเวิร์กสเตชันของคุณ:
$ ssh-keygen -t dsa
คัดลอกเนื้อหาของ~ / .ssh / id_dsa.pubไปยังเซิร์ฟเวอร์ของคุณ~ / .ssh / authorized_keys (และ /root/.ssh/authorized_keys หากคุณต้องการล็อกอินรูทโดยตรง)
กำหนดค่าเซิร์ฟเวอร์ของคุณ/ etc / ssh / sshd_configเพื่อยอมรับการรับรองความถูกต้องของรหัสสาธารณะเท่านั้น:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin without-password
หากคุณมีเซิร์ฟเวอร์มากเกินไปคุณสามารถใช้Puppetเพื่อเรียกใช้พับลิกคีย์และการกำหนดค่าให้กับพวกเขา
ค้นหาDenyhostsและfail2banเพื่อบล็อกการพยายามเข้าสู่ระบบ SSH ซ้ำ ๆ และดูSnortถ้าคุณต้องการ IDS / IPS แบบเต็ม
ใช้http://denyhosts.sourceforge.net/
และใช่คุณควรใช้การตรวจสอบคีย์สาธารณะและปิดการใช้รหัสผ่านรับรองความถูกต้อง
ฉันจะบอกว่าการได้แค่ 500 เท่านั้นนั้นต่ำเกินไป
ที่นายจ้างคนก่อนหนึ่งในนักวิจัยด้านความปลอดภัยคอมพิวเตอร์คนหนึ่งเรียกว่าการพยายามบุกเข้าไปใน "อินเทอร์เน็ตเทียบเท่ากับเสียงจักรวาล " เขาอธิบายว่ามันเป็นเรื่องปกติและต่อเนื่องของทราฟฟิกที่เป็นอันตรายซึ่งกำลังค้นหาระบบบนอินเทอร์เน็ตและใช้ประโยชน์จากสคริปต์โดยอัตโนมัติเพื่อพยายามจี้ระบบ บอทเน็ตและระบบที่เป็นอันตรายอื่น ๆ จะสแกนและสแกนอินเทอร์เน็ตอีกครั้งเพื่อหาระบบที่มีช่องโหว่เช่น SETI
นี่เป็นเรื่องปกติ แต่นั่นไม่ได้หมายความว่าคุณไม่ควรต่อสู้กับการต่อสู้ที่ดี นี่คือขั้นตอนบางส่วนเกี่ยวกับวิธีทำให้เซิร์ฟเวอร์ของคุณปลอดภัยยิ่งขึ้น
คุณสามารถลดจำนวนนี้อย่างมากในสภาพแวดล้อมที่แชร์หรือ colocation โดยการปิดใช้งานการเข้าถึง SSH บนที่อยู่ IP ใด ๆ ที่เกี่ยวข้องกับชื่อโดเมน ที่อยู่ IP ที่ไม่ใช่โดเมนที่ไม่อยู่ในรายการจะได้รับปริมาณการใช้งานน้อยลงดังนั้นซื้อ IP ที่ไม่แสดงและใช้ IP นี้เพื่อการเข้าถึง SSH เท่านั้น
หากคุณอยู่ในสภาพแวดล้อมที่คุณสามารถใช้IPsec / VPN กับเครือข่ายส่วนตัวภายในสภาพแวดล้อมเซิร์ฟเวอร์ของคุณนี่คืออุดมคติ ปิดการใช้งานการเข้าถึงอินเทอร์เน็ต SSH ทั้งหมดตรวจสอบให้แน่ใจว่าคุณมีโซลูชันไฟดับในตัว ตั้งค่า VPN ของคุณและอนุญาตการเข้าถึง SSH จาก VPN ของคุณเท่านั้น
หาก VLAN ไม่ใช่ตัวเลือกกำหนดค่าเราเตอร์ของคุณหรือกฎไฟร์วอลล์เพื่ออนุญาตการเชื่อมต่อ SSH จากช่วงที่อยู่ IP ที่รู้จักเท่านั้น
หากคุณทำตามขั้นตอนเหล่านี้คุณจะนอนหลับได้ง่ายขึ้นในเวลากลางคืนหากรู้ว่ามีใครบางคนจะต้องประนีประนอมเครือข่าย บริษัท โฮสติ้งของคุณเพื่อเข้าถึงเซิร์ฟเวอร์ผ่าน SSH
ค่อนข้างปกติเพื่อดูการเชื่อมต่อ SSH ที่ล้มเหลวหลายร้อยรายการ
หากคุณมีตัวเลือกฉันเพียงแค่เปลี่ยนพอร์ต SSH ของฉันเป็นสิ่งที่ไม่ได้มาตรฐาน ไม่จำเป็นต้องทำให้เซิร์ฟเวอร์ของคุณปลอดภัยยิ่งขึ้น แต่จะต้องล้างข้อมูลบันทึก (และช่วยให้คุณเห็นใครก็ตามที่พยายามจะบุกเข้าไป)
นอกเหนือจากการใช้กลไกการล็อคอัตโนมัติเช่น fail2ban คุณยังมีตัวเลือกอีกหนึ่งตัว: ติดต่อผู้ให้บริการที่อยู่ที่ไม่เหมาะสมของ ISP ของผู้โจมตี อาจดูเหมือนไร้ประโยชน์อย่างสมบูรณ์ แต่ในกรณีของสคริปต์ตัวเล็ก ISP ของพวกเขาก็เต็มใจที่จะลงมือทำ
ในการค้นหาที่อยู่ที่ไม่เหมาะสมเริ่มต้นด้วยarin.netและค้นหาที่อยู่ IP โดยใช้ whois คุณอาจถูกนำไปยังรีจิสตรีภูมิภาคอื่น แต่ในที่สุดคุณสามารถค้นหา ISP ที่รับผิดชอบสำหรับบล็อก IP ซึ่งมีที่อยู่ ค้นหาที่อยู่ @ การละเมิดหรือส่งจดหมายถึงผู้ติดต่อด้านเทคนิค
ส่งข้อความสุภาพพร้อมรายการไฟล์บันทึกที่เกี่ยวข้อง (ตรวจสอบให้แน่ใจว่าได้ลบข้อมูลส่วนตัวใด ๆ ) และขอให้พวกเขาดำเนินการกับโฮสต์ที่ละเมิด
ฉันอยากจะแนะนำไม่ใช้ fail2ban แต่ใช้ SSH (และอื่น ๆ ) บนพอร์ตที่ไม่ได้มาตรฐาน ฉันไม่เชื่อเรื่องความปลอดภัยด้วยความสับสน แต่ฉันคิดว่านี่เป็นวิธีที่ยอดเยี่ยมในการลดเสียงในบันทึกของคุณ
การเข้าสู่ระบบที่ล้มเหลวบนพอร์ตที่ไม่ได้มาตรฐานจะมีอยู่ไม่มากและอยู่ระหว่างและยังสามารถบ่งชี้การโจมตีได้มากกว่า
คุณสามารถก้าวต่อไปอีกขั้นในการติดตั้ง honeypot SSH เช่นKippoเพื่อ 'ปล่อยให้' ผู้ดุร้ายและดูว่าพวกเขาจะได้รับโอกาสอะไร
ใช่มันเป็นเรื่องปกติ สิ่งที่ฉันบอกลูกค้าในสถานการณ์ของคุณด้วยเว็บไซต์เล็ก ๆ
เตรียมพร้อมเสมอที่จะถูกแฮ็ก
มีสำเนาของเว็บไซต์ของคุณบนเซิร์ฟเวอร์ dev นี่เป็นเดสก์ท็อป Windows ของคุณโดยใช้ XAMPP ซึ่งคุณสามารถใช้ได้ฟรี
ทำการเปลี่ยนแปลงเซิร์ฟเวอร์ dev ของคุณเสมอจากนั้นอัปโหลดไปยังเว็บไซต์ที่ใช้งานอยู่ของคุณ หากเป็น CMS เช่น Wordpress ให้โพสต์ของคุณบนเซิร์ฟเวอร์ dev จากนั้นคัดลอกและวางลงในเซิร์ฟเวอร์สด
ไม่ต้องดาวน์โหลดอะไรจากเว็บไซต์สดของคุณไปยังเซิร์ฟเวอร์ dev ของคุณ
ตรวจสอบหน้าเว็บของคุณเป็นประจำเพื่อดูการเปลี่ยนแปลงที่คุณไม่ได้ทำ โดยเฉพาะการเชื่อมโยงที่ซ่อนอยู่กับยาเสพติดหรือผลิตภัณฑ์ 'เพิ่มประสิทธิภาพ' คุณสามารถค้นหาโปรแกรมเสริมเบราว์เซอร์จำนวนมากและโปรแกรมที่จะทำสิ่งนี้ให้คุณ
หากคุณถูกประนีประนอม แจ้งโฮสต์ของคุณลบทุกอย่างเปลี่ยนรหัสผ่านทั้งหมดและอัปโหลดเซิร์ฟเวอร์ clean dev ของคุณไปยังเว็บเซิร์ฟเวอร์ที่ว่างเปล่าในขณะนี้ ทำงานกับโฮสต์ของคุณเพื่อป้องกันการเกิดซ้ำ
คุณไม่ควรต้องมีทีมรักษาความปลอดภัยสำหรับไซต์เล็ก ๆ นั่นคือสิ่งที่โฮสต์ของคุณควรจะให้ หากพวกเขาไม่ได้รับโฮสต์อื่นซึ่งง่ายกว่ามากเมื่อคุณมีเซิร์ฟเวอร์ dev แทนที่จะพยายามย้ายเซิร์ฟเวอร์สด
หวังว่านี่จะช่วยได้
อีกวิธีในการหยุด (โดยส่วนตัวแล้วฉันไม่ชอบย้ายพอร์ต SSH): ตัดสินใจว่าคุณสามารถแสดงรายการเครือข่ายทั้งหมดที่คุณต้องการลงชื่อเข้าใช้หรือไม่จากนั้นอนุญาตให้สิ่งเหล่านี้เข้าถึงพอร์ต SSH ของคุณ
รายการของผู้ให้บริการอินเทอร์เน็ตในท้องถิ่นช่วยให้ฉันลดความพยายามในการเข้าสู่ระบบ 1-2 ครั้งต่อเดือน (ย้อนกลับไปประมาณ 1k / วัน) ผมตรวจพบเหล่านั้นโดยยังคงใช้denyhosts
นอกเหนือจากคำแนะนำที่ยอดเยี่ยมอื่น ๆ ที่คุณได้รับแล้วฉันยังต้องการใช้คำสั่งAllowUsersหากเหมาะสมสำหรับเซิร์ฟเวอร์ที่กำหนด สิ่งนี้ช่วยให้ผู้ใช้ที่ระบุเท่านั้นที่จะเข้าสู่ระบบผ่าน SSH ซึ่งจะช่วยลดความเป็นไปได้ในการเข้าถึงผ่านบัญชีแขก / บริการ / ระบบที่กำหนดค่าไว้อย่างไม่ปลอดภัย
ตัวอย่าง:
AllowUsers admin jsmith jdoe
ตัวเลือกอนุญาตให้ผู้ใช้ระบุและควบคุมว่าผู้ใช้ใดที่สามารถเข้าถึงบริการ ssh สามารถระบุผู้ใช้หลายคนคั่นด้วยช่องว่าง
ใช่มันเป็นเรื่องปกติ คุณสามารถ :
Fwknop เป็นหนึ่งในการปรับใช้พอร์ตที่ดีกว่าเนื่องจากไม่สามารถปลอมแปลงได้และรับรองความถูกต้องจริง ๆ แล้วไม่ใช่เพียงแค่ให้สิทธิ์การเชื่อมต่อเท่านั้น
คุณสามารถเปลี่ยนพอร์ตที่ Openssh ใช้ แต่คุณไม่ได้ปรับปรุงความปลอดภัยอย่างแท้จริง
เสริมสร้างการรับรองความถูกต้อง ssh โดยใช้Google-authenticatorหรือwikid
วิธีนี้จะช่วยป้องกันการโจมตีด้วยรหัสผ่านและความเป็นไปได้ของการโจมตีที่มุ่งมั่น / การโจมตีที่กำหนดเป้าหมายประนีประนอมเครื่องผู้ดูแลระบบของคุณและขโมยคำสั่งผสม ssh-key & password
เพียงแค่ดูคอมพ์pwn2ownล่าสุดเพื่อดูว่าการโจมตีของผู้ชำนาญการนั้นง่ายเพียงใดสำหรับผู้ดูแลระบบที่ได้รับการแก้ไข
น่าเศร้าที่นี่เป็นเรื่องปกติ คุณควรพิจารณาเพิ่มบางอย่างเช่นfail2banในระบบของคุณเพื่อตรวจจับและแบนผู้โจมตีโดยอัตโนมัติ หากคุณยังไม่ได้ดำเนินการคุณควรพิจารณาใช้ ssh ด้วยรหัสสาธารณะเท่านั้นและไม่อนุญาตให้ลงชื่อเข้าใช้รูทผ่าน ssh หากใช้ ftp เพื่อถ่ายโอนไฟล์ไปยังระบบให้พิจารณาใช้ scp / sftp แทน
ฉันใช้การเคาะพอร์ตและมีโพรบสองสามข้อต่อวัน พวกเขาไม่ได้รับการเชื่อมต่อดังนั้นพวกเขาจึงหายไป ฉันบันทึกและรายงานการเข้าถึงพอร์ตที่เกี่ยวข้องทั้งหมด
ฉันได้เรียกใช้ fail2ban กับ Shorewall เป็นไฟร์วอลล์เพื่อขึ้นบัญชีดำผู้โจมตีถาวร
หากคุณไม่ต้องการใช้อินเทอร์เน็ตเพื่อปิดการใช้งาน SSH หากคุณมีที่อยู่ที่รู้จักจำนวนน้อยซึ่งต้องใช้การเข้าถึงระยะไกลให้ จำกัด การเข้าถึงที่อยู่เหล่านั้น
การ จำกัด การเข้าถึงคีย์ที่ได้รับอนุญาตอาจมีประโยชน์เช่นกัน
ฉันใช้pam_abl
ในการขึ้นบัญชีดำเดรัจฉานชั่วคราวและมันใช้งานได้ดี ฉันคิดว่ามันให้ความรู้สึกที่ดีกว่าที่จะได้รับสิทธิ์ใน PAM โดยใช้ฐานข้อมูลของตัวเองมากกว่าที่จะขึ้นอยู่กับหรือhosts.deny
iptables
ข้อดีอีกอย่างคือpam_abl
ไม่ได้ขึ้นอยู่กับการสแกนไฟล์บันทึก
เป็นเรื่องปกติอย่างสมบูรณ์ในวันนี้
คุณสามารถตั้งค่าขีด จำกัด "burst" ในไฟร์วอลล์สำหรับการเชื่อมต่อใหม่ที่เข้ามาในพอร์ต SSH
หรือติดตั้งตัวแยกบันทึกหนึ่งใน a'la fail2ban หรือเปลี่ยนพอร์ต SSH;)
อันสุดท้ายคืออันที่ง่ายที่สุด สำหรับเครื่องที่มีภาระงานหนักความพยายามทำลายระบบอาจส่งผลกระทบอย่างรุนแรงต่อทั้งระบบ
-
ขอแสดงความนับถือ
โรเบิร์ต
ใช่มันเป็นเรื่องปกติ
ฉันเพิ่งเปลี่ยนพอร์ต ssh ออกจากมาตรฐาน 22 เซิร์ฟเวอร์ของฉันกฎของฉัน :) เพิ่งแก้ไข / etc / ssh / sshd_config เปลี่ยนพอร์ตและรีสตาร์ทบริการ ข้อเสียเพียงอย่างเดียวคือคุณต้องจำไว้ว่าให้เพิ่มพอร์ตนั้นลงในการกำหนดค่าให้กับไคลเอ็นต์ ssh ทุกตัวที่คุณใช้
ปิดการใช้งานการเข้าสู่ระบบรูท (ในผู้ใช้รูทของระบบลินุกซ์ทุกคนจะมีบอทสามารถเดาชื่อผู้ใช้ได้) หลังจากเข้าสู่ระบบในฐานะผู้ใช้ปกติคุณสามารถเปลี่ยนไปใช้รูทได้โดย su หรือ sudo
เปลี่ยนพอร์ตเริ่มต้นจาก 22
อนุญาตการเข้าถึง ssh จาก ip ที่เป็นที่รู้จักเท่านั้น
ใช้รหัสผ่านและตัวเลขที่รัดกุมสำหรับผู้ใช้ที่มีการเข้าถึง ssh