Bagaimana mengatur aturan iptables ini untuk dijalankan saat startup

20

Saya biasanya menjalankan aturan iptables saya setiap kali saya masuk. Dari terminal I ketik;

sudo sh firewall.sh

Menyiapkan komputer kakak saya, saya ingin memberinya perlindungan firewall dasar. Dia tidak akan masuk sebagai admin, hanya akun standar. Bagaimana saya bisa membuat skrip firewall dijalankan setiap kali dia masuk tanpa harus mengetikkan kata sandi?

Naskah yang saya tulis untuk komputer kakak saya berisi;

#!/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

Saya telah meletakkannya di folder rumahnya sebagai firewall.sh dan mengaturnya agar dapat dieksekusi (klik kanan pada file tersebut, dan memeriksa opsi "izinkan file pelaksana sebagai program" di tab izin).

Menjalankan skrip ini dari terminal karena root berfungsi dengan baik.

Setelah mengetik;

sudo sh firewall.sh

Saya mengetik di terminal

sudo iptables -L -v

dan saya mengerti

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

Bagaimana saya bisa menjalankan skrip ini secara otomatis saat login, atau mungkin menyimpan aturan ini secara permanen untuk komputer saudara saya? Bisakah Anda memberikan beberapa kode terperinci, karena upaya pertama saya di metode rc.local dan iptables-save belum terlalu berhasil. Pada setiap reboot, semua rantai INPUT, OUTPUT dan FORWARD diatur ulang ke ACCEPT, tanpa kebijakan yang tercantum saat saya mengetiksudo iptables -L -v

Mikelane
sumber
Hampir dua tahun kemudian, tetapi sebuah komentar penting: pastikan Anda memiliki ip6tablesaturan jika Anda mendapatkan konektivitas v6 suatu hari, karena IPv6 ditangani oleh ip6tablesdan tidak iptables.
Thomas Ward

Jawaban:

38

Anda mungkin ingin menggunakan iptables-persistentpaket daripada mengacaukan skrip boot Anda. Pertama, jalankan skrip Anda untuk mengatur aturan firewall. Kedua, jalankan sudo apt-get install iptables-persistent, dan ikuti petunjuknya. Ketika diminta untuk menyimpan aturan saat ini, tekan "Ya" di kedua prompt. Sekarang, saat reboot, aturan iptables Anda akan dikembalikan.


CATATAN: Jika Anda mengubah aturan setelah ini, Anda harus melakukan perintah berikut setelah perubahan:

Untuk menyimpan aturan IPv4 iptables Anda: sudo su -c 'iptables-save > /etc/iptables/rules.v4'

Untuk menyimpan aturan IPv6 IPv6 Anda: sudo su -c 'ip6tables-save > /etc/iptables/rules.v6'

Thomas Ward
sumber
Terima kasih, itu berhasil. Jika saya ingin sementara mengubah aturan, saya bisa menjalankan skrip dari terminal ya?
Mikelane
Ya, atau Anda dapat secara langsung memanipulasi sistem iptables secara langsung. NAMUN, jika Anda berencana untuk menggunakan aturan sementara secara terus-menerus, aturan baru tidak dijamin akan disimpan kecuali jika Anda melakukan perintah yang saya nyatakan dalam jawaban saya.
Thomas Ward
Apakah ini ide buruk untuk dijalankan sudo dpkg-reconfigure iptables-persistentsetelah mengubah aturan.
souravc
@souravc pertanyaan yang menjawabnya adalah "Mengapa Anda perlu atau ingin?" Idenya adalah bahwa Anda tidak perlu dan hanya dapat menulis ulang (atau menimpa ( rules.v4atau rules.v6file secara manual sehingga mereka diindeks pada boot berikutnya, atau segera jika Anda menjalankan iptables-restore < /etc/iptables/rules.v4atauip6tables-restore < /etc/iptables/rules.v6
Thomas Ward
2

Dengan asumsi Anda memiliki aturan firewall di:

/etc/iptables.up.rules

Mungkin jawaban yang paling jelas adalah membuat file bernama iptables di:

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

dengan konten:

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

dan membuatnya dapat dieksekusi menggunakan

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

Dengan cara ini sebelum antarmuka jaringan Anda diaktifkan aturan Anda akan dimuat.

Antonio J. de Oliveira
sumber
Terima kasih, apakah itu melempar log di mana saja? Ini tidak berfungsi dan saya menduga ini disebabkan server dns saya yang digunakan memiliki resolver yang belum dimulai ketika host saya melakukan booting.
Dimitri Kopriwa