ฉันเพิ่มกฎนี้:
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
แพ็คเกจที่จะทำเช่นนี้