วิธีตั้งกฎ iptables เหล่านี้ให้ทำงานเมื่อเริ่มต้น


20

ฉันมักจะใช้กฎ iptables เมื่อใดก็ตามที่ฉันเข้าสู่ระบบ จากเทอร์มินัล I พิมพ์;

sudo sh firewall.sh

การตั้งค่าคอมพิวเตอร์น้องสาวของฉันฉันต้องการให้การป้องกันไฟร์วอลล์ขั้นพื้นฐานแก่เธอ เธอจะไม่เข้าสู่ระบบในฐานะผู้ดูแลระบบเพียงบัญชีมาตรฐาน ฉันจะทำให้สคริปต์ไฟร์วอลล์ทำงานทุกครั้งที่เธอลงชื่อเข้าใช้โดยไม่ต้องพิมพ์รหัสผ่านใด ๆ ได้อย่างไร

สคริปต์ที่ฉันเขียนสำหรับคอมพิวเตอร์น้องสาวของฉันประกอบด้วย;

#!/bin/sh

modprobe ip_conntrack
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -I OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p udp --dport 53 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 443 --sport 32768:61000 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -I OUTPUT -p icmp -j DROP

iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -p udp -j DROP
iptables -I INPUT -p tcp -m tcp --syn -j DROP
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

ฉันได้วางไว้ในโฟลเดอร์บ้านของเธอเป็น firewall.sh และตั้งค่าให้สามารถเรียกใช้งานได้ (คลิกขวาที่ไฟล์และตรวจสอบตัวเลือก "อนุญาตให้เรียกใช้ไฟล์เป็นโปรแกรม" ในแท็บการอนุญาต)

การรันสคริปต์นี้จากเทอร์มินัลเมื่อรูททำงานได้ดี

หลังจากพิมพ์แล้ว

sudo sh firewall.sh

ฉันพิมพ์ลงในเทอร์มินัล

sudo iptables -L -v

และฉันได้รับ

Chain INPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             tcpflags: FIN,SYN,RST,ACK/SYN
    0     0 DROP       udp  --  any    any     anywhere             anywhere            
    0     0 DROP       icmp --  any    any     anywhere             anywhere            

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

Chain OUTPUT (policy DROP 0 packets, 0 bytes)  pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       icmp --  any    any     anywhere             anywhere            
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:https
    0     0 ACCEPT     udp  --  any    any     anywhere             anywhere             udp spts:32768:61000 dpt:domain
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:32768:61000 dpt:http
    0     0 ACCEPT     all  --  any    lo      anywhere             anywhere

ฉันจะให้สคริปต์นี้ทำงานโดยอัตโนมัติเมื่อเข้าสู่ระบบหรืออาจบันทึกกฎเหล่านี้อย่างถาวรสำหรับคอมพิวเตอร์น้องสาวของฉันได้อย่างไร คุณช่วยกรุณาระบุรหัสโดยละเอียดเนื่องจากความพยายามครั้งแรกของฉันที่วิธี rc.local และ iptables-save ยังไม่ประสบความสำเร็จมาก ในทุก ๆ การรีบูตเครือข่าย INPUT, OUTPUT และ FORWARD ทั้งหมดจะถูกรีเซ็ตเป็น ACCEPT โดยไม่มีนโยบายที่ระบุไว้เมื่อฉันพิมพ์sudo iptables -L -v


เกือบสองปีต่อมา แต่ความคิดเห็นที่สำคัญ: ตรวจสอบให้แน่ใจว่าคุณมีip6tablesกฎถ้าคุณได้รับการเชื่อมต่อ v6 วันหนึ่งเนื่องจาก IPv6 จะถูกจัดการโดยไม่ip6tables iptables
โธมัสวอร์ด

คำตอบ:


38

คุณอาจต้องการใช้iptables-persistentแพคเกจแทนที่จะยุ่งกับสคริปต์การบูตของคุณ ก่อนอื่นให้เรียกใช้สคริปต์ของคุณเพื่อตั้งค่ากฎไฟร์วอลล์ ประการที่สองเรียกใช้sudo apt-get install iptables-persistentและปฏิบัติตามคำแนะนำ เมื่อระบบขอให้บันทึกกฎปัจจุบันให้กด "ใช่" ที่ทั้งสองพร้อมต์ ตอนนี้ในการรีบูตกฎ iptables ของคุณจะถูกกู้คืน


หมายเหตุ:หากคุณเปลี่ยนกฎหลังจากนี้คุณจะต้องทำคำสั่งต่อไปนี้หลังจากการเปลี่ยนแปลง:

วิธีบันทึกกฎ IPv4 iptables ของคุณ: sudo su -c 'iptables-save > /etc/iptables/rules.v4'

วิธีบันทึกกฎ IPv6 ip6tables ของคุณ: sudo su -c 'ip6tables-save > /etc/iptables/rules.v6'


ขอบคุณที่ทำงาน หากฉันต้องการเปลี่ยนกฎชั่วคราวฉันสามารถเรียกใช้สคริปต์จากเทอร์มินัลใช่หรือไม่
Mikelane

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

เป็นความคิดที่ดีหรือไม่ที่จะทำงานsudo dpkg-reconfigure iptables-persistentหลังจากเปลี่ยนกฎ
souravc

@souravc คำถามที่ตอบกลับมาคือ "ทำไมคุณต้องการหรือต้องการ?" ความคิดคือการที่คุณจะได้ไม่ต้องและเพียงแค่สามารถเขียน (หรือเขียนทับ (คนrules.v4หรือrules.v6ไฟล์ด้วยตนเองเพื่อให้พวกเขาได้รับการจัดทำดัชนีที่บูตต่อไปหรือทันทีถ้าคุณเรียกใช้iptables-restore < /etc/iptables/rules.v4หรือip6tables-restore < /etc/iptables/rules.v6
โทมัสวอร์ด

2

สมมติว่าคุณมีกฎไฟร์วอลล์ใน:

/etc/iptables.up.rules

บางทีคำตอบที่ชัดเจนที่สุดคือสร้างไฟล์ที่เรียกว่า iptables ใน:

/etc/network/if-pre-up.d

ด้วยเนื้อหา:

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

และทำให้มันใช้ปฏิบัติการได้

sudo chmod +x /etc/network/if-pre-up.d/iptables

วิธีนี้ก่อนที่อินเทอร์เฟซเครือข่ายของคุณจะเปิดใช้งานกฎของคุณจะถูกโหลด


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