จะปลอดภัยไหมที่จะรีบูตเซิร์ฟเวอร์ที่เปิดสู่อินเทอร์เน็ต


29

เฉพาะ

ฉันมีชุดกฎ iptables ที่กำหนดไว้บนเซิร์ฟเวอร์ที่ใช้ CentOS ฉันรับประกัน / ฉันรับประกันได้อย่างไร / ฉันจะรับประกันได้อย่างไรว่าเมื่อเครือข่ายมาออนไลน์ (ไม่ว่าจะเป็นที่เครื่องบูตหรือหลังจากที่เริ่มบริการเครือข่าย) กฎของ iptables ถูกนำไปใช้แล้ว (และหาก iptables ไม่สามารถเริ่มใช้งาน อินเทอร์เฟซเครือข่ายจะล้มเหลว)

(ฉันรู้ว่านี่เป็นคำถาม noob แต่ฉันไม่เคยเรียกใช้เซิร์ฟเวอร์กับอะไรนอกจากเครือข่ายที่เชื่อถือได้ที่อยู่เบื้องหลัง DHCP NAT และไฟร์วอลล์ที่ปลอมแปลงดังนั้น ... คาดหวังว่าคำถาม noob จาก noobs)


15
ไม่ใช่คำถาม noob เลย นี่คือสิ่งที่แฮ็กเกอร์เข้าสู่เครือข่าย PlayStation ในปี 2554 ทำให้เกิดการหยุดทำงาน 24 วันและการตั้งถิ่นฐาน $ 15MM เมื่อไฟร์วอลล์รีบู๊ต (เหมือนเดิมทุกเดือน) ไฟร์วอลเปิดกว้างสักครู่นั่นก็นานพอสมควร
Chris S

@ChrisS สิ่งที่แปลกประหลาดที่สุดสำหรับฉันก็คือฉันมั่นใจว่า sysadmins ที่รับผิดชอบในเครือข่ายนั้นจะฉลาดพอที่จะหยุดยั้งถ้ามีคนแนะนำให้ปิดไฟร์วอลล์ แต่ก็ไม่ได้ตีขนตาทุกเดือน ปิด ... แล้วเปิดใหม่อีกครั้ง ไม่แน่ใจว่าการรวมกันของสิ่งเหล่านี้จะอธิบายได้อย่างไร
คู่ปรับ Shot

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

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

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

คำตอบ:


18

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

คุณไม่รับประกันว่าอินเทอร์เฟซจะไม่ปรากฏขึ้นถ้าชุดกฎ iptables ไม่ได้ใช้อย่างถูกต้อง (หรือเลย)

ตัวอย่าง:
chkconfig: 2345 08 92
บรรทัดนี้ระบุว่าบริการที่เป็นปัญหาจะเปิดใช้งานใน runlevels 2, 3, 4 และ 5 และจะเริ่มต้นที่ 8 และหยุดที่ 92 สิ่งใดที่มีค่า "เริ่มต้น" ที่ดีกว่าจะเริ่มหลังจากสคริปต์นี้เสร็จสมบูรณ์เท่านั้น แต่ข้อผิดพลาดของสคริปต์นี้ถือว่าเสร็จสมบูรณ์และจะไม่ป้องกันไม่ให้สคริปต์ดาวน์สตรีมทำงาน

โปรดทราบว่าคำตอบนี้ใช้กับ CentOS 6 และก่อนหน้านี้ไม่จำเป็นต้องเป็น CentOS 7 ฉันไม่ได้ทำการค้นคว้าส่วนตัว 7 อย่างเพียงพอที่จะตอบคำถามนี้เป็นเวลา 7


1
+1 และ ... อย่ามองม้าของขวัญในปากเพราะคำตอบของคุณนั้นมีประโยชน์มาก แต่ ... คุณจะรู้วิธีการมาตรฐานใด ๆ ในการให้คำสั่งการพึ่งพาเพื่อให้บริการหากว่าล้มเหลว ในช่วงต้นของห่วงโซ่คนที่ตามมาไม่ได้เริ่ม? Ooh- และถ้ามีคนพยายามที่จะผิดพลาดไฟร์วอลล์ (อย่างใด) ว่าอินเตอร์เฟซเครือข่ายจะ "ลงไปกับเรือ"? เป็นการดีที่ฉันต้องการให้ทุกอย่างล้มเหลวอย่างปลอดภัยแม้ในบางครั้งคนบางคนก็มีไฟร์วอลล์ 0 วันถึง DoS ...
Parthian Shot

5
ด้วยสคริปต์เริ่มต้น SysV (เช่น CentOS 6 และรุ่นก่อนหน้า) จะไม่มีวิธีที่ดีในการทำเช่นนั้น CentOS 7 ขึ้นอยู่กับที่คุณต้องการ - ถ้า B ขึ้นอยู่กับ A และ A ล้มเหลว B จะไม่เริ่ม สำหรับ 7 เพื่อดูการใช้งานsystemctl list-dependencies --all(ฉันเพิ่งดูที่ man page สำหรับ 30 วินาทีที่ผ่านมา)
John

ในขณะที่ข่าวนั้นค่อนข้างน่าผิดหวัง (ตอนนี้ฉันอายุ 6 ปี) อย่างน้อยตอนนี้ฉันก็รู้แล้วว่าการปรับเปลี่ยนสคริปต์เริ่มต้นเป็นวิธีการแฮ็คที่แย่มาก
คู่ปรับ Shot

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

ฉันยังไม่ได้ตั้ง IDS ดังนั้นการเตือนที่ผิดพลาดจึงไม่เป็นปัญหาในขณะนี้ (เซิร์ฟเวอร์ยังไม่ทำงานและฉันรู้ว่าฉันไม่มีที่อยู่ใกล้พร้อมใช้งานคำถามนี้เป็นส่วนหนึ่งของการเตรียมการของฉัน แต่ฉันจะใส่ HIDS) ฉันจะระมัดระวังเท่าที่จะทำได้และหากมีวิธีที่ไม่เกี่ยวข้องกับการแก้ไขส่วนหลักของการกำหนดค่าของ init ด้วยตนเองฉันจะทำเช่นนั้นอย่างแน่นอน
คู่ปรับ Shot

1

คุณยังสามารถใช้ตัวเลือก ifup-post ใน centos:

/ etc / sysconfig / เครือข่ายสคริปต์ / ifup โพสต์

เรียกว่าเมื่ออุปกรณ์เครือข่ายใด ๆ ยกเว้นอุปกรณ์ SLIP เกิดขึ้น เรียก / etc / sysconfig / network-สคริปต์ / ifup-route เพื่อแสดงเส้นทางแบบสแตติกที่ขึ้นอยู่กับอุปกรณ์นั้น เรียก / etc / sysconfig / network-สคริปต์ / ifup-aliases เพื่อแสดง aliases สำหรับอุปกรณ์นั้น ตั้งค่าชื่อโฮสต์หากยังไม่ได้ตั้งค่าและสามารถพบชื่อโฮสต์สำหรับ IP สำหรับอุปกรณ์นั้น ส่ง SIGIO ไปยังโปรแกรมใด ๆ ที่ร้องขอการแจ้งเตือนกิจกรรมเครือข่าย

สามารถขยายเพื่อแก้ไขการกำหนดค่าเนมเซอร์วิส, เรียกใช้สคริปต์โดยพลการ ฯลฯ ตามต้องการ

สคริปต์นี้ทำงานและหลังจากข้างบน (ifup-route และ ifup-aliases) สคริปต์จะค้นหา ifup-local

if [ -x /sbin/ifup-local ]; then
   /sbin/ifup-local ${DEVICE}
fi

ดังนั้นคุณสามารถสร้างไฟล์นี้และตรวจสอบให้แน่ใจว่ามันเรียก iptables อีกครั้งเช่นใช้ iptables-restore:

iptables-restore < /etc/sysconfig/iptables

1

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

sudo sh -c "iptables-save > /etc/iptables.rules"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.