ฉันเพิ่มกฎนี้:
sudo iptables -t nat -A OUTPUT -d a.b.c.d -p tcp \
--dport 1723 -j DNAT --to-destination a.b.c.d:10000
- เมื่อรีสตาร์ทกฎคอมพิวเตอร์จะถูกลบ ทำไม?
- ฉันจะทำอย่างไรเพื่อให้กฎยังคงมีอยู่
ฉันเพิ่มกฎนี้:
sudo iptables -t nat -A OUTPUT -d a.b.c.d -p tcp \
--dport 1723 -j DNAT --to-destination a.b.c.d:10000
คำตอบ:
ไม่มีตัวเลือกใน iptables ซึ่งจะทำให้กฎของคุณถาวร แต่คุณสามารถใช้iptables-saveและiptables-restoreเพื่อให้งานของคุณสำเร็จ
ขั้นแรกให้เพิ่มกฎ iptable โดยใช้คำสั่งที่คุณให้ไว้
จากนั้นบันทึกกฎ iptables ลงในไฟล์บางไฟล์เช่น/etc/iptables.confใช้คำสั่งต่อไปนี้:
$ iptables-save > /etc/iptables.conf
เพิ่มคำสั่งต่อไปนี้ใน/etc/rc.localเพื่อรีโหลดกฎในการรีบูตทุกครั้ง
$ iptables-restore < /etc/iptables.conf
rc.localเนื่องจากจะมีช่องว่างระหว่างหน้าต่างที่เปิดอยู่ระหว่างการเริ่มบริการและนโยบายไฟร์วอลล์ ฉันชอบใช้pre-up hook สำหรับ interface loopbackใน/etc/network/interfacesการเอาชนะนี้
rc.localอาจมีผลกระทบที่ตั้งใจ แต่มันก็เป็นสิ่งที่น่ารังเกียจในสถานการณ์นี้
(เนื่องจากมีข้อเสนอแนะที่จะทำให้คำตอบนี้เป็นของตัวเอง ... )
ใน Debian iptables-persistentติดตั้ง
แพ็คเกจจะโหลด/etc/iptables/rulesให้คุณโดยอัตโนมัติระหว่างการบู๊ต
เมื่อใดก็ตามที่คุณแก้ไขกฎของคุณให้เรียกใช้/sbin/iptables-save > /etc/iptables/rulesเพื่อบันทึกกฎ คุณยังสามารถเพิ่มสิ่งนั้นลงในลำดับการปิดเครื่องได้หากต้องการ
/etc/iptables/rules.v4และ/etc/iptables/rules.v6สำหรับ IPv4 และ IPv6 ตามลำดับ หากคุณต้องการให้ตารางนำไปใช้กับการเชื่อมต่อทั้งสองประเภทคุณต้องบันทึกลงในไฟล์กฎทั้งสอง
หลังจากติดตั้งiptables-persistentด้านบนคุณสามารถบันทึกกฎด้วยคำสั่งที่สั้นกว่าต่อไปนี้บน Ubuntu 16.04+:
sudo netfilter-persistent save
และพวกเขายังสามารถคืนค่ากลับไปเป็นครั้งสุดท้ายที่คุณบันทึกไว้ด้วย:
sudo netfilter-persistent reload
iptables-persistentแพ็คเกจที่จะทำเช่นนี้