ข้อผิดพลาด iptables: ตัวเลือกที่ไม่รู้จัก --dport


19

คำสั่ง iptables --dportไม่ตระหนักถึงหนึ่งในตัวเลือกที่นิยมใช้มากที่สุดเมื่อกำหนดกฎ:

ฉันได้รับข้อผิดพลาดนี้:

[root@dragonweyr /home/calyodelphi]# iptables -A INPUT --dport 7777 -j ACCEPT_TCP_UDP
iptables v1.4.7: unknown option `--dport'
Try `iptables -h' or 'iptables --help' for more information.

คำสั่งเพิ่มกฎด้านบนเป็นเพียงตัวอย่างสำหรับการเปิดใช้งานการเชื่อมต่อ Terraria

นี่คือสิ่งที่ฉันมีในปัจจุบันเป็นการกำหนดค่า iptables เปล่า ( listiptablesเป็นนามแฝงiptables -L -v --line-numbers) และเป็นที่ชัดเจนว่า--dportได้ทำงานในอดีตที่ผ่านมา:

root@dragonweyr /home/calyodelphi]# listiptables 
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       39  4368 ACCEPT     all  --  lo     any     anywhere             anywhere            
2      114 10257 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
3        1    64 ACCEPT     tcp  --  eth1   any     anywhere             anywhere            tcp dpt:EtherNet/IP-1 
4       72 11610 ACCEPT     all  --  eth1   any     anywhere             anywhere            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 91 packets, 10045 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain ACCEPT_TCP_UDP (0 references)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            

ฉันพยายามกำหนดโซ่แบบกำหนดเอง (โดยได้รับแรงบันดาลใจจากคำถามนี้ ) เพื่อยอมรับการเชื่อมต่อ tcp & udp ดังนั้นฉันจึงไม่ต้องกำหนดกฎสองข้อสำหรับทุกสิ่งที่ฉันต้องการเปิดใช้งาน tcp และ udp สำหรับ (เช่น Minecraft หรือ เซิร์ฟเวอร์ Terraria หรือบริการอื่นทั้งหมด) แต่สิ่งนี้ใช้ไม่ได้:

[root@dragonweyr /home/calyodelphi]# iptables -P ACCEPT_TCP_UDP DROP
iptables: Bad built-in chain name.

นี่เป็นเรื่องที่น่าหงุดหงิดมากในแง่ที่สุภาพ (จำนวนการสบประมาทที่เกี่ยวข้องกับเรื่องนี้จะทำให้กะลาสีบอกให้ฉันดูปากของฉัน) Google-fu ของฉันแย่มากดังนั้นฉันยังหาวิธีแก้ปัญหาไม่ได้เลย ฉันใช้ CentOS 6.5 บนเราเตอร์ ความช่วยเหลือและคำแนะนำใด ๆ ที่คุณสามารถเสนอได้นั้นยอดเยี่ยม

แก้ไข:

คำถามโบนัส: ฉันวางแผนที่จะกำหนดค่าการส่งต่อพอร์ตเช่นกัน ยังจำเป็นต้องตั้งกฎเพื่อยอมรับการเชื่อมต่อขาเข้าผ่านพอร์ตที่ระบุหรือไม่

คำตอบ:


27

ครั้งแรกให้-pตัวเลือกที่เหมือนหรือ -p tcp-p udp

ตัวอย่าง:

iptables -A อินพุต -p tcp --dport 22 -m state - รัฐใหม่ -j DROP

iptables -A อินพุต -p udp --dport 53 --sport 1024: 65535 -j ACCEPT

คุณสามารถลองได้-p allแต่ฉันไม่เคยทำแบบนั้นและไม่พบการสนับสนุนมากเกินไปในตัวอย่าง


1
ฉันเพิ่งลองสิ่งนี้ด้วย-p allและฉันได้รับข้อผิดพลาดเดียวกันทั้งหมด unknown option --dport. มันใช้งานได้-p tcpแต่นั่นไม่ได้ช่วยฉันในกรณีนี้เพราะมันนำไปสู่ปัญหาเดียวกัน: การกำหนดกฎ tcp / udp เฉพาะสำหรับทุกสิ่ง
Calyo Delphi

จากประสบการณ์ของฉันการใช้งานallไม่เคยทำงานกับการระบุพอร์ต อย่างไรก็ตามแทนที่จะมีกฎหลายข้อสำหรับโปรโตคอลที่แตกต่างกันคุณสามารถคิดถึงกฎในทิศทางที่ต่างออกไป สร้างกฎตามโปรโตคอลแล้วใช้multiportsตัวเลือกเพื่อจัดกลุ่มกฎบางอย่างเข้าด้วยกัน
canadmos

ดังนั้นถ้าฉันต้องการเปิดใช้งานการเชื่อมต่อ Terraria และ Minecraft ฉันสามารถใช้มัลติพอร์ตเพื่อเปิด 7777 และ 25565 และสร้างกฎ TCP และ UDP สำหรับแต่ละพอร์ตได้หรือไม่
Calyo Delphi

3
ตัวเลือกในการ -p จะต้องเป็นโปรโตคอลเดียวที่มีแนวคิดของพอร์ต ( -p ICMP --dport whateverจะไม่ทำงานอย่างใดอย่างหนึ่งด้วยเหตุผลที่ชัดเจน)
Falcon Momot

9

จำเป็นต้องใช้โปรโตคอล (-p) หากคุณใช้ --dport ตัวอย่าง:

-p tcp

นอกจากนี้จะต้องระบุโปรโตคอลที่มีแนวคิดของพอร์ตตามที่ @FalconMomot ชี้ให้เห็นในความคิดเห็นก่อนหน้านี้
CVn

คุณถูกต้องสำหรับรายละเอียดนั้น :)
Diego Woitasen

3

@dmourati และ @diegows ตอบคำถามแรกของคุณแล้วดังนั้นฉันจะตอบคำถามที่สองของคุณ และคำถามโบนัส และฉันจะใส่ทิปโบนัสเข้าไปด้วย)

iptables -P เพียง แต่ยอมรับโซ่ BUILT-IN ในfilterตารางที่จะเป็นINPUT, OUTPUTและFORWARDโซ่

การส่งต่อพอร์ตไม่ได้รับการจัดการโดยINPUTลูกโซ่ดังนั้นคุณไม่จำเป็นต้องเปิดพอร์ตในINPUTลูกโซ่ มันไม่ได้รับการจัดการโดยFORWARDห่วงโซ่แม้ว่า ระวังให้ดี

เคล็ดลับพิเศษ:เมื่อเรียนรู้และ / หรือการแก้ไขปัญหาiptablesการส่งออกของเป็นหัวและไหล่ดีกว่าการส่งออกของiptables-save iptables -L -v --line-numbersลองคุณจะประหลาดใจ :)


+1 สำหรับคำตอบที่ดี แต่ฉันรู้สึกประหลาดใจเล็กน้อยกับความคิดเห็นล่าสุดของคุณ ฉันเกลียดการวินิจฉัยiptablesปัญหาจาก-saveผลลัพธ์ ทำไมคุณพบมันได้ดีกว่าiptables -L -n -v [--line-numbers]?
MadHatter สนับสนุน Monica

@MadHatter ตัวอย่างง่ายๆ: คุณสามารถเห็นกฎที่มี--dportตัวเลือกจริง ๆ-p tcpอยู่ข้างหน้า คุณสามารถดูว่าการประมวลผลกฎกระโดดขึ้นจากห่วงโซ่ในตัว (เช่น INPUT) ไปยังห่วงโซ่ที่กำหนดเองได้อย่างไร (เช่น ACCEPT_TCP_UDP) สองคนนี้เป็นข้อมูลที่สำคัญคือไม่iptables -L -nสามารถมองเห็นได้ในการส่งออกของ
pepoluan

3
ประโยชน์อีกอย่าง: ฉันทำได้iptables-save > somefileแก้ไขsomefileโดยใช้เสียงเรียกเข้าแล้วทำการiptables-apply -t 600 somefileทดสอบ ถ้าฉันปิดกั้นตัวเองโดยไม่ตั้งใจหลังจาก 600 วินาทีกฎก็จะเปลี่ยนกลับ
pepoluan

เคล็ดลับโบนัสได้รับการชื่นชมอย่างมากและถูกใช้ไปแล้ว ฉันใช้iptables-saveเพื่อช่วยตัวเองเรียนรู้จากการดัมพ์แบบดิบก่อนที่ฉันจะถามคำถามนี้ ฉันไม่ได้คาดหวังว่าFORWARDโซ่จะเป็นจุดที่ฉันต้องใส่ใจกับการส่งต่อพอร์ตอย่างไรก็ตาม ฉันจะต้องอ่านเกี่ยวกับเรื่องนั้น
Calyo Delphi

@CalyoDelphi หากคุณค้นหา "netfilter packet flow diagram" คุณจะเห็นว่าทุก ๆ table & chain ใช้ ;-)
pepoluan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.