ช่วยด้วยกฎ iptables วิธีอนุญาตพอร์ตก่อนกฎ REJECT


0

ฉันใช้ iptables เพื่อทำเครื่องหมายแพ็คเก็ตสำหรับผู้ใช้ vpn และทำการแยกอุโมงค์ ผู้ใช้ vpn มีช่องสัญญาณผ่านอินเตอร์เฟส tun0 และผู้ใช้รายอื่นสามารถเข้าถึงอินเทอร์เน็ตได้โดยตรง ทุกอย่างทำงานได้ตามที่คาดหวัง แต่ฉันมีปัญหากับกฎข้อหนึ่งปฏิเสธคือฉันไม่เข้าใจว่ากฎนั้นทำอะไรและไวยากรณ์ ตอนนี้ฉันต้องการเปิดพอร์ตผ่านการเชื่อมต่อ VPN ฉันสามารถทำได้เมื่อฉันลบกฎ OUTPUT REJECT ล่าสุดออกจากนั้นก็ใช้งานได้ดี ฉันควรเพิ่มกฎใดไว้ก่อนกฎการปฏิเสธเพื่ออนุญาตให้พอร์ตทำงานและยังคงกฎการปฏิเสธไว้ได้

export INTERFACE="tun0"
export VPNUSER="vpn"
export LOCALIP="192.168.1.28"
export NETIF="eth0"

# flushes all the iptables rules, if you have other rules to use then add them into the script
iptables -F -t nat
iptables -F -t mangle
iptables -F -t filter

# mark packets from $VPNUSER
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT ! --dest $LOCALIP -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT --dest $LOCALIP -p udp --dport 53 -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT --dest $LOCALIP -p tcp --dport 53 -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT ! --src $LOCALIP -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT -j CONNMARK --save-mark

# allow responses
iptables -A INPUT -i $INTERFACE -m conntrack --ctstate ESTABLISHED -j ACCEPT

# allow open TCP port 47657

iptables -A INPUT i $INTERFACE -p tcp --dport 47657 -j ACCEPT

# block everything incoming on $INTERFACE to prevent accidental exposing of ports
iptables -A INPUT -i $INTERFACE -j REJECT

# let $VPNUSER access lo and $INTERFACE
iptables -A OUTPUT -o lo -m owner --uid-owner $VPNUSER -j ACCEPT
iptables -A OUTPUT -o $INTERFACE -m owner --uid-owner $VPNUSER -j ACCEPT

# all packets on $INTERFACE needs to be masqueraded
iptables -t nat -A POSTROUTING -o $INTERFACE -j MASQUERADE

# reject connections from predator IP going over $NETIF
iptables -A OUTPUT ! --src $LOCALIP -o $NETIF -j REJECT

ปัญหาเกิดขึ้นกับบรรทัดสุดท้าย:

iptables -A OUTPUT ! --src $LOCALIP -o $NETIF -j REJECT

1) ฉันไม่เข้าใจว่าบรรทัดนี้ทำอะไรและไวยากรณ์

2) ถ้าฉันลบบรรทัดสุดท้ายนี้พอร์ต 47657 จะเปิดและใช้งานอยู่ หากรวมบรรทัดข้างต้นไว้พอร์ตจะถูกปิด ฉันควรใส่กฎอะไรก่อนกฎ OUTPUT REJECT เพื่อให้พอร์ต 47657 เปิดเท่านั้น

ขอบคุณมาก!

คำตอบ:


0

อะไรแบบนั้น:

iptables -I อินพุต -p tcp --dport 47657 -j ยอมรับ

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

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