Mengelola lalu lintas jaringan adalah salah satu pekerjaan terberat yang harus dihadapi oleh administrator sistem. Dia harus konfigurasikan firewall sedemikian rupa sehingga akan memenuhi persyaratan sistem dan pengguna untuk koneksi masuk dan keluar, tanpa membuat sistem rentan terhadap serangan.
Di sinilah iptables
berguna. Iptables adalah firewall baris perintah Linux yang memungkinkan administrator sistem untuk mengelola lalu lintas masuk dan keluar melalui seperangkat aturan tabel yang dapat dikonfigurasi.
Iptables menggunakan satu set tabel yang memiliki rantai yang berisi set built-in atau aturan yang ditentukan pengguna. Berkat mereka, administrator sistem dapat memfilter lalu lintas jaringan sistemnya dengan benar.
Per manual iptables, saat ini ada 3 jenis tabel:
SARING
– ini adalah tabel default, yang berisi rantai bawaan untuk: NAT
– tabel yang dikonsultasikan ketika sebuah paket mencoba membuat koneksi baru. Ini memiliki bawaan berikut: MENGOYAKKAN
– tabel ini digunakan untuk mengubah paket. Sampai versi kernel 2.4 tabel ini hanya memiliki dua rantai, tetapi sekarang menjadi 5: Pada artikel ini, Anda akan melihat beberapa perintah berguna yang akan membantu Anda mengelola firewall kotak Linux Anda melalui iptables. Untuk tujuan artikel ini, saya akan mulai dengan perintah yang lebih sederhana dan melanjutkan ke yang lebih kompleks sampai akhir.
Pertama, Anda harus tahu cara mengelola layanan iptables di berbagai distribusi Linux. Ini cukup mudah:
Di Cent/RHEL 7 dan Fedora 22+ # systemctl mulai iptables. # systemctl stop iptables. # systemctl restart iptables.
Di Cent/RHEL 6/5 dan Fedora # /etc/init.d/iptables start # /etc/init.d/iptables stop. # /etc/init.d/iptables restart.
Jika Anda ingin memeriksa aturan yang ada, gunakan perintah berikut:
# iptables -L -n -v.
Ini harus mengembalikan output yang mirip dengan yang di bawah ini:
Chain INPUT (kebijakan ACCEPT 1129K packets, 415M bytes) pkts byte target prot opt in out source destination 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 53 0 0 TERIMA udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt: 53 0 0 TERIMA tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 67 0 0 TERIMA udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt: 67
Chain FORWARD (kebijakan TERIMA 0 paket, 0 byte) pkts byte target prot memilih keluar sumber tujuan 0 0 TERIMA semua -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 0 0 TERIMA semua -- lxcbr0 * 0.0.0.0/ 0 0.0.0.0/0
Chain OUTPUT (kebijakan MENERIMA paket 354K, 185M byte) pkts byte target prot opt in out source tujuan
Jika Anda lebih suka memeriksa aturan untuk tabel tertentu, Anda dapat menggunakan -T
pilihan diikuti oleh tabel yang ingin Anda periksa. Misalnya, untuk memeriksa aturan di NAT
tabel, Anda dapat menggunakan:
# iptables -t nat -L -v -n.
Jika Anda menemukan aktivitas yang tidak biasa atau kasar dari alamat IP, Anda dapat memblokir alamat IP tersebut dengan aturan berikut:
# iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP.
Di mana Anda perlu berubah "xxx.xxx.xxx.xxx"
dengan alamat IP yang sebenarnya. Berhati-hatilah saat menjalankan perintah ini karena Anda dapat secara tidak sengaja memblokir alamat IP Anda sendiri. NS -SEBUAH
opsi menambahkan aturan di akhir rantai yang dipilih.
Jika Anda hanya ingin memblokir TCP lalu lintas dari alamat IP itu, Anda dapat menggunakan -P
opsi yang menentukan protokol. Dengan begitu perintahnya akan terlihat seperti ini:
# iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP.
Jika Anda telah memutuskan bahwa Anda tidak ingin lagi memblokir permintaan dari alamat IP tertentu, Anda dapat menghapus aturan pemblokiran dengan perintah berikut:
# iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP.
NS -D
opsi menghapus satu atau lebih aturan dari rantai yang dipilih. Jika Anda lebih suka menggunakan opsi yang lebih panjang, Anda dapat menggunakan --menghapus
.
Terkadang Anda mungkin ingin memblokir koneksi masuk atau keluar pada port tertentu. Ini adalah ukuran keamanan yang baik dan Anda harus benar-benar memikirkan hal itu saat menyiapkan firewall Anda.
Untuk memblokir koneksi keluar pada penggunaan port tertentu:
# iptables -A OUTPUT -p tcp --dport xxx -j DROP.
Untuk mengizinkan koneksi masuk, gunakan:
# iptables -A INPUT -p tcp --dport xxx -j ACCEPT.
Dalam kedua contoh berubah "xxx"
dengan port sebenarnya yang ingin Anda izinkan. Jika Anda ingin memblokir UDP lalu lintas alih-alih TCP, cukup ubah "tcp"
dengan "udp"
dalam aturan iptables di atas.
Anda dapat mengizinkan beberapa port sekaligus, dengan menggunakan multiport, di bawah ini Anda dapat menemukan aturan tersebut untuk koneksi masuk dan keluar:
# iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT. # iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j MENERIMA.
Anda mungkin ingin membatasi koneksi tertentu pada port tertentu ke jaringan tertentu. Katakanlah Anda ingin mengizinkan koneksi keluar di port 22
ke jaringan 192.168.100.0/24
.
Anda dapat melakukannya dengan perintah ini:
# iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j TERIMA.
Beberapa pemberi kerja suka memblokir akses ke Facebook kepada karyawan mereka. Di bawah ini adalah contoh cara memblokir lalu lintas ke Facebook.
Catatan: Jika Anda seorang administrator sistem dan perlu menerapkan aturan ini, ingatlah bahwa kolega Anda mungkin berhenti berbicara dengan Anda :)
Pertama temukan alamat IP yang digunakan oleh Facebook:
# host facebook.com facebook.com memiliki alamat 66.220.156.68.
# whois 66.220.156.68 | ambil CIDR. CIDR: 66.220.144.0/20.
Anda kemudian dapat memblokir jaringan Facebook itu dengan:
# iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP.
Ingatlah bahwa rentang alamat IP yang digunakan oleh Facebook mungkin berbeda di negara Anda.
Terkadang Anda mungkin ingin meneruskan lalu lintas satu layanan ke port lain. Anda dapat mencapai ini dengan perintah berikut:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525.
Perintah di atas meneruskan semua lalu lintas masuk pada antarmuka jaringan eth0
, dari pelabuhan 25
ke pelabuhan 2525
. Anda dapat mengubah port dengan yang Anda butuhkan.
Terkadang alamat IP mungkin meminta terlalu banyak koneksi ke port web di situs web Anda. Ini dapat menyebabkan sejumlah masalah dan untuk mencegah masalah tersebut, Anda dapat menggunakan aturan berikut:
# iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/menit --limit-burst 200 -j ACCEPT.
Perintah di atas membatasi koneksi masuk dari per menit hingga 100
dan menetapkan batas ledakan ke 200
. Anda dapat mengedit limit dan limit-burst untuk kebutuhan spesifik Anda sendiri.
Beberapa administrator sistem suka memblokir permintaan ping yang masuk karena masalah keamanan. Meskipun ancamannya tidak terlalu besar, ada baiknya mengetahui cara memblokir permintaan tersebut:
# iptables -A INPUT -p icmp -i eth0 -j DROP.
Akses loopback (akses dari 127.0.0.1
) penting dan Anda harus selalu membiarkannya aktif:
# iptables -A INPUT -i lo -j ACCEPT. # iptables -A OUTPUT -o lo -j ACCEPT.
Jika Anda ingin mencatat paket yang dijatuhkan pada antarmuka jaringan eth0
, Anda dapat menggunakan perintah berikut:
# iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables menjatuhkan paket:"
Anda dapat mengubah nilainya setelah "--log-awalan"
dengan sesuatu dengan pilihan Anda. Pesan sudah masuk /var/log/messages
dan Anda dapat mencarinya dengan:
# grep "IPtables menjatuhkan paket:" /var/log/messages.
Anda dapat memblokir akses ke sistem Anda dari alamat MAC tertentu dengan menggunakan:
# iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP.
Tentu saja, Anda perlu berubah "00:00:00:00:00:00"
dengan alamat MAC aktual yang ingin Anda blokir.
Jika Anda tidak ingin memiliki terlalu banyak koneksi bersamaan yang dibuat dari satu alamat IP pada port yang diberikan, Anda dapat menggunakan perintah di bawah ini:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT.
Perintah di atas memungkinkan tidak lebih dari 3
koneksi per klien. Tentu saja, Anda dapat mengubah nomor port agar sesuai dengan layanan yang berbeda. Juga --connlimit-atas
harus diubah agar sesuai dengan kebutuhan Anda.
Setelah Anda menentukan aturan iptables Anda, Anda akan ingin mencari dari waktu ke waktu dan mungkin perlu mengubahnya. Cara mudah untuk menelusuri dalam aturan Anda adalah dengan menggunakan:
# iptables -L $tabel -v -n | grep $string.
Dalam contoh di atas, Anda perlu mengubah $tabel
dengan tabel aktual di mana Anda ingin mencari dan $string
dengan string aktual yang Anda cari.
Berikut ini contohnya:
# iptables -L INPUT -v -n | grep 192.168.0.100.
Dengan iptables, Anda dapat menentukan rantai Anda sendiri dan menyimpan aturan khusus di dalamnya. Untuk mendefinisikan rantai, gunakan:
# iptables -N filter khusus.
Sekarang Anda dapat memeriksa apakah filter baru Anda ada di sana:
# iptables -L.
Rantai INPUT (kebijakan ACCEPT) target prot opt sumber tujuan.
Rantai MAJU (kebijakan TERIMA) target prot opt sumber tujuan
OUTPUT Rantai (kebijakan ACCEPT) target prot opt sumber tujuan
Rantai filter khusus(0 referensi) target prot opt sumber tujuan
Jika Anda ingin membersihkan rantai firewall Anda, Anda dapat menggunakan:
# iptables -F.
Anda dapat menyiram rantai dari tabel tertentu dengan:
# iptables -t nat -F.
Anda dapat mengubah "nat"
dengan tabel sebenarnya rantai mana yang ingin Anda siram.
Jika Anda ingin menyimpan aturan firewall Anda, Anda dapat menggunakan iptables-save
memerintah. Anda dapat menggunakan yang berikut ini untuk menyimpan dan menyimpan aturan Anda dalam file:
# iptables-save > ~/iptables.rules.
Terserah Anda di mana Anda akan menyimpan file dan bagaimana Anda akan menamainya.
Jika Anda ingin mengembalikan daftar aturan iptables, Anda dapat menggunakan iptables-restore
. Perintahnya terlihat seperti ini:
# iptables-restore < ~/iptables.rules.
Tentu saja jalur ke file aturan Anda mungkin berbeda.
Beberapa administrator sistem mungkin diminta untuk mengonfigurasi server mereka agar sesuai dengan PCI. Ada banyak persyaratan oleh vendor kepatuhan PCI yang berbeda, tetapi ada beberapa yang umum.
Dalam banyak kasus, Anda harus memiliki lebih dari satu alamat IP. Anda harus menerapkan aturan di bawah ini untuk alamat IP situs. Berhati-hatilah saat menggunakan aturan di bawah ini dan gunakan hanya jika Anda yakin dengan apa yang Anda lakukan:
# iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP.
Jika Anda menggunakan cPanel atau panel kontrol serupa, Anda mungkin perlu memblokir portnya juga. Berikut ini contohnya:
# iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports 2082,2083,2095,2096,2525,2086,2087 -j DROP.
Catatan: Untuk memastikan Anda memenuhi persyaratan vendor PCI Anda, periksa laporan mereka dengan cermat dan terapkan aturan yang diperlukan. Dalam beberapa kasus, Anda mungkin perlu memblokir lalu lintas UDP pada port tertentu juga.
Karena lalu lintas jaringan terpisah pada saat masuk dan keluar, Anda akan ingin mengizinkan lalu lintas masuk yang mapan dan terkait. Untuk koneksi masuk lakukan dengan:
# iptables -A INPUT -m conntrack --ctstate ESTABLISHED, TERKAIT -j ACCEPT.
Untuk penggunaan keluar:
# iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT.
Beberapa paket jaringan mungkin ditandai sebagai tidak valid. Beberapa orang mungkin lebih memilih untuk mencatat paket-paket itu, tetapi yang lain lebih memilih untuk membuangnya. Untuk menjatuhkan paket yang tidak valid, Anda dapat menggunakan:
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
Beberapa sistem mungkin memiliki lebih dari satu antarmuka jaringan. Anda dapat membatasi akses ke antarmuka jaringan itu atau memblokir koneksi dari alamat IP tertentu.
Sebagai contoh:
# iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP.
Mengubah “xxx.xxx.xxx.xxx” dengan alamat IP (atau jaringan) aktual yang ingin Anda blokir.
Jika sistem Anda seharusnya tidak mengirim email apa pun, Anda dapat memblokir port keluar pada port SMTP. Misalnya Anda dapat menggunakan ini:
# iptables -A OUTPUT -p tcp --dports 25.465.587 -j REJECT.
Iptables adalah firewall kuat yang dapat Anda manfaatkan dengan mudah. Sangat penting bagi setiap administrator sistem untuk mempelajari setidaknya dasar-dasar iptables. Jika Anda ingin menemukan informasi lebih rinci tentang iptables dan opsinya, sangat disarankan untuk membaca manualnya:
# man iptables.
Jika menurut Anda kami harus menambahkan lebih banyak perintah ke daftar ini, silakan bagikan dengan kami, dengan mengirimkannya di bagian komentar di bawah.