จะบล็อกพอร์ตทั้งหมดยกเว้น 80,443 ด้วย iptables ได้อย่างไร [ซ้ำ]


15

การบล็อกพอร์ตทั้งหมด (เข้าและออก) นั้นง่าย แต่ก็ยากสำหรับคำว่า "ยกเว้น" ฉันไม่ทราบกฎใด ๆ ที่เป็นไปตามเงื่อนไข

PS: ฉันรู้ว่าคำถามนี้ไม่มีอะไรใหม่ แต่ที่จริงแล้วฉันไม่พบสิ่งใดที่ช่วยได้ ดังนั้นช่วยฉันหน่อยได้ไหม!


คุณไม่สามารถปิดพอร์ตทั้งหมดแล้วเปิดพอร์ตเดียวในบรรทัดถัดไปได้หรือไม่
sinni800

ฉันทำเช่นนี้: iptables -P DROP iptables -P เอาท์พุท DROP iptables -P ไปข้างหน้า DROP iptables -I INPUT -p tcp - พอร์ต 80 -j ยอมรับ ------ มันไม่ทำงาน!
user71169

คำตอบ:


25

ก่อนอื่น! เป็นสัญลักษณ์ไม่ได้

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

ประการที่สองกฎที่คุณเขียนอาจไม่ได้ผลลัพธ์ที่คาดหวัง คุณทิ้งทุกอย่างรวมถึงการตอบสนองต่อการเชื่อมต่อที่พอร์ต 80 ดังนั้นคุณจะไม่สามารถเชื่อมต่อกับมันเพื่อวัตถุประสงค์ของเว็บเซิร์ฟเวอร์

กฎเหล่านี้อนุญาตให้มีการเชื่อมต่อที่เกี่ยวข้องและที่เชื่อมโยงดังนั้นเว็บเซิร์ฟเวอร์ควรทำงานหากเป็นจริงสิ่งที่คุณพยายามทำ

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT  --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP

2
ไม่ควร!หนีเช่นนี้\!หากใช้ Bash shell?
Cristian Ciupitu

@CristianCiupitu ไม่จำเป็นต้องหลีกเลี่ยง คุณอาจมีบางอย่างแปลก ๆ เกิดขึ้น แต่เมื่อทุบตีฉันไม่จำเป็นต้องหลบหนี
cybernard

ฉันตรวจสอบผลลัพธ์ของ "iptables -nvL" เพื่อดูแพ็คเกจในการเชื่อมต่อ ดูเหมือนว่าจะทำงานกฎของคุณ แต่ฉันไม่สามารถตรวจสอบว่ามันใช้งานได้จริงหรือไม่ยกเว้นการใช้แอพบางตัวที่ใช้พอร์ตเหล่านั้น แอปใช้พอร์ตไม่ได้หมายความว่าจะใช้พอร์ตนั้นเท่านั้น ดังนั้นแนะนำให้ตรวจสอบ?
user71169

1
@cybernard ใช่คุณพูดถูก ที่ราบ!ไม่จำเป็นต้องหลบหนี ขออภัยเกี่ยวกับการเตือนที่ผิดพลาด
Cristian Ciupitu

3
@ MohammadShahid กฎไม่ได้เป็นการถาวรโดยอัตโนมัติรีบูตและมันจะหายไปและคุณสามารถเข้าสู่ระบบ คุณต้องเพิ่ม 22 ลงในรายการพอร์ตหากคุณต้องการรักษาการเชื่อมต่อ ssh
cybernard

5
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

สิ่งนี้จะให้สิ่งที่คุณต้องการ


4
จำไว้ว่าถ้าคุณเชื่อมต่อผ่าน SSH คุณควรเปิดพอร์ต TCP 22
Maximilian Ast

ใช่อย่าลืมเกี่ยวกับพอร์ต SSH ของคุณอาจจะเพิ่มพอร์ต SSH ของคุณก่อนที่คุณจะตั้งค่านโยบายเริ่มต้นที่จะลดลง ;)
James Little

3

คุณสามารถตั้งค่าการกระทำเริ่มต้นของคุณเป็น DROP แล้วสร้างกฎข้อยกเว้นเพื่ออนุญาต 80 และ 443 ดังนี้:

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT       # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT      # HTTPS

iptables จะผ่านรายการ 'ข้อยกเว้น' จนกว่าจะพบการแข่งขัน จากนั้นจะดำเนินการตามที่ระบุโดย-jพารามิเตอร์ (ACCEPT ในกรณีนี้) หากไม่พบคู่ที่ตรงกันจะกลับไปใช้นโยบายเริ่มต้นและวางแพ็กเก็ต

โปรดทราบว่าด้วยวิธีนี้การแก้ปัญหาโดเมนย่อยใด ๆ จะถูกล็อคออก ตัวอย่างเช่นด้วยวิธีนี้คุณจะใช้งานได้บน www.mydomain.com ถูกต้องทั้งหมด แต่โดเมนย่อยของคุณสมมติว่า www.sub.mydomain.com จะไม่เปิดขึ้นสำหรับข้อผิดพลาด DNS


ควรใช้งานได้ แต่ไม่ใช่ ฉันสับสนมาก
user71169

อะไรไม่ทำงาน มันอนุญาตแพ็กเก็ตที่เข้ามาทั้งหมดหรือไม่? คุณสามารถอัปเดตคำถามของคุณด้วยผลลัพธ์ของได้iptables -nvLหรือไม่
mtak

ทำไมถึงลงคะแนน? ฉันทำงานในสายการผลิตอยู่แล้วดังนั้นฉันจึงมั่นใจว่ามันใช้งานได้จริง 100%
mtak

ขออภัย! ไม่ใช่ฉันมีคนทำแบบนั้น :)) อ๋อคุณแน่ใจเหมือนฉัน แต่มันไม่ทำงาน นั่นเป็นเหตุผลที่ฉันต้องตั้งคำถาม
user71169

2
sshอย่าทำอย่างนี้มากกว่า
Ashesh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.