Gunakan Network Firewall untuk menangkap nama domain DNS dari Indikasi Nama Server untuk lalu lintas keluar - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Gunakan Network Firewall untuk menangkap nama domain DNS dari Indikasi Nama Server untuk lalu lintas keluar

Kirankumar Chandrashekar, Amazon Web Services

Ringkasan

Pola ini menunjukkan cara menggunakan AWS Network Firewall untuk mengumpulkan nama domain DNS yang disediakan oleh Server Name Indication (SNI) di header HTTPS lalu lintas jaringan keluar Anda. Network Firewall adalah layanan terkelola yang memudahkan penerapan perlindungan jaringan penting untuk Amazon Virtual Private Cloud (Amazon VPC), termasuk kemampuan untuk mengamankan lalu lintas keluar dengan firewall yang memblokir paket yang gagal memenuhi persyaratan keamanan tertentu. Mengamankan lalu lintas keluar ke nama domain DNS tertentu disebut penyaringan jalan keluar, yang merupakan praktik pemantauan dan berpotensi membatasi aliran informasi keluar dari satu jaringan ke jaringan lainnya.

Setelah Anda menangkap data SNI yang melewati Network Firewall, Anda dapat menggunakan Amazon CloudWatch Logs dan AWS Lambda untuk mempublikasikan data ke topik Amazon Simple Notification Service (Amazon SNS) yang menghasilkan notifikasi email. Pemberitahuan email mencakup nama server dan informasi SNI terkait lainnya. Selain itu, Anda dapat menggunakan output dari pola ini untuk mengizinkan atau membatasi lalu lintas keluar berdasarkan nama domain di SNI dengan menggunakan aturan firewall. Untuk informasi selengkapnya, lihat Bekerja dengan grup aturan stateful di AWS Network Firewall dalam dokumentasi Network Firewall.

Prasyarat dan batasan

Prasyarat

Arsitektur

Diagram berikut menunjukkan cara menggunakan Network Firewall untuk mengumpulkan data SNI dari lalu lintas jaringan keluar, dan kemudian mempublikasikan data tersebut ke topik SNS dengan menggunakan Log CloudWatch dan Lambda.

Alur kerja antara Network Firewall, CloudWatch Log, Lambda, dan Amazon SNS.

Diagram menunjukkan alur kerja berikut:

  1. Network Firewall mengumpulkan nama domain dari data SNI di header HTTPS lalu lintas jaringan keluar Anda.

  2. CloudWatch Log memonitor data SNI dan memanggil fungsi Lambda setiap kali lalu lintas jaringan keluar melewati Network Firewall.

  3. Fungsi Lambda membaca data SNI yang diambil oleh CloudWatch Log dan kemudian menerbitkan data tersebut ke topik SNS.

  4. Topik SNS mengirimi Anda notifikasi email yang menyertakan data SNI.

Otomatisasi dan skala

Tumpukan teknologi

  • CloudWatch Log Amazon

  • Amazon SNS

  • Amazon VPC

  • AWS Lambda 

  • AWS Network Firewall

Alat

Layanan AWS

  • CloudWatch Log Amazon — Anda dapat menggunakan Amazon CloudWatch Logs untuk memantau, menyimpan, dan mengakses file log Anda dari instans Amazon Elastic Compute Cloud (Amazon EC2) CloudTrail, AWS, Amazon Route 53, dan sumber lainnya.

  • Amazon SNS — Amazon Simple Notification Service (Amazon SNS) adalah layanan terkelola yang menyediakan pengiriman pesan dari penerbit ke pelanggan (juga dikenal sebagai produsen dan konsumen).

  • Amazon VPC — Amazon Virtual Private Cloud (Amazon VPC) menyediakan bagian AWS Cloud yang terisolasi secara logis tempat Anda dapat meluncurkan sumber daya AWS di jaringan virtual yang telah Anda tentukan. Jaringan virtual ini sangat mirip dengan jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaatnya yaitu menggunakan infrastruktur AWS yang dapat diskalakan.

  • AWS Lambda — AWS Lambda adalah layanan komputasi yang memungkinkan Anda menjalankan kode tanpa menyediakan atau mengelola server.

  • AWS Network Firewall — AWS Network Firewall adalah layanan terkelola yang memudahkan penerapan perlindungan jaringan penting untuk semua Amazon Anda. VPCs

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat grup CloudWatch log.

  1. Masuk ke AWS Management Console dan buka CloudWatch konsol.

  2. Pada panel navigasi, pilih Grup log.

  3. Pilih Actions (Tindakan), lalu pilih Create log group (Buat grup log).

  4. Masukkan nama untuk grup log, lalu pilih Create log group (Buat grup log).

Untuk informasi selengkapnya, lihat Bekerja dengan grup log dan aliran log dalam CloudWatch dokumentasi.

Administrator awan
TugasDeskripsiKeterampilan yang dibutuhkan

Membuat sebuah topik SNS.

Untuk membuat topik SNS, ikuti petunjuk dalam dokumentasi Amazon SNS.

Administrator awan

Berlangganan titik akhir ke topik SNS.

Untuk berlangganan alamat email sebagai titik akhir ke topik SNS yang Anda buat, ikuti petunjuk dalam dokumentasi Amazon SNS. Untuk Protokol, pilih Email/Email-JSON.

catatan

Anda juga dapat memilih titik akhir yang berbeda berdasarkan kebutuhan Anda.

Administrator awan
TugasDeskripsiKeterampilan yang dibutuhkan

Aktifkan pencatatan firewall.

  1. Masuk ke AWS Management Console dan buka konsol Amazon VPC.

  2. Di panel navigasi, di bawah NETWORK FIREWALL, pilih Firewall.

  3. Di bagian Firewall, pilih firewall tempat Anda ingin menangkap nama server dari SNI untuk lalu lintas keluar.

  4. Pilih tab Detail Firewall, lalu pilih Edit di bagian Logging

  5. Untuk jenis Log, pilih Alert. Untuk tujuan Log untuk peringatan, pilih grup CloudWatch log

  6. Untuk grup CloudWatch log, cari dan pilih grup log yang Anda buat sebelumnya, lalu pilih Simpan.

Untuk informasi selengkapnya tentang menggunakan CloudWatch Log sebagai tujuan log untuk Network Firewall, lihat CloudWatch Log Amazon dalam dokumentasi Network Firewall. 

Administrator awan
TugasDeskripsiKeterampilan yang dibutuhkan

Buat aturan stateful.

  1. Masuk ke AWS Management Console dan buka konsol Amazon VPC.

  2. Di panel navigasi, di bawah NETWORK FIREWALL, pilih Network Firewall Rule Groups.

  3. Pilih Buat grup aturan Firewall Jaringan.

  4. Pada halaman grup aturan Buat Network Firewall, untuk jenis grup Aturan, pilih Grup aturan stateful. Catatan: Untuk informasi selengkapnya, lihat Bekerja dengan grup aturan stateful di AWS Network Firewall.

  5. Di bagian grup aturan stateful, masukkan nama dan deskripsi untuk grup aturan.

  6. Untuk Kapasitas, atur kapasitas maksimum yang ingin Anda izinkan untuk grup aturan stateful (hingga maksimum 30.000). Catatan: Anda tidak dapat mengubah setelan ini setelah membuat grup aturan. Untuk informasi tentang cara menghitung kapasitas, lihat Menyetel kapasitas grup aturan di AWS Network Firewall. Untuk informasi tentang pengaturan maksimum, lihat kuota AWS Network Firewall.

  7. Untuk opsi grup aturan Stateful, pilih 5-tuple.

  8. Di bagian urutan aturan Stateful, pilih Default.

  9. Di bagian variabel Aturan, pertahankan nilai default.

  10. Di bagian Tambah aturan, pilih TLS untuk Protokol. Untuk Sumber, pilih Any. Untuk port Sumber, pilih Port apa saja. Untuk Tujuan, pilih Any. Untuk port Tujuan, pilih Port apa saja. Untuk arah Lalu Lintas, pilih Maju. Untuk Tindakan, pilih Alert. Pilih Tambahkan aturan.

  11. Pilih Buat grup aturan stateful.

Administrator awan

Kaitkan aturan stateful ke Network Firewall.

  1. Masuk ke AWS Management Console dan buka konsol Amazon VPC.

  2. Di panel navigasi, di bawah NETWORK FIREWALL, pilih Firewall.

  3. Pilih firewall tempat Anda ingin menangkap nama server dari SNI untuk lalu lintas keluar.

  4. Di bagian Grup aturan stateful, pilih Tindakan, lalu pilih Tambahkan grup aturan stateful yang tidak dikelola

  5. Pada halaman Tambahkan grup aturan stateful yang tidak dikelola, pilih grup aturan stateful yang Anda buat sebelumnya, lalu pilih Tambahkan grup aturan stateful.

Administrator awan
TugasDeskripsiKeterampilan yang dibutuhkan

Buat kode untuk fungsi Lambda.

Dalam lingkungan pengembangan terintegrasi (IDE) yang dapat membaca peristiwa CloudWatch Log dari Network Firewall untuk lalu lintas keluar, tempelkan kode Python 3 berikut dan <SNS-topic-ARN> ganti dengan nilai Anda:

import json import gzip import base64 import boto3 sns_client = boto3.client('sns') def lambda_handler(event, context): decoded_event = json.loads(gzip.decompress(base64.b64decode(event['awslogs']['data']))) body = ''' {filtermatch} '''.format( loggroup=decoded_event['logGroup'], logstream=decoded_event['logStream'], filtermatch=decoded_event['logEvents'][0]['message'], ) print(body) filterMatch = json.loads(body) data = [] if 'http' in filterMatch['event']: data.append(filterMatch['event']['http']['hostname']) elif 'tls' in filterMatch['event']: data.append(filterMatch['event']['tls']['sni']) result = 'Domain accessed ' + 1*' ' + (data[0]) + 1*' ' 'via AWS Network Firewall ' + 1*' ' + (filterMatch['firewall_name']) print(result) message = {'ServerName': result} send_to_sns = sns_client.publish( TargetArn=<SNS-topic-ARN>, #Replace with the SNS topic ARN Message=json.dumps({'default': json.dumps(message), 'sms': json.dumps(message), 'email': json.dumps(message)}), Subject='Server Name passed through the Network Firewall', MessageStructure='json' )

Contoh kode ini mem-parsing konten CloudWatch Log dan menangkap nama server yang disediakan oleh SNI di header HTTPS.

Pengembang aplikasi

Buat fungsi Lambda.

Untuk membuat fungsi Lambda, ikuti instruksi dalam dokumentasi Lambda dan pilih Python 3.9 untuk Runtime.

Administrator awan

Tambahkan kode ke fungsi Lambda.

Untuk menambahkan kode Python Anda ke fungsi Lambda yang Anda buat sebelumnya, ikuti petunjuk dalam dokumentasi Lambda.

Administrator awan

Tambahkan CloudWatch Log sebagai pemicu ke fungsi Lambda.

  1. Masuk ke AWS Management Console dan buka konsol Lambda.

  2. Di panel navigasi, pilih Fungsi, lalu pilih fungsi yang Anda buat sebelumnya.

  3. Di bagian Ikhtisar fungsi, pilih Tambahkan pemicu.

  4. Pada halaman Tambah pemicu, di bagian konfigurasi Pemicu, pilih CloudWatch Log, lalu pilih Tambah.

  5. Untuk grup Log, pilih grup CloudWatch log yang Anda buat sebelumnya.

  6. Untuk nama Filter, masukkan nama untuk filter Anda.

  7. Pilih Tambahkan.

  8. Pada tab Konfigurasi halaman fungsi Anda, di bagian Pemicu, pilih pemicu yang baru saja Anda tambahkan, lalu pilih Aktifkan.

Untuk informasi selengkapnya, lihat Menggunakan Lambda dengan CloudWatch Log di dokumentasi Lambda.

Administrator awan

Tambahkan izin publikasi SNS.

Tambahkan izin SNS:Publish ke peran eksekusi Lambda, sehingga Lambda dapat melakukan panggilan API untuk mempublikasikan pesan ke SNS.  

  1. Temukan peran eksekusi fungsi Lambda yang Anda buat sebelumnya.

  2. Tambahkan kebijakan berikut ke peran AWS Identity and Access Management (IAM) Anda:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSNSPublish", "Effect": "Allow", "Action": [ "sns:GetTopicAttributes", "sns:Subscribe", "sns:Unsubscribe", "sns:Publish" ], "Resource": "*" } ] }
Administrator awan
TugasDeskripsiKeterampilan yang dibutuhkan

Kirim lalu lintas melalui Network Firewall.

  1. Kirim atau tunggu lalu lintas HTTPS melewati Network Firewall.

  2. Periksa email notifikasi SNS yang Anda terima dari AWS saat lalu lintas melewati Network Firewall. Email tersebut mencakup detail SNI untuk lalu lintas keluar. Misalnya, email yang dihasilkan dari kode Lambda di atas akan memiliki konten berikut jika nama domain yang diakses https://aws.amazon.com.rproxy.govskope.cadan protokol berlangganan adalah EMAIL-JSON:

{ "Type": "Notification", "MessageId": "<messageID>", "TopicArn": "arn:aws:sns:us-west-2:123456789:testSNSTopic", "Subject": "Server Name passed through the Network Firewall", "Message": "{\"ServerName\": \"Domain 'aws.amazon.com' accessed via AWS Network Firewall 'AWS-Network-Firewall-Multi-AZ-firewall\"}", "Timestamp": "2022-03-22T04:10:04.217Z", "SignatureVersion": "1", "Signature": "<Signature>", "SigningCertURL": "<SigningCertUrl>", "UnsubscribeURL": "<UnsubscribeURL>" }

Kemudian, periksa log peringatan Network Firewall di Amazon CloudWatch dengan mengikuti instruksi dalam CloudWatch dokumentasi Amazon. Log peringatan menunjukkan output berikut:

{ "firewall_name": "AWS-Network-Firewall-Multi-AZ-firewall", "availability_zone": "us-east-2b", "event_timestamp": "<event timestamp>", "event": { "timestamp": "2021-03-22T04:10:04.214222+0000", "flow_id": <flow ID>, "event_type": "alert", "src_ip": "10.1.3.76", "src_port": 22761, "dest_ip": "99.86.59.73", "dest_port": 443, "proto": "TCP", "alert": { "action": "allowed", "signature_id": 2, "rev": 0, "signature": "", "category": "", "severity": 3 }, "tls": { "subject": "CN=aws.amazon.com", "issuerdn": "C=US, O=Amazon, OU=Server CA 1B, CN=Amazon", "serial": "<serial number>", "fingerprint": "<fingerprint ID>", "sni": "aws.amazon.com", "version": "TLS 1.2", "notbefore": "2020-09-30T00:00:00", "notafter": "2021-09-23T12:00:00", "ja3": {}, "ja3s": {} }, "app_proto": "tls" } }
Insinyur uji