มีเหตุผลใดบ้างที่ฉันต้องการ
iptables -A INPUT -j REJECT
แทน
iptables -A INPUT -j DROP
มีเหตุผลใดบ้างที่ฉันต้องการ
iptables -A INPUT -j REJECT
แทน
iptables -A INPUT -j DROP
คำตอบ:
ตามกฎทั่วไปให้ใช้ REJECT เมื่อคุณต้องการให้อีกฝ่ายรู้ว่าพอร์ตไม่สามารถเข้าถึงได้ใช้ DROP สำหรับการเชื่อมต่อไปยังโฮสต์ที่คุณไม่ต้องการให้คนอื่นเห็น
โดยทั่วไปแล้วกฎทั้งหมดสำหรับการเชื่อมต่อภายใน LAN ของคุณควรใช้ REJECT สำหรับอินเทอร์เน็ตด้วยข้อยกเว้นของ ident บนเซิร์ฟเวอร์บางตัวการเชื่อมต่อจากอินเทอร์เน็ตมักจะ DROPPED
การใช้ DROP ทำให้การเชื่อมต่อดูเหมือนจะเป็นที่อยู่ IP ที่ว่างเปล่า สแกนเนอร์อาจเลือกที่จะไม่สแกนที่อยู่ซึ่งยังว่างอยู่ เนื่องจาก NAT สามารถใช้เพื่อเปลี่ยนเส้นทางการเชื่อมต่อบนไฟร์วอลล์การมีอยู่ของบริการที่รู้จักกันดีไม่จำเป็นต้องระบุถึงการมีอยู่ของเซิร์ฟเวอร์บนที่อยู่
รหัสผ่านควรถูกส่งผ่านหรือปฏิเสธในที่อยู่ใด ๆ ที่ให้บริการ SMTP อย่างไรก็ตามการใช้ Ident-ups-ups ค้นหาโดย SMTP ทำหน้าที่ได้ลดลงจากการใช้งาน มีโปรโตคอลการแชทซึ่งขึ้นอยู่กับบริการระบุการทำงาน
แก้ไข: เมื่อใช้กฎ DROP: - แพ็คเก็ต UDP จะลดลงและพฤติกรรมจะเหมือนกันกับการเชื่อมต่อกับพอร์ตที่ไม่มีกำแพงซึ่งไม่มีบริการ - แพ็คเก็ต TCP จะส่งคืน ACK / RST ซึ่งเป็นคำตอบเดียวกับที่พอร์ตเปิดที่ไม่มีบริการที่จะตอบกลับด้วย เราเตอร์บางตัวจะตอบสนองด้วยและ ACK / RST ในนามของเซิร์ฟเวอร์ที่ล่ม
เมื่อใช้กฎ REJECT จะมีการส่งแพ็คเก็ต ICMP เพื่อระบุว่าพอร์ตไม่พร้อมใช้งาน
ความแตกต่างคือเป้าหมายของ REJECT จะส่งการตอบปฏิเสธไปยังแหล่งที่มาในขณะที่เป้าหมาย DROP จะไม่ส่งอะไร
สิ่งนี้มีประโยชน์เช่นสำหรับบริการ ident หากคุณใช้ REJECT ลูกค้าก็ไม่จำเป็นต้องรอให้หมดเวลา
เพิ่มเติมเกี่ยวกับสิ่งนี้: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html
โดยปกติแล้วคุณต้องการละเว้นโพรบจากผู้โจมตีไปยังพอร์ตบางแห่งซึ่งฉันหมายความว่าคุณไม่ต้องการส่ง 'การเชื่อมต่อปฏิเสธ' กลับคืน 'การเชื่อมต่อถูกปฏิเสธ' หมายถึง: 'มีเซิร์ฟเวอร์อยู่ที่นี่' และอาจให้ข้อมูลเพิ่มเติมในขณะที่การปล่อยแพ็คเก็ตไม่ได้ให้ข้อมูลเกี่ยวกับเวอร์ชั่นของซอฟต์แวร์ช่องโหว่ที่อาจเกิดขึ้นหรือแม้แต่ข้อเท็จจริงที่ว่าเซิร์ฟเวอร์กำลังฟังคุณอยู่
ข้างต้นเป็นหนึ่งในเหตุผลหลักที่ใช้ DROP แทนการปฏิเสธ
ฉันเห็นคำตอบที่ขัดแย้งกันมากมายที่นี่และเนื่องจากนี่เป็นบทความแรกใน Google ที่มีคำหลักที่เหมาะสม นี่คือคำอธิบายที่ถูกต้อง
ง่าย:
DROP ไม่ทำอะไรเลยกับแพ็คเก็ต มันไม่ได้รับการส่งต่อไปยังโฮสต์มันไม่ได้รับคำตอบ manpage ของ IPtables บอกว่ามันลดแพ็กเก็ตลงบนพื้นนั่นคือไม่ทำอะไรเลยกับแพ็กเก็ต
REJECT นั้นแตกต่างจาก DROP ที่มันส่งแพ็กเก็ตกลับมา แต่คำตอบนั้นเหมือนกับว่าเซิร์ฟเวอร์ตั้งอยู่บน IP แต่ไม่มีพอร์ตในสถานะฟัง IPtables จะส่ง RST / ACK ในกรณีของ TCP หรือกับ UDP และพอร์ต ICMP ปลายทางไม่สามารถเข้าถึงได้
ถ้าคุณกำลังพยายามที่จะซ่อนการดำรงอยู่ของเครื่องทั้งหมด-j DROP
มีความเหมาะสม ตัวอย่างเช่นคุณอาจใช้สิ่งนี้เพื่อใช้บัญชีดำ
หากคุณพยายามซ่อนความจริงที่ว่าพอร์ตเปิดอยู่คุณควรเลียนแบบพฤติกรรมที่จะเกิดขึ้นหากพอร์ตไม่ได้เปิดอยู่:
-p tcp -j REJECT --reject-with tcp-reset
-p udp -j REJECT --reject-with icmp-port-unreachable
หากเครื่องสแกนพอร์ตเห็นว่ามีกี่พอร์ตกำลังทิ้งแพ็กเก็ตในขณะที่ส่วนใหญ่ปฏิเสธพวกเขามันสามารถสันนิษฐานได้ว่าแพ็กเก็ตที่หลุดนั้นอยู่บนพอร์ตที่เปิดอยู่ แต่ซ่อนอยู่
แม้จะมีคำตอบที่ถูกต้องมากมายเพียงสองเซ็นต์ของฉัน:
นี่คือ PoC FW.IDS -DROP-vs-REJECTของฉันที่มีเนื้อหาเกี่ยวกับกฎสำหรับระบบแบน (ไฟร์วอลล์, IDS, ฯลฯ )
ไม่นาน:
DROP
สามารถใช้สำหรับผู้บุกรุกซ้ำซากหากการห้ามพอร์ตทั้งหมด (ดังนั้นดูเหมือนว่าเซิร์ฟเวอร์จะอยู่ด้านผู้บุกรุก)REJECT --reject-with tcp-reset
เป็นตัวเลือกที่ดีที่สุดสำหรับการแบนหลายพอร์ตเนื่องจากดูเหมือนจะทำงานเป็นพอร์ตปิดจริงDROP
และREJECT
(โดยไม่มีtcp-reset
) จะให้ "สัญญาณ" แก่ผู้บุกรุกว่ามีบางสิ่งปิดกั้นที่นั่น (เพื่อที่จะกระตุ้นให้เขาสามารถโจมตี ในบางจุด)ใช่การใช้ DROP นั้นไม่มีจุดหมาย ใช้ปฏิเสธ
แม้เมื่อกฎบอกว่า "DROP" ระบบยังคงตอบกลับ SYN ที่เข้ามาด้วย TCP RST / ACK - ซึ่งเป็นพฤติกรรมเริ่มต้นสำหรับพอร์ตที่ไม่มีบริการที่ทำงานอยู่ (tcpdump และ al ไม่ได้บันทึกสิ่งนี้)
หากบริการกำลังทำงานอยู่ SYN จะพบกับ TCP SYN / ACK
เนื่องจาก DROP ไม่ตอบสนองตามปกติด้วย TCP SYN / ACK แต่ด้วย RST / ACK แทนกฎ DROP ของคุณจะโฆษณาไฟร์วอลล์และสแกนเนอร์พอร์ตของคุณจะรู้ว่าคุณกำลังไฟร์วอลล์บางสิ่งบางอย่างและอาจทำให้คุณผิดหวัง ของการจับไฟร์วอลล์ของคุณลง
นี่คือตอนนี้ nmap สามารถรายงาน "ตัวกรอง" แทนที่จะเป็น "ปิด" ตัวอย่างเช่น:
$ nmap localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
$ iptables -I INPUT -p tcp --dport 1111 -j DROP
$ nmap localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
1111/tcp filtered lmsocialserver
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
$ iptables -D INPUT 1
ดังนั้นการตั้งค่าไฟร์วอลล์ "ที่มองไม่เห็น" เพียงอย่างเดียวจึงเป็นสิ่งที่อุปกรณ์เฉพาะตั้งอยู่ระหว่างอุปกรณ์ของคุณและเลือกส่งต่อเฉพาะพอร์ต
หากคุณต้องการยุ่งกับเครื่องสแกนพื้นฐานจริงๆคุณสามารถเชื่อมต่อ TARPIT tcp ซึ่งตั้งค่า TCP Window เป็น 0 เพื่อไม่ให้มีการถ่ายโอนข้อมูลหลังจากเปิดการเชื่อมต่อละเว้นการร้องขอเพื่อปิดการเชื่อมต่อหมายความว่าสแกนเนอร์ต้องรอ เพื่อให้การเชื่อมต่อหมดเวลาหากต้องการตรวจสอบให้แน่ใจ แต่มันเป็นเรื่องเล็กน้อยสำหรับผู้โจมตีที่จะตรวจจับสิ่งนี้และทำให้เวลาของเขาสั้นมาก
ทุกสิ่งที่ถูกพิจารณาคุณอาจจะดีที่สุดเพียงแค่ใช้ REJECT หรือวางอุปกรณ์การส่งต่อพอร์ตเฉพาะระหว่างเซิร์ฟเวอร์ของคุณและอินเทอร์เน็ต
หรือเพียงแค่เรียกใช้บริการบนเครื่องที่เชื่อมต่อกับอินเทอร์เน็ตซึ่งไม่ต้องใช้ไฟร์วอลล์
โดยทั่วไปการปฏิเสธจะดีที่สุดสำหรับเว็บเซิร์ฟเวอร์เนื่องจากบริการใดก็ตามที่พยายามเข้าถึง (อาจบ่อยกว่าคุณ) จะได้รับการตอบกลับอย่างรวดเร็วและผู้ใช้หรือบริการอื่น ๆ จะไม่ถูกรอคอยหากสงสัยว่าเครือข่ายขัดข้อง
DROP
จะออกSYN/ACK
? ฉันไม่เคยเห็นสิ่งนี้ในเครื่องของฉัน
DROP
ฉันเกินไปไม่เคยเห็นพฤติกรรมนี้ภายใต้รุ่นใดSYN/ACK
ๆ iptables
หากคุณมีแหล่งข้อมูลที่สนับสนุนการอ้างสิทธิ์ของคุณมันจะมีประโยชน์มากที่สุดในการดู แน่นอนทิ้งแพ็กเก็ตที่ฉันเพิ่งทำไม่สนับสนุนการเรียกร้องของคุณ