GNU/Linux >> Belajar Linux >  >> Linux

16 tips dan trik iptables untuk sysadmin

Kernel Linux modern hadir dengan kerangka kerja pemfilteran paket bernama Netfilter. Netfilter memungkinkan Anda untuk mengizinkan, menjatuhkan, dan memodifikasi lalu lintas yang masuk dan keluar dari suatu sistem. iptables alat baris perintah userspace dibangun di atas fungsi ini untuk menyediakan firewall yang kuat, yang dapat Anda konfigurasikan dengan menambahkan aturan untuk membentuk kebijakan firewall. iptables bisa sangat menakutkan dengan serangkaian kemampuan dan sintaks perintah baroknya yang kaya. Mari kita jelajahi beberapa di antaranya dan kembangkan serangkaian tips dan trik iptables untuk banyak situasi yang mungkin dihadapi oleh administrator sistem.

Hindari mengunci diri

Skenario:Anda akan membuat perubahan pada aturan kebijakan iptables di server utama perusahaan Anda. Anda ingin menghindari mengunci diri sendiri—dan kemungkinan orang lain—keluar. (Ini menghabiskan waktu dan uang dan menyebabkan telepon Anda berdering.)

Kiat #1:Cadangkan konfigurasi iptables Anda sebelum Anda mulai kerjakan.

Cadangkan konfigurasi Anda dengan perintah:

/sbin/iptables-save > /root/iptables-works 

Kiat #2:Lebih baik lagi, sertakan stempel waktu dalam nama file.

Tambahkan stempel waktu dengan perintah:

/sbin/iptables-save > /root/iptables-works-`date +%F` 

Anda mendapatkan file dengan nama seperti:

/root/iptables-works-2018-09-11 

Jika Anda melakukan sesuatu yang mencegah sistem Anda bekerja, Anda dapat memulihkannya dengan cepat:

/sbin/iptables-restore < /root/iptables-works-2018-09-11 
ln –s /root/iptables-works-`date +%F` /root/iptables-works-latest 

Kiat #4:Letakkan aturan khusus di bagian atas kebijakan dan aturan umum di bagian bawah.

Hindari aturan umum seperti ini di bagian atas aturan kebijakan:

iptables -A INPUT -p tcp --dport 22 -j DROP 

Semakin banyak kriteria yang Anda tentukan dalam aturan, semakin kecil kemungkinan Anda mengunci diri. Alih-alih aturan yang sangat umum di atas, gunakan sesuatu seperti ini:

iptables -A INPUT -p tcp --dport 22 –s 10.0.0.0/8 –d 192.168.100.101 -j DROP 

Aturan ini menambahkan (-A ) ke INPUT rantai aturan yang akan MENURUT paket apa pun yang berasal dari blok CIDR 10.0.0.0/8 pada TCP (-p tcp ) port 22 (--dport 22 ) ditujukan untuk alamat IP 192.168.100.101 (-d 192.168.100.101 ).

Ada banyak cara Anda bisa lebih spesifik. Misalnya, menggunakan -i eth0 akan membatasi pemrosesan ke satu NIC di server Anda. Dengan cara ini, tindakan pemfilteran tidak akan menerapkan aturan ke eth1 .

Kiat #5:Daftar putih alamat IP Anda di bagian atas aturan kebijakan Anda.

Ini adalah metode yang sangat efektif untuk tidak mengunci diri. Semua orang, tidak begitu banyak.

iptables -I INPUT -s <your IP> -j ACCEPT 

Anda harus menempatkan ini sebagai pertama aturan agar berfungsi dengan baik. Ingat, -saya memasukkannya sebagai aturan pertama; -A menambahkannya ke akhir daftar.

Kiat #6:Ketahui dan pahami semua aturan dalam kebijakan Anda saat ini.

Tidak membuat kesalahan sejak awal adalah setengah dari pertempuran. Jika Anda memahami cara kerja di balik kebijakan iptables Anda, itu akan membuat hidup Anda lebih mudah. Gambarkan diagram alur jika Anda harus. Ingat juga:Apa yang dilakukan kebijakan dan apa yang seharusnya dilakukan dapat menjadi dua hal yang berbeda.

Menyiapkan kebijakan firewall stasiun kerja

Skenario:Anda ingin menyiapkan workstation dengan kebijakan firewall yang membatasi.

Kiat #1:Tetapkan kebijakan default sebagai DROP.

# Menetapkan kebijakan default DROP
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

Kiat #2:Beri pengguna jumlah layanan minimum yang diperlukan untuk menyelesaikan pekerjaannya.

Aturan iptables harus mengizinkan workstation untuk mendapatkan alamat IP, netmask, dan informasi penting lainnya melalui DHCP (-p udp --dport 67:68 --sport 67:68 ). Untuk pengelolaan jarak jauh, aturan harus mengizinkan SSH masuk (--dport 22 ), email keluar (--dport 25 ), DNS (--dport 53 ), ping keluar (-p icmp ), Protokol Waktu Jaringan (--dport 123 --sport 123 ), dan HTTP keluar (--dport 80 ) dan HTTPS (--dport 443 ).

# Menetapkan kebijakan default DROP
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

# Menerima koneksi terkait atau yang dibuat
-I INPUT  1 -m state --state TERKAIT,ESTABLISHED -j ACCEPT
-I OUTPUT 1 -m state -- state RELATED,ESTABLISHED -j ACCEPT

# Izinkan semua lalu lintas pada antarmuka loopback
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

# Izinkan permintaan DHCP keluar
-A OUTPUT –o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT

# Allow SSH masuk
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state BARU  -j TERIMA

# Izinkan email keluar
-A OUTPUT -i eth0 -p tcp -m tcp --dport 25 -m state --state BARU  -j TERIMA

# Pencarian DNS Keluar
-A OUTPUT -o eth0 -p udp - m udp --dport 53 -j ACCEPT

# Permintaan PING keluar
-A OUTPUT –o eth0 -p icmp -j ACCEPT

# Protokol Waktu Jaringan Keluar (NTP) permintaan
-A OUTPU T –o eth0 -p udp --dport 123 --sport 123 -j TERIMA

# HTTP Keluar
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 - status m --status BARU -j TERIMA
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -m status --status BARU -j TERIMA

COMMIT

Batasi rentang alamat IP

Skenario:CEO perusahaan Anda menganggap karyawan menghabiskan terlalu banyak waktu di Facebook dan tidak menyelesaikan pekerjaan apa pun. CEO memberi tahu CIO untuk melakukan sesuatu tentang karyawan yang membuang-buang waktu di Facebook. CIO memberitahu CISO untuk melakukan sesuatu tentang karyawan yang membuang-buang waktu di Facebook. Akhirnya, Anda diberitahu bahwa karyawan membuang terlalu banyak waktu di Facebook, dan Anda harus melakukan sesuatu. Anda memutuskan untuk memblokir semua akses ke Facebook. Pertama, cari tahu alamat IP Facebook dengan menggunakan host dan siapa perintah.

host -t a www.facebook.com
www.facebook.com adalah alias untuk star.c10r.facebook.com.
star.c10r.facebook.com memiliki alamat 31.13.65.17
siapa 31.13.65.17 | grep inetnum
inetnum:       31.13.64.0 - 31.13.127.255

Kemudian konversikan rentang tersebut ke notasi CIDR dengan menggunakan halaman Konversi CIDR ke IPv4. Anda mendapatkan 31.13.64.0/18 . Untuk mencegah akses keluar ke www.facebook.com, masukkan:

iptables -A OUTPUT -p tcp -i eth0 –o eth1 –d 31.13.64.0/18 -j DROP 

Mengatur menurut waktu

Skenario:Reaksi balik dari karyawan perusahaan atas penolakan akses ke akses Facebook menyebabkan CEO sedikit mengalah (itu dan asisten administrasinya mengingatkannya bahwa dia selalu memperbarui halaman Facebook-nya). CEO memutuskan untuk mengizinkan akses ke Facebook.com hanya saat makan siang (12 siang hingga 1 siang). Dengan asumsi kebijakan default adalah DROP, gunakan fitur waktu iptables untuk membuka akses.

iptables –A OUTPUT -p tcp -m multiport --dport http,https -i eth0 -o eth1 -m waktu --timestart 12:00 --timestart 12:00 –timestop 13:00 –d 
31.13.64.0/18  -j TERIMA

Perintah ini menyetel kebijakan untuk mengizinkan (-j ACCEPT ) http dan https (-m multiport --dport http,https ) antara tengah hari (--timestart 12:00 ) dan 13PM (--timestop 13:00 ) ke Facebook.com (–d 31.13.64.0/18 ).

Atur berdasarkan waktu—Ambil 2

Skenario:Selama waktu henti yang direncanakan untuk pemeliharaan sistem, Anda harus menolak semua lalu lintas TCP dan UDP antara jam 02.00 dan 03.00 sehingga tugas pemeliharaan tidak akan terganggu oleh lalu lintas yang masuk. Ini akan membutuhkan dua aturan iptables:

iptables -A INPUT -p tcp -m time --timestart 02:00 --timestop 03:00 -j DROP 
iptables -A INPUT -p udp -m time --timestart 02:00 -- timestop 03:00 -j DROP

Dengan aturan ini, lalu lintas TCP dan UDP (-p tcp dan -p udp ) ditolak (-j DROP ) antara jam 2 pagi (--timestart 02:00 ) dan 03:00 (--timestop 03:00 ) pada masukan (-A INPUT ).

Batasi koneksi dengan iptables

Skenario:Server web Anda yang terhubung ke internet sedang diserang oleh aktor jahat dari seluruh dunia yang mencoba melakukan DoS (Denial of Service) mereka. Untuk mengurangi serangan ini, Anda membatasi jumlah koneksi yang dapat dimiliki satu alamat IP ke server web Anda:

iptables –A INPUT –p tcp –syn -m multiport -–dport http,https –m connlimit -–connlimit-above 20 –j REJECT -–reject-with-tcp-reset 

Mari kita lihat apa yang dilakukan aturan ini. Jika tuan rumah menghasilkan lebih dari 20 (-–connlimit-above 20 ) koneksi baru (–p tcp –syn ) dalam satu menit ke server web (-–dport http,https ), tolak sambungan baru (–j REJECT ) dan beri tahu host penghubung bahwa Anda menolak koneksi (-–reject-with-tcp-reset ).

Pantau aturan iptables

Skenario:Karena iptables beroperasi atas dasar "pertandingan pertama menang" saat paket melintasi aturan dalam rantai, aturan yang sering dicocokkan harus berada di dekat bagian atas kebijakan dan aturan yang lebih jarang dicocokkan harus berada di dekat bagian bawah. Bagaimana Anda mengetahui aturan mana yang paling banyak dilalui atau paling sedikit sehingga dapat diurutkan lebih dekat ke atas atau ke bawah?

Kiat #1:Lihat berapa kali setiap aturan terkena.

Gunakan perintah ini:

iptables -L -v -n –line-numbers 

Perintah akan mencantumkan semua aturan dalam rantai (-L ). Karena tidak ada rantai yang ditentukan, semua rantai akan dicantumkan dengan keluaran verbose (-v ) menampilkan penghitung paket dan byte dalam format numerik (-n ) dengan nomor baris di awal setiap aturan yang sesuai dengan posisi aturan itu dalam rantai.

Dengan menggunakan jumlah paket dan byte, Anda dapat mengurutkan aturan yang paling sering dilalui ke atas dan aturan yang paling jarang dilalui ke bawah.

Kiat #2:Hapus aturan yang tidak perlu.

Aturan mana yang tidak mendapatkan kecocokan sama sekali? Ini akan menjadi kandidat yang baik untuk dihapus dari kebijakan. Anda dapat mengetahuinya dengan perintah ini:

iptables -nvL | grep -v "0     0" 

Catatan:itu bukan tab di antara angka nol; ada lima spasi di antara nol.

Kiat #3:Pantau apa yang terjadi.

Anda ingin memantau apa yang terjadi dengan iptables secara real time, seperti dengan top . Gunakan perintah ini untuk memantau aktivitas aktivitas iptables secara dinamis dan hanya menampilkan aturan yang sedang dilintasi secara aktif:

watch --interval=5 'iptables -nvL | grep -v "0     0"' 

tonton menjalankan 'iptables -nvL | grep -v "0     0"' setiap lima detik dan menampilkan layar pertama dari outputnya. Ini memungkinkan Anda untuk melihat paket dan jumlah byte berubah dari waktu ke waktu.

Laporkan tentang iptables

Skenario:Manajer Anda menganggap firewall iptables ini sangat bagus, tetapi laporan aktivitas harian akan lebih baik lagi. Terkadang menulis laporan lebih penting daripada mengerjakannya.

Gunakan filter paket/firewall/IDS log analyzer FWLogwatch untuk membuat laporan berdasarkan log firewall iptables. FWLogwatch mendukung banyak format log dan menawarkan banyak opsi analisis. Ini menghasilkan ringkasan harian dan bulanan dari file log, memungkinkan administrator keamanan untuk mengosongkan banyak waktu, mempertahankan kontrol yang lebih baik atas keamanan jaringan, dan mengurangi serangan yang tidak diketahui.

Berikut adalah contoh keluaran dari FWLogwatch:

Lebih dari sekedar MENERIMA dan DROP

Kami telah membahas banyak aspek iptables, mulai dari memastikan Anda tidak mengunci diri saat bekerja dengan iptables hingga memantau iptables hingga memvisualisasikan aktivitas firewall iptables. Ini akan membantu Anda memulai jalan untuk mewujudkan lebih banyak tip dan trik iptables.


Linux
  1. 5 podcast teratas untuk berita dan tips Linux

  2. Tip dan trik menggunakan CUPS untuk mencetak dengan Linux

  3. Tips dan trik untuk curl dan wget

  1. 5 tips rsync tingkat lanjut untuk sysadmin Linux

  2. Bangun lab dalam 36 detik, jalankan Podman di Mac, dan tips lainnya untuk sysadmin

  3. Perintah Linux satu baris teratas, sesuaikan gambar VM, dan tips lainnya untuk sysadmin

  1. Kiat dan trik variabel lingkungan Linux

  2. Menulis aplikasi Python, membangun lab Linux, dan tips lainnya untuk sysadmin

  3. 8 Tip dan Trik Baris Perintah MySQL Teratas