Coba ini dengan akses root :
# Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Accept on localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow established sessions to receive traffic
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Perhatikan bahwa ini akan memutus secara brutal semua koneksi yang sedang berjalan - ini termasuk hal-hal seperti koneksi SSH yang mungkin Anda gunakan untuk mengelola server. Hanya gunakan ini jika Anda memiliki akses ke konsol lokal.
Lihat jawaban Miphix untuk cara menambahkan pengecualian untuk SSH.
Jika Anda bekerja dari jarak jauh melalui SSH, Anda mungkin ingin menambahkan ini (-I
menyisipkannya sebelum semua aturan lain di INPUT
):
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
Jika layanan SSH Anda mendengarkan di port lain, Anda harus menggunakan port tersebut, bukan 22
.
Jika tidak, Anda mungkin kehilangan akses secara tidak sengaja.
Ketahuilah bahwa jawaban lain tidak mencakup IPv6! Jika sistem Anda menerima lalu lintas IPv6, tidak ada satu pun aturan iptables yang akan berlaku untuk lalu lintas ipv6.
daripada menggunakan iptables / ip6tables secara langsung, saya sarankan menggunakan iptables-restore dan save. Alat-alat ini memungkinkan untuk menentukan konfigurasi iptables dengan banyak aturan dan memuatnya dengan mudah dengan satu perintah.
buat file (saya beri nama iptables.rules) dengan konten berikut:
*filter
# drop forwarded traffic. you only need it of you are running a router
:FORWARD DROP [0:0]
# Accept all outgoing traffic
:OUTPUT ACCEPT [623107326:1392470726908]
# Block all incoming traffic, all protocols (tcp, udp, icmp, ...) everything.
# This is the base rule we can define exceptions from.
:INPUT DROP [11486:513044]
# do not block already running connections (important for outgoing)
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# do not block localhost
-A INPUT -i lo -j ACCEPT
# do not block icmp for ping and network diagnostics. Remove if you do not want this
# note that -p icmp has no effect on ipv6, so we need an extra ipv6 rule
-4 -A INPUT -p icmp -j ACCEPT
-6 -A INPUT -p ipv6-icmp -j ACCEPT
# allow some incoming ports for services that should be public available
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# commit changes
COMMIT
Catatan saya telah menambahkan beberapa contoh tambahan jika Anda ingin mengizinkan ICMP dan lalu lintas ke port tertentu.
sekarang Anda dapat memuatnya dengan perintah berikut:
iptables-restore < iptables.rules
ip6tables-restore < iptables.rules
Sekarang aturan Anda juga mencakup ipv6 dan mudah dikelola.
Catatan tambahan untuk pengguna Debian:jika Anda puas dengan aturan Anda, Anda dapat apt install iptables-persistent
jadi aturan dipulihkan setelah reboot. Aturan tidak disimpan secara otomatis saat dimatikan, jadi jalankan netfilter-persistent save
untuk memperbarui aturan persisten.