Hosts.allow – คำสั่ง Linux
ค้นหาโฮสต์ที่ได้รับอนุญาตของคุณ
คุณอาจมาถึงที่นี่เพื่อหาวิธีดูโฮสต์ (คอมพิวเตอร์เครื่องอื่น) ที่ได้รับอนุญาตให้เข้าถึง ลินุกซ์ ระบบ. เว้นแต่คุณจะตั้งค่าการจำกัดไว้แล้ว อาจเป็นคอมพิวเตอร์เครื่องใดก็ตามที่พยายามตามค่าเริ่มต้น
อันที่จริงนั่นไม่เป็นความจริงทั้งหมด หากไม่มีกฎที่กำหนดไว้ในไฟล์ /etc/hosts.allow หรือไฟล์ /etc/hosts.deny คอมพิวเตอร์ของคุณจะส่งต่อการเชื่อมต่อไปยังแอปพลิเคชันที่เกี่ยวข้อง ดังนั้นหากใครพยายามจะเชื่อมต่อผ่าน SSHการเชื่อมต่อจะมาถึงระบบ Linux ของคุณซึ่งจะถูกส่งไปยัง SSH เพื่อเข้าสู่ระบบ หากไม่ได้ระบุข้อมูลประจำตัวที่ถูกต้อง การเชื่อมต่อจะถูกปฏิเสธ
หากบางโฮสต์ได้รับอนุญาตหรือถูกปฏิเสธ อันดับแรก Linux จะตรวจสอบกฎเหล่านั้นเพื่อดูว่าคำขอที่เข้ามาควรได้รับอนุญาตผ่านหรือไม่ แล้วมันก็จะเป็นไปตามแบบเดิม
คุณสามารถตรวจสอบโฮสต์ที่อนุญาตได้โดยการแสดงรายการเนื้อหาของไฟล์ /etc/hosts.allow
cat /etc/hosts.allow.
หากคุณไม่เห็นสิ่งใดที่นั่น ระบบของคุณอาจยอมให้การเชื่อมต่อใดๆ ผ่านได้

การใช้ไฟล์ Hosts.allow
ไฟล์ /etc/hosts.allow ให้คุณเลือกว่าคอมพิวเตอร์เครื่องใดที่สามารถเข้าถึงระบบของคุณได้ ในไฟล์ คุณสามารถระบุกฎง่ายๆ เป็นข้อความธรรมดาเพื่อบอกให้คอมพิวเตอร์ทราบวิธีจัดการการเชื่อมต่อ ในการเริ่มต้น ให้สร้างกฎที่อนุญาตให้คอมพิวเตอร์ทุกเครื่องรับบริการทั้งหมด
ทั้งหมด: ทั้งหมด
มันง่ายมาก ถ้าคุณต้องการแยกคอมพิวเตอร์ที่มีปัญหาออก คุณก็สามารถทำได้เช่นกัน
ทั้งหมด: ทั้งหมด ยกเว้น 192.168.1.110
มีคีย์เวิร์ดอื่นๆ อีกหลายคำที่คุณสามารถใช้จัดการกับคอมพิวเตอร์ชุดต่างๆ ได้ ตัวอย่างเช่น คุณสามารถอนุญาตการรับส่งข้อมูลในท้องถิ่นทั้งหมดในลักษณะนี้:
ทั้งหมด: 192.168.1.0/24
หรือคุณสามารถใช้คำหลัก "LOCAL" แทน
ทั้งหมด: ท้องถิ่น
คุณยังสามารถใช้ชื่อโดเมนได้ ตัวอย่างเช่น:
ทั้งหมด: .example.com
คุณสามารถใช้คำหลัก "ยกเว้น" ที่นี่ได้เช่นกันเพื่อยกเว้นโดเมนย่อยที่อาจมีปัญหา
ทั้งหมด: .example.com ยกเว้น testing.example.com
คุณยังสามารถระบุกฎสำหรับภูตเฉพาะ ดังนั้น หากคุณต้องการควบคุมการเข้าถึง SSH คุณจะต้องตั้งกฎสำหรับ 'sshd'
sshd: ท้องถิ่น
ไฟล์ hosts.allow รองรับการแสดงรายการ daemons ในบรรทัดเดียวกัน หากกฎของพวกมันเหมือนกัน ตัวอย่างเช่น:
sshd, in.ftpd: LOCAL
สังเกต "ใน" มีส่วนร่วมใน "in.ftpd?" ที่ช่วยให้คุณระบุการรับส่งข้อมูลขาเข้า
จากนั้น คุณมีตัวเลือกในการรวบรวมทั้งหมด
sshd, in.ftpd: LOCAL ยกเว้น 192.168.1.110
นี่คือวิธีทั่วไปที่คุณใช้ไฟล์ /etc/hosts.allow บนระบบ Linux ของคุณ สำหรับรายละเอียดทางเทคนิคทั้งหมดเกี่ยวกับสิ่งที่คุณสามารถทำได้กับไฟล์ /etc/hosts.allow ให้ไปต่อในหัวข้อถัดไป
รายละเอียดทางเทคนิค
หน้าคู่มือนี้อธิบาย Linux ว่าเป็นภาษาควบคุมการเข้าใช้งานอย่างง่ายที่อิงตามไคลเอนต์ (ชื่อโฮสต์/ที่อยู่ ชื่อผู้ใช้) และ เซิร์ฟเวอร์ (ชื่อกระบวนการ ชื่อโฮสต์/ที่อยู่) รูปแบบ ตัวอย่างจะได้รับในตอนท้าย ผู้อ่านที่ใจร้อนควรข้ามไปที่ส่วนตัวอย่างเพื่อแนะนำโดยย่อ เวอร์ชันเพิ่มเติมของภาษาควบคุมการเข้าถึงมีอธิบายไว้ใน hosts_options (5) เอกสาร ส่วนขยายจะเปิดขึ้นในเวลาสร้างโปรแกรมโดยสร้างด้วย —DPROCESS_OPTIONS
ในข้อความต่อไปนี้ ภูต เป็นชื่อโปรเซสของโปรเซสเน็ตเวิร์ก daemon และ ลูกค้า คือชื่อและ/หรือที่อยู่ของโฮสต์ที่ขอรับบริการ ชื่อกระบวนการ Network daemon ถูกระบุในไฟล์คอนฟิกูเรชัน inetd
ไฟล์ควบคุมการเข้าถึง
ซอฟต์แวร์ควบคุมการเข้าใช้ปรึกษาสอง ไฟล์. การค้นหาจะหยุดที่นัดแรก
การเข้าถึงจะได้รับเมื่อคู่ (daemon, ไคลเอนต์) ตรงกับรายการใน /etc/hosts.allowไฟล์.
มิฉะนั้น การเข้าถึงจะถูกปฏิเสธเมื่อคู่ (daemon, client) ตรงกับรายการใน/etc/hosts.deny ไฟล์.
มิฉะนั้นจะได้รับอนุญาต
ไฟล์ควบคุมการเข้าถึงที่ไม่มีอยู่จะถือว่าไฟล์นั้นเป็นไฟล์ว่าง ดังนั้น การควบคุมการเข้าถึงสามารถปิดได้โดยไม่มีไฟล์ควบคุมการเข้าถึง
กฎการควบคุมการเข้าถึง
ไฟล์ควบคุมการเข้าถึงแต่ละไฟล์ประกอบด้วยข้อความศูนย์หรือมากกว่า เส้นเหล่านี้ได้รับการประมวลผลตามลำดับลักษณะที่ปรากฏ การค้นหาจะสิ้นสุดลงเมื่อพบรายการที่ตรงกัน
อักขระขึ้นบรรทัดใหม่จะถูกละเว้นเมื่อนำหน้าด้วยอักขระแบ็กสแลช วิธีนี้ทำให้คุณสามารถแยกบรรทัดยาวๆ เพื่อให้ง่ายต่อการแก้ไข
บรรทัดว่างหรือบรรทัดที่ขึ้นต้นด้วยอักขระ `#' จะถูกละเว้น อนุญาตให้คุณแทรกความคิดเห็นและช่องว่างเพื่อให้อ่านตารางได้ง่ายขึ้น
บรรทัดอื่นๆ ทั้งหมดควรเป็นไปตามรูปแบบต่อไปนี้ ระหว่าง [] จะเป็นทางเลือก:
daemon_list: client_list [: shell_command ]
daemon_list คือรายชื่อโปรเซสของ daemon อย่างน้อยหนึ่งชื่อ (ค่า argv[0]) หรืออักขระตัวแทน (ดูด้านล่าง)
client_list คือรายชื่อโฮสต์ ที่อยู่โฮสต์ รูปแบบ หรือสัญลักษณ์แทนอย่างน้อยหนึ่งชื่อ (ดูด้านล่าง) ที่จะจับคู่กับชื่อหรือที่อยู่โฮสต์ของไคลเอ็นต์
รูปแบบที่ซับซ้อนมากขึ้น daemon@host และ ผู้ใช้@โฮสต์ มีการอธิบายในส่วนต่างๆ เกี่ยวกับรูปแบบปลายทางของเซิร์ฟเวอร์และการค้นหาชื่อผู้ใช้ของไคลเอ็นต์ตามลำดับ
องค์ประกอบรายการควรคั่นด้วยช่องว่างและ/หรือเครื่องหมายจุลภาค
ยกเว้น NIS (YP) การค้นหากลุ่มเครือข่าย, การตรวจสอบการควบคุมการเข้าถึงทั้งหมดไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
รูปแบบ
ภาษาควบคุมการเข้าถึงใช้รูปแบบต่อไปนี้:
สตริงที่ขึ้นต้นด้วย `.' อักขระ. ชื่อโฮสต์จะตรงกันถ้าองค์ประกอบสุดท้ายของชื่อตรงกับรูปแบบที่ระบุ ตัวอย่างเช่น รูปแบบ `.tue.nl' ตรงกับชื่อโฮสต์ `wzv.win.tue.nl'
สตริงที่ลงท้ายด้วย `.' อักขระ. ที่อยู่โฮสต์จะตรงกันถ้าฟิลด์ตัวเลขแรกตรงกับสตริงที่ระบุ ตัวอย่างเช่น รูปแบบ `131.155.' ตรงกับที่อยู่ของ (เกือบ) ทุกโฮสต์ในเครือข่าย Eindhoven University (131.155.x.x)
สตริงที่ขึ้นต้นด้วยอักขระ `@' จะถือเป็นชื่อเน็ตกรุ๊ปของ NIS (เดิมคือ YP) NS ชื่อโฮสต์ จะถูกจับคู่หากเป็นสมาชิกโฮสต์ของ netgroup ที่ระบุ ไม่สนับสนุนการจับคู่ Netgroup สำหรับชื่อโปรเซส daemon หรือชื่อผู้ใช้ไคลเอ็นต์
นิพจน์ของรูปแบบ `n.n.n.n/m.m.m.m' จะถูกตีความว่าเป็นคู่ `net/mask' ที่อยู่โฮสต์ IPv4 จะถูกจับคู่หาก "net" เท่ากับระดับบิตและของที่อยู่และ "มาสก์" ตัวอย่างเช่น รูปแบบเน็ต/มาสก์ `131.155.72.0/255.255.254.0' จะตรงกับทุกที่อยู่ในช่วง `131.155.72.0' ถึง `131.155.73.255'
นิพจน์ของรูปแบบ `[n: n: n: n: n: n: n: n]/m' ถูกตีความว่าเป็นคู่ `[net]/prefixlen' ที่อยู่โฮสต์ IPv6 จะถูกจับคู่หากบิต "prefixlen" ของ "net" เท่ากับบิต "prefixlen" ของที่อยู่ ตัวอย่างเช่น [net]/รูปแบบคำนำหน้า `[3ffe: 505:2:1::]/64' จะจับคู่ทุกที่อยู่ในช่วง `3ffe: 505:2:1::' ถึง `3ffe: 505:2: 1:ffff: ffff: ffff: ffff'
สตริงที่ขึ้นต้นด้วยอักขระ `/' จะถือว่าเป็น a ชื่อไฟล์. ชื่อโฮสต์หรือที่อยู่จะตรงกันหากตรงกับชื่อโฮสต์หรือรูปแบบที่อยู่ที่ระบุไว้ในไฟล์ที่มีชื่อ รูปแบบไฟล์เป็นศูนย์หรือมากกว่าบรรทัดที่มีชื่อโฮสต์หรือรูปแบบที่อยู่คั่นด้วยช่องว่าง รูปแบบชื่อไฟล์สามารถใช้ได้ทุกที่ที่ชื่อโฮสต์หรือรูปแบบที่อยู่สามารถใช้ได้
สัญลักษณ์แทน `*' และ `?' สามารถใช้เพื่อจับคู่ชื่อโฮสต์หรือ ที่อยู่ IP. วิธีการจับคู่นี้ไม่สามารถใช้ร่วมกับการจับคู่ `net/mask' การจับคู่ชื่อโฮสต์ที่ขึ้นต้นด้วย `.' หรือที่อยู่ IP ที่ตรงกันที่ลงท้ายด้วย `.'
ไวด์การ์ด
ภาษาควบคุมการเข้าถึงรองรับไวด์การ์ดที่ชัดเจน ได้แก่:
- 'ทั้งหมด' — ไวลด์การ์ดสากล ตรงกันเสมอ
- 'ท้องถิ่น' —จับคู่โฮสต์ที่มีชื่อไม่มีอักขระจุด
- 'ไม่รู้จัก' —จับคู่ผู้ใช้ที่ไม่รู้จักชื่อ และตรงกับโฮสต์ใดๆ ที่มีชื่อ หรือ ไม่ทราบที่อยู่ ควรใช้รูปแบบนี้อย่างระมัดระวัง: ชื่อโฮสต์อาจไม่พร้อมใช้งานเนื่องจากปัญหาเซิร์ฟเวอร์ชื่อชั่วคราว NS ที่อยู่เครือข่าย จะไม่สามารถใช้งานได้เมื่อซอฟต์แวร์ไม่สามารถระบุได้ว่ากำลังคุยอยู่กับเครือข่ายประเภทใด
- 'เป็นที่รู้จัก' —จับคู่ผู้ใช้ที่รู้จักชื่อและตรงกับโฮสต์ที่มีชื่อ และ ที่อยู่เป็นที่รู้จัก ควรใช้รูปแบบนี้อย่างระมัดระวัง: ชื่อโฮสต์อาจไม่พร้อมใช้งานเนื่องจากปัญหาเซิร์ฟเวอร์ชื่อชั่วคราว ที่อยู่เครือข่ายจะใช้ไม่ได้เมื่อซอฟต์แวร์ไม่สามารถระบุได้ว่ากำลังคุยอยู่กับเครือข่ายประเภทใด
- 'หวาดระแวง' —ตรงกับโฮสต์ที่มีชื่อไม่ตรงกับที่อยู่ เมื่อ tcpd ถูกสร้างด้วย -DPARANOID (โหมดเริ่มต้น) มันจะลบคำขอจากไคลเอนต์ดังกล่าว แม้กระทั่งก่อนที่จะดูตารางการควบคุมการเข้าถึง สร้างโดยไม่มี -DPARANOID เมื่อคุณต้องการควบคุมคำขอดังกล่าวมากขึ้น
'ผู้ประกอบการ'
- 'ยกเว้น' —ตั้งใจใช้อยู่ในรูปแบบ: `list_1 ยกเว้น list_2'; โครงสร้างนี้ตรงกับสิ่งที่ตรงกับ list_1 เว้นแต่จะตรงกัน list_2. สามารถใช้ตัวดำเนินการ EXCEPT ใน daemon_lists และใน client_lists ตัวดำเนินการ EXCEPT สามารถซ้อนกันได้: หากภาษาควบคุมอนุญาตให้ใช้วงเล็บ `a EXCEPT b EXCEPT c' จะแยกวิเคราะห์เป็น `(a EXCEPT (b EXCEPT c))'
- คำสั่งเชลล์ —หากกฎการควบคุมการเข้าถึงที่ตรงกันครั้งแรกมีคำสั่งเชลล์ คำสั่งนั้นจะอยู่ภายใต้ %substitutions (ดูหัวข้อถัดไป) ผลลัพธ์ถูกดำเนินการโดย a /bin/sh กระบวนการลูกที่มีอินพุต เอาต์พุต และข้อผิดพลาดมาตรฐานเชื่อมต่อกับ /dev/null. ระบุ `&' ที่ส่วนท้ายของ คำสั่งเทอร์มินัล ถ้าไม่อยากรอจนเสร็จ คำสั่งเชลล์ไม่ควรอาศัยการตั้งค่า PATH ของ inetd แต่ควรใช้ชื่อพาธแบบสัมบูรณ์ หรือควรขึ้นต้นด้วย PATH=whatever ที่ชัดเจน
NS hosts_options(5) เอกสารอธิบายภาษาอื่นที่ใช้ฟิลด์คำสั่งเชลล์ในลักษณะที่แตกต่างและเข้ากันไม่ได้
% การขยาย
ส่วนขยายต่อไปนี้มีอยู่ในคำสั่งเชลล์:
- %a (%A) — ลูกค้า (เซิร์ฟเวอร์) เจ้าภาพ ที่อยู่.
- %ค — ข้อมูลลูกค้า: user@host, user@address, ชื่อโฮสต์ หรือเพียงแค่ที่อยู่ ขึ้นอยู่กับจำนวนข้อมูลที่มี
- %NS — ชื่อกระบวนการ daemon (ค่า argv[0])
- % ชม. (% ชม.) — ชื่อโฮสต์หรือที่อยู่โฮสต์ของไคลเอ็นต์ (เซิร์ฟเวอร์) หากชื่อโฮสต์ไม่พร้อมใช้งาน
- %n (%N) — ชื่อโฮสต์ไคลเอนต์ (เซิร์ฟเวอร์) (หรือ "ไม่รู้จัก" หรือ "หวาดระแวง")
- %NS — รหัสกระบวนการภูต
- %NS — ข้อมูลเซิร์ฟเวอร์: daemon@host, daemon@address หรือเพียงแค่ชื่อ daemon ขึ้นอยู่กับจำนวนข้อมูลที่มี
- %ยู — ชื่อผู้ใช้ไคลเอนต์ (หรือ "ไม่รู้จัก")
- %% — ขยายเป็นอักขระ `%' ตัวเดียว
อักขระในการขยาย% ที่อาจสร้างความสับสนให้กับเชลล์จะถูกแทนที่ด้วยขีดล่าง
รูปแบบปลายทางของเซิร์ฟเวอร์
ในการแยกแยะไคลเอ็นต์ตามที่อยู่เครือข่ายที่พวกเขาเชื่อมต่อ ให้ใช้รูปแบบของแบบฟอร์ม:
process_name@host_pattern: client_list...
รูปแบบเช่นนี้สามารถใช้ได้เมื่อเครื่องมีที่อยู่อินเทอร์เน็ตที่แตกต่างกันโดยมีชื่อโฮสต์อินเทอร์เน็ตต่างกัน ผู้ให้บริการสามารถใช้สิ่งอำนวยความสะดวกนี้เพื่อเสนอไฟล์เก็บถาวร FTP, GOPHER หรือ WWW ที่มีชื่ออินเทอร์เน็ตที่อาจเป็นขององค์กรอื่น โปรดดูตัวเลือก "บิด" ในเอกสาร hosts_options (5) บางระบบ (Solaris, FreeBSD) สามารถมีที่อยู่อินเทอร์เน็ตได้มากกว่าหนึ่งที่อยู่บนอินเทอร์เฟซทางกายภาพเดียว กับระบบอื่นๆ คุณอาจต้องใช้อินเทอร์เฟซหลอกแบบ SLIP หรือ PPP ที่อาศัยอยู่ในพื้นที่ที่อยู่เครือข่ายเฉพาะ
host_pattern เป็นไปตามกฎไวยากรณ์เดียวกันกับชื่อโฮสต์และที่อยู่ในบริบท client_list โดยปกติ ข้อมูลปลายทางของเซิร์ฟเวอร์จะใช้ได้เฉพาะกับบริการที่เน้นการเชื่อมต่อเท่านั้น
การค้นหาชื่อผู้ใช้ของลูกค้า
เมื่อโฮสต์ไคลเอ็นต์สนับสนุนโปรโตคอล RFC 931 หรือหนึ่งในรุ่นย่อย (TAP, IDENT, RFC 1413) โปรแกรม wrapper สามารถดึงข้อมูลเพิ่มเติมเกี่ยวกับเจ้าของการเชื่อมต่อได้ ข้อมูลชื่อผู้ใช้ของไคลเอ็นต์ (ถ้ามี) จะถูกบันทึกพร้อมกับชื่อโฮสต์ของไคลเอ็นต์ และสามารถใช้เพื่อจับคู่รูปแบบต่างๆ เช่น:
daemon_list:... user_pattern@host_pattern...
daemon wrappers สามารถกำหนดค่าได้ในเวลาคอมไพล์เพื่อดำเนินการค้นหาชื่อผู้ใช้ที่เป็นไปตามกฎ (ค่าเริ่มต้น) หรือเพื่อสอบถามโฮสต์ไคลเอ็นต์เสมอ ในกรณีของการค้นหาชื่อผู้ใช้ที่เป็นไปตามกฎ กฎข้างต้นจะทำให้ค้นหาชื่อผู้ใช้ก็ต่อเมื่อทั้ง daemon_list และ host_patternจับคู่.
รูปแบบผู้ใช้มีไวยากรณ์เดียวกันกับรูปแบบกระบวนการ daemon ดังนั้นจึงใช้สัญลักษณ์แทนเดียวกัน (ไม่รองรับการเป็นสมาชิก netgroup) ไม่ควรมองข้ามการค้นหาชื่อผู้ใช้
ข้อมูลชื่อผู้ใช้ของไคลเอ็นต์ไม่สามารถเชื่อถือได้เมื่อมีความจำเป็นมากที่สุด เช่น เมื่อระบบไคลเอ็นต์ถูกบุกรุก โดยทั่วไป ALL และ (UN)KNOWN เป็นรูปแบบชื่อผู้ใช้เพียงรูปแบบเดียวที่สมเหตุสมผล
การค้นหาชื่อผู้ใช้ทำได้เฉพาะกับบริการที่ใช้ TCP และเฉพาะเมื่อโฮสต์ไคลเอ็นต์รัน daemon ที่เหมาะสมเท่านั้น ในกรณีอื่นๆ ผลลัพธ์จะเป็น "ไม่ทราบ"
ที่รู้จักกันดี UNIX ข้อบกพร่องของเคอร์เนลอาจทำให้บริการสูญหายเมื่อการค้นหาชื่อผู้ใช้ถูกบล็อกโดยไฟร์วอลล์ เอกสาร wrapper README อธิบายขั้นตอนเพื่อดูว่าเคอร์เนลของคุณมีจุดบกพร่องนี้หรือไม่
การค้นหาชื่อผู้ใช้อาจทำให้เกิดความล่าช้าอย่างเห็นได้ชัดสำหรับผู้ใช้ที่ไม่ใช่ UNIX ระยะหมดเวลาเริ่มต้นสำหรับการค้นหาชื่อผู้ใช้คือ 10 วินาที: สั้นเกินไปที่จะรับมือกับเครือข่ายที่ช้า แต่นานพอที่จะทำให้ผู้ใช้พีซีระคายเคือง
การค้นหาชื่อผู้ใช้แบบเลือกสามารถบรรเทาปัญหาสุดท้ายได้ ตัวอย่างเช่น กฎเช่น:
daemon_list: @pcnetgroup ALL@ALL.
จะจับคู่สมาชิกของ pc netgroup โดยไม่ต้องทำการค้นหาชื่อผู้ใช้ แต่จะทำการค้นหาชื่อผู้ใช้กับระบบอื่นๆ ทั้งหมด
การตรวจจับที่อยู่การปลอมแปลงการโจมตี
ข้อบกพร่องในเครื่องกำเนิดหมายเลขลำดับของหลาย ๆ การใช้งาน TCP/IP อนุญาตให้ผู้บุกรุกปลอมแปลงเป็นโฮสต์ที่เชื่อถือได้และเจาะเข้าไป เช่น บริการรีโมตเชลล์ บริการ IDENT (RFC931 เป็นต้น) สามารถใช้เพื่อตรวจจับการโจมตีดังกล่าวและการโจมตีด้วยการปลอมแปลงที่อยู่โฮสต์อื่นๆ
ก่อนที่จะยอมรับคำขอของไคลเอ็นต์ Wrapper สามารถใช้บริการ IDENT เพื่อค้นหาว่าไคลเอ็นต์ไม่ได้ส่งคำขอเลย เมื่อโฮสต์ไคลเอนต์ให้บริการ IDENT ผลลัพธ์การค้นหา IDENT เชิงลบ (ไคลเอนต์ตรงกับ `UNKNOWN@host') จะเป็นหลักฐานที่ชัดเจนว่าโฮสต์โจมตีปลอมแปลง
ผลลัพธ์การค้นหา IDENT ในเชิงบวก (ไคลเอนต์ตรงกับ `KNOWN@host') มีความน่าเชื่อถือน้อยกว่า เป็นไปได้ที่ผู้บุกรุกจะปลอมแปลงทั้งการเชื่อมต่อไคลเอ็นต์และการค้นหา IDENT แม้ว่าการทำเช่นนั้นจะยากกว่าการปลอมแปลงเพียงแค่การเชื่อมต่อไคลเอ็นต์ อาจเป็นไปได้ว่าเซิร์ฟเวอร์ IDENT ของลูกค้ากำลังโกหก
การค้นหา IDENT ไม่สามารถใช้ได้กับบริการ UDP
ตัวอย่างเพิ่มเติม
ภาษามีความยืดหยุ่นเพียงพอที่จะแสดงนโยบายการควบคุมการเข้าถึงประเภทต่างๆ ได้โดยไม่ยุ่งยาก แม้ว่าภาษาจะใช้ตารางควบคุมการเข้าถึงสองตาราง แต่นโยบายทั่วไปส่วนใหญ่สามารถนำไปใช้กับตารางใดตารางหนึ่งที่ไม่สำคัญหรือแม้แต่ว่างเปล่า
เมื่ออ่านตัวอย่างด้านล่าง สิ่งสำคัญคือต้องตระหนักว่าตารางการอนุญาตถูกสแกนก่อนที่จะปฏิเสธ ตาราง การค้นหาจะสิ้นสุดลงเมื่อพบรายการที่ตรงกัน และการเข้าถึงนั้นจะได้รับเมื่อไม่พบรายการที่ตรงกันที่ ทั้งหมด.
ตัวอย่างใช้ชื่อโฮสต์และโดเมน สามารถปรับปรุงได้โดยการรวมที่อยู่และ/หรือข้อมูลเครือข่าย/เน็ตมาสก์ เพื่อลดผลกระทบของความล้มเหลวในการค้นหาเซิร์ฟเวอร์ชื่อชั่วคราว
ส่วนใหญ่ปิด
ในกรณีนี้ การเข้าถึงจะถูกปฏิเสธโดยค่าเริ่มต้น อนุญาตให้เข้าถึงได้เฉพาะโฮสต์ที่ได้รับอนุญาตอย่างชัดเจนเท่านั้น
นโยบายเริ่มต้น (ไม่มีการเข้าถึง) ใช้กับไฟล์ปฏิเสธเล็กน้อย:
/etc/hosts.deny:
ทั้งหมด: ทั้งหมด
การดำเนินการนี้จะปฏิเสธบริการทั้งหมดสำหรับโฮสต์ทั้งหมด เว้นแต่จะได้รับอนุญาตให้เข้าถึงโดยรายการในไฟล์อนุญาต
โฮสต์ที่ได้รับอนุญาตอย่างชัดเจนจะแสดงอยู่ในไฟล์อนุญาต ตัวอย่างเช่น:
/etc/hosts.allow:
ทั้งหมด: LOCAL @some_netgroup
ทั้งหมด: .foobar.edu ยกเว้น terminalserver.foobar.edu
กฎข้อแรกอนุญาตการเข้าถึงจากโฮสต์ใน โดเมนท้องถิ่น (ไม่มี `.' ในชื่อโฮสต์) และจากสมาชิกของ some_netgroup เน็ตกรุ๊ป กฎข้อที่สองอนุญาตการเข้าถึงจากโฮสต์ทั้งหมดในfoobar.edu โดเมน (สังเกตจุดนำหน้า) ยกเว้น terminalserver.foobar.edu.
ส่วนใหญ่เปิด
ที่นี่ การเข้าถึงจะได้รับตามค่าเริ่มต้น เฉพาะโฮสต์ที่ระบุอย่างชัดเจนเท่านั้นที่จะถูกปฏิเสธการให้บริการ
นโยบายเริ่มต้น (อนุญาตการเข้าถึง) ทำให้ไฟล์อนุญาตซ้ำซ้อนเพื่อให้สามารถละเว้นได้ โฮสต์ที่ไม่ได้รับอนุญาตอย่างชัดเจนจะแสดงอยู่ในไฟล์ปฏิเสธ ตัวอย่างเช่น:
/etc/hosts.deny:
ทั้งหมด: some.host.name, .some.domain
ทั้งหมด: ทั้งหมด ยกเว้น in.fingerd: other.host.name, .other.domain
กฎข้อแรกปฏิเสธบางโฮสต์และโดเมนบริการทั้งหมด กฎข้อที่สองยังคงอนุญาตการร้องขอนิ้วจากโฮสต์และโดเมนอื่น
Booby Traps
ตัวอย่างต่อไปอนุญาต คำขอtftp จากโฮสต์ในโดเมนท้องถิ่น (สังเกตจุดนำหน้า) คำขอจากโฮสต์อื่น ๆ จะถูกปฏิเสธ แทนที่จะส่งไฟล์ที่ร้องขอ โพรบนิ้วจะถูกส่งไปยังโฮสต์ที่ละเมิด ผลลัพธ์จะถูกส่งไปยัง superuser
/etc/hosts.allow:
in.tftpd: LOCAL, .my.domain
/etc/hosts.deny:
in.tftpd: ทั้งหมด: spawn (/some/where/safe_finger -l @%h | \
/usr/ucb/mail -s %d-%h รูท) &
คำสั่ง safe_finger มาพร้อมกับ tcpd wrapper และควรติดตั้งในตำแหน่งที่เหมาะสม มันจำกัดความเสียหายที่อาจเกิดขึ้นจากข้อมูลที่ส่งโดยเซิร์ฟเวอร์นิ้วระยะไกล ให้การปกป้องได้ดีกว่าคำสั่งนิ้วมาตรฐาน
การขยายลำดับ %h (โฮสต์ไคลเอ็นต์) และ %d (ชื่อบริการ) มีการอธิบายไว้ในส่วนคำสั่งเชลล์
อย่าดักจับ finger daemon ของคุณ เว้นแต่ว่าคุณพร้อมสำหรับการวนซ้ำแบบไม่มีที่สิ้นสุด
บนเครือข่าย ระบบไฟร์วอลล์ เคล็ดลับนี้สามารถดำเนินการได้ดียิ่งขึ้น ไฟร์วอลล์เครือข่ายทั่วไปมีชุดบริการที่จำกัดแก่โลกภายนอกเท่านั้น บริการอื่น ๆ ทั้งหมดสามารถ "บั๊ก" ได้เช่นเดียวกับตัวอย่าง tftp ด้านบน ผลที่ได้คือระบบการเตือนล่วงหน้าที่ยอดเยี่ยม
ดูสิ่งนี้ด้วย
tcpd (8) โปรแกรมห่อ tcp/ip daemon
tcpdchk (8), tcpdmatch (8), โปรแกรมทดสอบ
ใช้ ชาย สั่งการ (% ชาย) เพื่อดูวิธีการใช้คำสั่งบนคอมพิวเตอร์เฉพาะของคุณ