<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[My Blog]]></title><description><![CDATA[My Blog]]></description><link>https://blog.hasanamin.my.id</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 00:41:55 GMT</lastBuildDate><atom:link href="https://blog.hasanamin.my.id/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Cisco Packet Tracer]]></title><description><![CDATA[Pendahuluan
Dalam ujikompetensi jaringan komputer, salah satu keterampilan penting yang harus dikuasai adalah kemampuan merancang, mengonfigurasi, dan menguji jaringan menggunakan Cisco Packet Tracer.Artikel ini membahas panduan lengkap pembuatan sim...]]></description><link>https://blog.hasanamin.my.id/cisco-packet-tracer</link><guid isPermaLink="true">https://blog.hasanamin.my.id/cisco-packet-tracer</guid><category><![CDATA[Cisco Packet Tracer]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Sun, 26 Oct 2025 01:18:16 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-pendahuluan">Pendahuluan</h2>
<p>Dalam ujikompetensi jaringan komputer, salah satu keterampilan penting yang harus dikuasai adalah kemampuan merancang, mengonfigurasi, dan menguji jaringan menggunakan <strong>Cisco Packet Tracer</strong>.<br />Artikel ini membahas panduan lengkap pembuatan simulasi jaringan yang mencakup <strong>Routing RIP</strong>, <strong>layanan DNS, Web, Email, FTP</strong>, serta <strong>konfigurasi firewall server</strong>.</p>
<hr />
<h2 id="heading-1-merancang-topologi-jaringan">🧱 1. Merancang Topologi Jaringan</h2>
<p>Diberikan topologi seperti gambar berikut:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761366740689/4552207b-24d0-40c0-9bb7-3dfb6d64ab36.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-langkah-langkah">Langkah-langkah:</h3>
<ul>
<li><p>Tambahkan <strong>device</strong>:</p>
<ul>
<li><p>6 Router, gunakan <strong>Router-PT-Empty</strong> untuk R1 sd R6</p>
</li>
<li><p>1 Switch</p>
</li>
<li><p>3 PC kabel</p>
</li>
<li><p>3 Laptop wireless</p>
</li>
<li><p>1 Wireless Router</p>
</li>
<li><p>2 Server (DNS &amp; Web, Email &amp; FTP)</p>
</li>
</ul>
</li>
<li><p>Tambahkan <strong>modul interface</strong> sebanyak yang di perlukan, gunakan <strong>PT-ROUTER-NM-1CGE</strong> untuk interface GigabitEthernet (jangan lupa ON-OFF kan terlebih dahulu device nya)</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761366911577/1ddd7f5b-ba7f-41c3-82f2-c9d1b3f4a138.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Lakukan <strong>pengkabelan</strong> sesuai tipe koneksi.</p>
<p>  pengkabelan di sesuaikan dengan jenis koneksi, jika koneksi sesama jenis device maka gunakan cable cross over, jika berbeda jenis device maka gunakan straight through</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761367225336/721c62f9-6b5d-4e33-80ee-bad2aa8e4202.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761368013518/121ff785-6d94-46c8-aafb-61875a567302.png" alt class="image--center mx-auto" /></p>
<p>  Terkhusus untuk koneksi dari R4 ke HomeRouter, pilih internet port</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761368070498/46093517-4866-46f8-a655-b1371f88ef22.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<hr />
<h2 id="heading-2-menambahkan-label">🏷️ 2. Menambahkan Label</h2>
<ul>
<li><p>Tambahkan label <strong>network dan subnet mask</strong>:<br />  Contoh: <code>192.168.0.0/24</code>, <code>10.0.0.0/8</code>, <code>11.0.0.0/8</code>, dst.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761368535487/8a93b8bf-5481-4643-8de3-fcfba637ea06.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Beri label <strong>alamat IP</strong> pada setiap interface router dan server.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761370932693/b60aec87-11d8-4778-8185-fbca3205eb77.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<hr />
<h2 id="heading-3-konfigurasi-ip-address">🌐 3. Konfigurasi IP Address</h2>
<h3 id="heading-a-router">a. Router</h3>
<p>Masuk ke <strong>Config → Interface</strong>, aktifkan interface dan isi IP sesuai subnet.</p>
<p>Berikut tabel pemetaan IP pada tiap Router yang saling terhubung (<strong>Disesuaikan dengan koneksi anda masing-masing</strong>)</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Connection</td><td>Interface</td><td>IP</td></tr>
</thead>
<tbody>
<tr>
<td>R1 - Switch0</td><td>GigabitEthernet8/0</td><td>192.168.0.1</td></tr>
<tr>
<td>R1 - R2</td><td>GigabitEthernet9/0</td><td>10.0.0.1</td></tr>
<tr>
<td>R2 - R1</td><td>GigabitEthernet6/0</td><td>10.0.0.2</td></tr>
<tr>
<td>R2 - R3</td><td>GigabitEthernet7/0</td><td>20.0.0.2</td></tr>
<tr>
<td>R3 - R2</td><td>GigabitEthernet6/0</td><td>20.0.0.1</td></tr>
<tr>
<td>R3 - HomeRouter</td><td>GigabitEthernet7/0</td><td>192.168.1.1</td></tr>
<tr>
<td>R2 - R4</td><td>GigabitEthernet8/0</td><td>30.0.0.2</td></tr>
<tr>
<td>R4 - R2</td><td>GigabitEthernet6/0</td><td>30.0.0.1</td></tr>
<tr>
<td>R4 - R5</td><td>GigabitEthernet7/0</td><td>40.0.0.2</td></tr>
<tr>
<td>R5 - R4</td><td>GigabitEthernet6/0</td><td>40.0.0.1</td></tr>
<tr>
<td>R5 - DNS &amp; WEB SERVER</td><td>GigabitEthernet7/0</td><td>11.0.0.1</td></tr>
<tr>
<td>R4 - R6</td><td>GigabitEthernet8/0</td><td>50.0.0.2</td></tr>
<tr>
<td>R6 - R4</td><td>GigabitEthernet6/0</td><td>50.0.0.1</td></tr>
<tr>
<td>R6 - EMAIL &amp; FTP SERVER</td><td>GigabitEthernet7/0</td><td>12.0.0.1</td></tr>
</tbody>
</table>
</div><p>Sebagai contoh configurasi IP di R1 koneksi R1 - R2 interface GigabitEthernet9/0. Lakukan untuk semua Router</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761372212868/0fff13c7-4821-4f29-8a5a-2bd181cd028b.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>Dikarenakan R1 merupakan router LAN1 maka kita akan configurasi menjadi DHCP server. Berikut adalah command DHCP di R1</p>
</blockquote>
<pre><code class="lang-bash">Router&gt;<span class="hljs-built_in">enable</span>
Router<span class="hljs-comment">#config</span>
Router(config)<span class="hljs-comment">#ip dhcp pool LAN1</span>
Router(dhcp-config)<span class="hljs-comment">#network 192.168.0.0 255.255.255.0</span>
Router(dhcp-config)<span class="hljs-comment">#default-router 192.168.0.1</span>
Router(dhcp-config)<span class="hljs-comment">#dns-server 11.0.0.100</span>
Router(dhcp-config)<span class="hljs-comment">#exit</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761550485620/102a638c-20db-482c-84cd-b79b520a189d.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-b-server">b. Server</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Server</td><td>IP Address</td><td>Network</td><td>Fungsi</td></tr>
</thead>
<tbody>
<tr>
<td>DNS &amp; Web Server</td><td>11.0.0.100</td><td>11.0.0.0/8</td><td>Penerjemah domain dan web</td></tr>
<tr>
<td>Email &amp; FTP Server</td><td>12.0.0.100</td><td>12.0.0.0/8</td><td>Email dan FTP server</td></tr>
</tbody>
</table>
</div><p><mark>Kik Servernya - Pilih Desktop - IP Configuration</mark></p>
<ul>
<li><p>Configurasi IP di DNS &amp; Web server</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761372749343/18f63bb2-7efc-464a-b098-1f3f907b42ea.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<blockquote>
<p>Default gateway diisi dengan IP router yang konek ke server (R5 = 11.0.0.1)</p>
<p>DNS server diisi dengan IP server itu sendiri 11.0.0.100</p>
</blockquote>
<p>Configurasi IP di Email &amp; FTP server</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761373123499/f6654d94-7119-46f0-b9bc-1c4a6575214e.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>Default gateway diisi dengan IP router yang konek ke server (R6 = 12.0.0.1)</p>
<p>DNS server diisi dengan IP server itu sendiri 12.0.0.100</p>
</blockquote>
<h3 id="heading-c-wireless-router">c. Wireless Router</h3>
<ul>
<li><p>Network: <code>192.168.100.0/24</code></p>
</li>
<li><p>Gateway: <code>192.168.100.1</code></p>
</li>
<li><p>SSID: <strong>UJIKOM_NET</strong></p>
<p>  Klik HomeRouter - Pilih GUI</p>
<ul>
<li><p>Internet Setup</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761375848972/c41ac7b9-7123-49b4-8f4a-dcdc3bce5941.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Network Setup</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761379021842/3da3b4c9-3fd3-4614-ae91-a254c170793e.png" alt class="image--center mx-auto" /></p>
<p>  Klik tombol Save Settings</p>
</li>
<li><p>Wireless Setup</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761383202415/ff742450-c5b4-4bdb-8adb-ac41511ef0c6.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-d-pc-amp-laptop">d. PC &amp; Laptop</h3>
<ul>
<li><p>IP Static sesuai subnet masing-masing.</p>
<ul>
<li><p>Laptop</p>
<p>  Agar tiap laptop bisa menangkap sinyal hotspot dari HomeRouter, maka laptopnya harus di tambahkan modul interface wifi (WPC300N) dengan mengganti interface LAN</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761382530321/53495823-c548-433c-b82f-d64c6cc7ad48.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761382615904/35ec105b-3321-4448-8042-b146a1267a05.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Kemudian config wifi di sisi laptop dengan cara klik Desktop - Wireless</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761382892484/85bdd32a-b0d1-4f41-9337-db4a98b48b54.png" alt class="image--center mx-auto" /></p>
<p>  Pilih <code>Connect</code> - <code>Refresh</code> - Pilih SSID <code>UJIKOM_NET</code> - Klik tombol <code>Connect</code></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761382979837/ed9291d1-837d-4a5f-b85f-bf2457cc3c36.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761383473776/326d0307-2e2d-4f9a-b1f7-85bde0848104.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p>PC</p>
<p>  Untuk PC kita akan configurasi IP secara static terlebih dahulu</p>
<p>  Klik PC - Desktop - IP Configuration - DHCP</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761550518285/0ebce038-5bac-4951-bc48-cd345ba04bba.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<hr />
<h2 id="heading-4-konfigurasi-routing-rip">🔁 4. Konfigurasi Routing (RIP)</h2>
<p>Masuk ke <strong>Router → Config → RIP</strong>:</p>
<ul>
<li><p>Centang setiap network yang terhubung ke router tersebut.</p>
<ul>
<li><p>R1</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384035753/623cd85b-e94b-4098-a3ef-4997217d2785.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384086652/a7f91b2f-1692-4d0c-9bb4-d1a30e0e1537.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384140197/7cb45fab-2d9a-42a7-8113-1d1f18c227ad.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>R2</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384203226/7b921c7a-380b-406a-8989-56cc5feedb07.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384239333/349e250a-c1c3-41da-bcba-8c31ecc437b7.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>R3</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384296815/a171344c-a4b1-40da-a4d8-af740fca7aee.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384334218/47e858c5-9b98-4ce2-a1fa-68f608b62f36.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>R4</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384381148/4d25ddb0-551f-47d4-8a89-49e0bfc86ab9.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384426576/34cfcf50-40cd-4c2b-b8ae-440da4faa41d.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>R5</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384449518/81c24f7b-a86e-4cf9-9c09-8792977423cd.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384479349/40890b92-e0a3-4b2d-a174-757681e826a8.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>R6</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384538400/5739222d-e583-45a6-a22c-a76d7dae6fe8.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384572912/220388d2-318b-410f-b587-64789dd51143.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p>Pastikan routing berjalan (uji dengan ping antar subnet).</p>
<p>  ping dari PC ke Server DNS berhasil</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384660002/d997fda3-e1c2-4626-bc40-f5c27e8085c8.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761384749173/24446358-457c-44da-9cf8-1e2e6c52971e.png" alt class="image--center mx-auto" /></p>
<p>  ping dari laptop ke server Email berhasil</p>
</li>
</ul>
<hr />
<h2 id="heading-5-konfigurasi-layanan-server">⚙️ 5. Konfigurasi Layanan Server</h2>
<h3 id="heading-a-dns-server">🧭 a. DNS Server</h3>
<ul>
<li><p>Aktifkan service <strong>DNS</strong>.</p>
</li>
<li><p>Tambahkan record berikut di service server DNS:</p>
<ul>
<li><p><a target="_blank" href="http://www.web.com"><code>myweb.net</code></a> <code>→ 11.0.0.100</code></p>
</li>
<li><p><a target="_blank" href="http://mail.web.com"><code>mymail.net</code></a> <code>→ 12.0.0.100</code></p>
</li>
<li><p><a target="_blank" href="http://ftp.web.com"><code>myftp.net</code></a> <code>→ 12.0.0.100</code></p>
</li>
</ul>
</li>
</ul>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761385690726/9b301f85-1ffa-4d7c-9ace-ff99d56fbdce.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-b-web-server">🌍 b. Web Server</h3>
<ul>
<li><p>Aktifkan <strong>HTTP dan HTTPS</strong>.</p>
</li>
<li><p>Ubah halaman utama (index.html) dengan identitas kelompok ujikom.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761385257785/47f6f6a4-4a51-4f9d-88d5-c78113373735.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761385306941/c42dfeac-5302-4160-817d-1765053ae08f.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<h3 id="heading-c-email-server">✉️ c. Email Server</h3>
<ul>
<li><p>Aktifkan <strong>SMTP dan POP3</strong>.</p>
</li>
<li><p>Tambahkan user seperti:</p>
<ul>
<li><p><a target="_blank" href="mailto:admin@web.com"><code>pc1@myemail.net</code></a></p>
</li>
<li><p><a target="_blank" href="mailto:user1@web.com"><code>lp1@myemail.net</code></a></p>
</li>
</ul>
</li>
</ul>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761385857210/4c7e4251-aeb4-4067-b5e0-b6e7b8a598a1.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-d-ftp-server">📁 d. FTP Server</h3>
<ul>
<li><p>Aktifkan <strong>FTP Service</strong>.</p>
</li>
<li><p>Tambahkan akun dan password untuk login.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761386046664/f88fc647-a2ae-4bdf-ac28-48a2ae2d2370.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<h3 id="heading-e-uji-coba">🧪 e. Uji Coba</h3>
<ul>
<li><p>Akses <a target="_blank" href="http://www.web.com"><code>myweb.net</code></a> via browser PC.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761386152448/d478a240-36b3-4b41-90cb-da43a97b073e.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Ping domain dari PC.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761386187659/1619790b-1447-4f69-bab3-07b49d223d33.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<p>Kirim email antar user.</p>
<p>Configurasi Email client</p>
<ul>
<li><p>Klik PC/Leptop - Desktop - Email</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761386291418/1a3944bb-0c45-4d4d-b43b-aeee24787397.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761386978827/0b29010e-4788-4a8a-ac9f-8616540177c0.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Test kirim email dari PC1 ke LP1</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761386544482/82c811a6-4ea7-45ef-80bf-0db1d792d156.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761387078175/a82a9478-4652-435d-8193-e72757d72297.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>cek di inbox LP1</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761387302792/fe985c61-d9f3-49f6-8e97-e250e58cb274.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<hr />
<ul>
<li><p>Konfigurasi FTP Client</p>
<ul>
<li><p>Buat file baru <code>mydata.txt</code></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761460826351/09f0bf8f-aa09-45d1-98ca-3f8a7b8cc811.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761460855398/e707dae4-78f0-43c0-b6ed-132751fbd1ec.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Kirim file mydata.txt ke server FTP</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761460933478/c4dc2f10-4e16-4d74-a8fe-77a7cf36bbb5.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761461098017/4865eb2f-1d45-4f94-ba52-8c8b4ec3bad4.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
</ul>
<hr />
<h2 id="heading-6-konfigurasi-firewall-server">🔒 6. Konfigurasi Firewall Server</h2>
<p>Masuk ke <strong>Server → Config → Firewall</strong><br />Aktifkan firewall dan tambahkan rule:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761548510523/0db2246e-6fcb-4c61-9b9d-e3a4d837fee9.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>💡 Tips: Uji firewall dengan mencoba akses port yang tidak diizinkan — harus “Request timed out”.</p>
</blockquote>
<hr />
<h2 id="heading-7-backup-amp-restore-konfigurasi">💾 7. Backup &amp; Restore Konfigurasi</h2>
<ul>
<li><p>Simpan konfigurasi router:</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761461381163/834a87bb-1994-46f1-b361-a043ea9ede85.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761461585789/421f60c3-20f3-4a59-ad06-68dbb9656cda.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Untuk restore:</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761461487004/83aae8f7-b9d8-4d28-8f40-180584d628bb.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1761461509312/dd9f99d8-de33-4aae-a65d-8f67e558e5a1.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<hr />
<h2 id="heading-hasil-akhir-yang-diharapkan">✅ Hasil Akhir yang Diharapkan</h2>
<ul>
<li><p>Semua device saling terhubung.</p>
</li>
<li><p>Routing RIP bekerja stabil.</p>
</li>
<li><p>DNS, Web, Email, dan FTP berfungsi.</p>
</li>
<li><p>Firewall hanya mengizinkan port layanan utama.</p>
</li>
<li><p>Semua konfigurasi tersimpan dan dapat direstore.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Bonus Pelatihan]]></title><description><![CDATA[🔹 Studi Kasus:
PT. Sinar Teknologi mendirikan jaringan untuk kampus barunya yang mencakup koneksi internet, routing antar divisi, server internal (DNS, Web, Email, FTP), serta keamanan jaringan menggunakan ACL dan kemampuan backup konfigurasi router...]]></description><link>https://blog.hasanamin.my.id/bonus-pelatihan</link><guid isPermaLink="true">https://blog.hasanamin.my.id/bonus-pelatihan</guid><category><![CDATA[ujikom]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Sun, 27 Jul 2025 07:44:50 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-studi-kasus">🔹 Studi Kasus:</h2>
<p>PT. Sinar Teknologi mendirikan jaringan untuk kampus barunya yang mencakup koneksi internet, routing antar divisi, server internal (DNS, Web, Email, FTP), serta keamanan jaringan menggunakan ACL dan kemampuan backup konfigurasi router.</p>
<hr />
<h2 id="heading-pertanyaan">🧠 Pertanyaan</h2>
<h3 id="heading-bagian-1-topologi-amp-koneksi">💡 Bagian 1: Topologi &amp; Koneksi</h3>
<ol>
<li>Gambarkan kembali topologi jaringan kampus berdasarkan skenario yang diberikan.</li>
<li>Sebutkan peran masing-masing router (Router1, Router2, Router3) dalam sistem jaringan tersebut.</li>
<li>Jelaskan bagaimana komunikasi antara PC1 dan FTP server dapat terjadi melewati router mana saja.</li>
</ol>
<h3 id="heading-bagian-2-dhcp-dan-wireless-router">💡 Bagian 2: DHCP dan Wireless Router</h3>
<ol start="4">
<li>Apa fungsi DHCP pada Router1? Jelaskan bagaimana IP diberikan ke klien.</li>
<li>Konfigurasikan Wireless Router agar:<ul>
<li>Memberikan IP ke klien secara otomatis</li>
<li>Terhubung ke internet melalui Router1</li>
<li>Menggunakan enkripsi WPA2 dengan passphrase <code>kampus_aman</code></li>
</ul>
</li>
<li>Setelah konfigurasi wireless router selesai, bagaimana cara Anda memverifikasi bahwa Laptop sudah terhubung ke jaringan dan internet?</li>
</ol>
<h3 id="heading-bagian-3-routing-dan-ip-addressing">💡 Bagian 3: Routing dan IP Addressing</h3>
<ol start="7">
<li>Buat konfigurasi lengkap pada Router1 agar dapat terhubung ke jaringan Router3 menggunakan static routing.</li>
<li>Mengapa pada Router2 dan Router3 digunakan protokol RIP? Apa kelebihan dan kekurangannya?</li>
<li>Buat perintah konfigurasi RIP untuk Router2 dan Router3 berdasarkan IP yang digunakan.</li>
</ol>
<h3 id="heading-bagian-4-konfigurasi-server">💡 Bagian 4: Konfigurasi Server</h3>
<ol start="10">
<li>Jelaskan fungsi dari masing-masing server berikut:<ul>
<li>DNS Server</li>
<li>Web Server</li>
<li>Email Server</li>
<li>FTP Server</li>
</ul>
</li>
<li>Buat konfigurasi untuk DNS Server yang menunjuk ke:<ul>
<li>kampus.web → 40.40.40.2</li>
<li>kampus.mail → 40.40.40.3</li>
<li>kampus.ftp → 40.40.40.4</li>
</ul>
</li>
<li>Buat konten halaman utama Web Server yang menampilkan pesan:
<em>“SELAMAT DATANG DI KAMPUS”</em></li>
<li>Buat konfigurasi Email Server dan uji kirim email dari <code>mahasiswa1@kampus.mail</code> ke <code>dosen@kampus.mail</code>.</li>
</ol>
<h3 id="heading-bagian-5-keamanan-jaringan-firewall">💡 Bagian 5: Keamanan Jaringan (Firewall)</h3>
<ol start="14">
<li>Konfigurasikan ACL di Router1 agar:<ul>
<li>Hanya jaringan <code>192.168.50.0/24</code> dan <code>192.168.70.0/24</code> yang boleh mengakses keluar</li>
<li>Blokir semua trafik lainnya</li>
</ul>
</li>
<li>Mengapa ACL diletakkan pada interface <code>Serial0/0/0</code> di arah inbound?</li>
</ol>
<h3 id="heading-bagian-6-backup-dan-restore">💡 Bagian 6: Backup dan Restore</h3>
<ol start="16">
<li>Jelaskan langkah-langkah untuk melakukan backup konfigurasi router ke FTP Server.</li>
<li>Setelah backup, bagaimana cara melakukan restore konfigurasi jika router mengalami reset?</li>
</ol>
<h3 id="heading-bagian-7-troubleshooting">💡 Bagian 7: Troubleshooting</h3>
<ol start="18">
<li>PC tidak mendapatkan IP dari DHCP. Sebutkan 3 langkah troubleshooting yang harus dilakukan.</li>
<li>Ketika <code>ping kampus.web</code> gagal, bagaimana cara Anda memastikan apakah masalah ada pada DNS atau Web Server?</li>
<li>Jelaskan perintah untuk melihat routing table dan memverifikasi apakah jalur antar jaringan telah tersedia.</li>
</ol>
<hr />
<h3 id="heading-perangkat-yang-dibutuhkan">Perangkat yang Dibutuhkan:</h3>
<ul>
<li>4 Router (Cisco 2911)</li>
<li>2 Switch (Cisco 2960)</li>
<li>3 PC</li>
<li>2 Laptop</li>
<li>1 Wireless Router (WRT300N)</li>
<li>4 Server (DNS, Web, Email, FTP)</li>
</ul>
<hr />
<h2 id="heading-skema-koneksi">Skema Koneksi</h2>
<ol>
<li>Router1 → Switch1 (Fa0/0 ↔ Fa0/1)</li>
<li>Router1 → Wireless Router (Fa0/1 ↔ Internet Port)</li>
<li>Router1 → Router2 via Serial0/0/0</li>
<li>Router2 → Router3 via Serial0/0/1</li>
<li>Router3 → Switch2 (Fa0/0 ↔ Fa0/1)</li>
<li>Switch2 → Server DNS/Web/Email/FTP (Fa0/2-Fa0/5)</li>
</ol>
<hr />
<h2 id="heading-langkah-1-konfigurasi-dasar-router-dan-dhcp">Langkah 1: Konfigurasi Dasar Router dan DHCP</h2>
<h3 id="heading-router1-gateway-utama">Router1 (Gateway Utama)</h3>
<pre><code class="lang-bash"><span class="hljs-built_in">enable</span>
configure terminal
hostname Router1

ip dhcp pool JARINGAN_KAMPUS
  network 192.168.50.0 255.255.255.0
  default-router 192.168.50.1
  dns-server 10.10.10.2
<span class="hljs-built_in">exit</span>

interface GigabitEthernet0/0
  ip address 192.168.50.1 255.255.255.0
  no shutdown
<span class="hljs-built_in">exit</span>

interface GigabitEthernet0/1
  ip address 192.168.60.1 255.255.255.0
  no shutdown
<span class="hljs-built_in">exit</span>

interface Serial0/3/0
  ip address 20.20.20.1 255.255.255.252
  clock rate 64000
  no shutdown
<span class="hljs-built_in">exit</span>
</code></pre>
<h3 id="heading-wireless-router-configuration">Wireless Router Configuration</h3>
<p><strong>Internet Setup</strong></p>
<ul>
<li>IP Address: <code>192.168.60.2</code></li>
<li>Subnet Mask: <code>255.255.255.0</code></li>
<li>Default Gateway: <code>192.168.60.1</code></li>
<li>DNS Server: <code>10.10.10.2</code></li>
</ul>
<p><strong>LAN Setup</strong></p>
<ul>
<li>IP Address: <code>192.168.70.1</code></li>
<li>Subnet Mask: <code>255.255.255.0</code></li>
<li>DHCP Start IP: <code>192.168.70.100</code></li>
<li>Maximum Users: <code>50</code></li>
</ul>
<p><strong>Wireless Security</strong></p>
<ul>
<li>Mode: WPA2 Personal</li>
<li>Passphrase: <code>kampus_aman</code></li>
</ul>
<hr />
<h2 id="heading-langkah-2-konfigurasi-routing">Langkah 2: Konfigurasi Routing</h2>
<h3 id="heading-router1-static-routing">Router1 (Static Routing)</h3>
<pre><code class="lang-bash">ip route 30.30.30.0 255.255.255.0 20.20.20.2
</code></pre>
<h3 id="heading-router2-rip-routing">Router2 (RIP Routing)</h3>
<pre><code class="lang-bash"><span class="hljs-built_in">enable</span>
configure terminal
hostname Router2

interface Serial0/0/0
  ip address 20.20.20.2 255.255.255.252
  no shutdown
<span class="hljs-built_in">exit</span>

interface Serial0/0/1
  ip address 30.30.30.1 255.255.255.252
  no shutdown
<span class="hljs-built_in">exit</span>

router rip
  version 2
  network 20.20.20.0
  network 30.30.30.0
  no auto-summary
<span class="hljs-built_in">exit</span>
</code></pre>
<h3 id="heading-router3-rip-routing">Router3 (RIP Routing)</h3>
<pre><code class="lang-bash"><span class="hljs-built_in">enable</span>
configure terminal
hostname Router3

interface Serial0/0/0
  ip address 30.30.30.2 255.255.255.252
  no shutdown
<span class="hljs-built_in">exit</span>

interface FastEthernet0/0
  ip address 40.40.40.1 255.0.0.0
  no shutdown
<span class="hljs-built_in">exit</span>

router rip
  version 2
  network 30.30.30.0
  network 40.40.40.0
  no auto-summary
<span class="hljs-built_in">exit</span>
</code></pre>
<hr />
<h2 id="heading-langkah-3-konfigurasi-server">Langkah 3: Konfigurasi Server</h2>
<h3 id="heading-dns-server-ip-1010102">DNS Server (IP: 10.10.10.2)</h3>
<p><strong>IP Configuration:</strong></p>
<ul>
<li>Static IP: <code>10.10.10.2</code></li>
<li>Subnet Mask: <code>255.0.0.0</code></li>
<li>Default Gateway: <code>10.0.0.1</code></li>
</ul>
<p><strong>DNS Service:</strong></p>
<ul>
<li>On</li>
<li>Resource Records:<ul>
<li><code>kampus.web</code> A <code>40.40.40.2</code></li>
<li><code>kampus.mail</code> A <code>40.40.40.3</code></li>
<li><code>kampus.ftp</code> A <code>40.40.40.4</code></li>
</ul>
</li>
</ul>
<h3 id="heading-web-server-ip-4040402">Web Server (IP: 40.40.40.2)</h3>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">center</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">h1</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"color:green;"</span>&gt;</span>SELAMAT DATANG DI KAMPUS<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">center</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<h3 id="heading-email-server-ip-4040403">Email Server (IP: 40.40.40.3)</h3>
<ul>
<li>Domain Name: <code>kampus.mail</code></li>
<li>User Setup:<ul>
<li>mahasiswa1 / mhs123</li>
<li>dosen / dosen456</li>
</ul>
</li>
</ul>
<h3 id="heading-ftp-server-ip-4040404">FTP Server (IP: 40.40.40.4)</h3>
<ul>
<li>Username: <code>ftp_kampus</code></li>
<li>Password: <code>ftp123</code></li>
<li>Permission: Read/Write</li>
</ul>
<hr />
<h2 id="heading-langkah-4-konfigurasi-firewall">Langkah 4: Konfigurasi Firewall</h2>
<h3 id="heading-router1-acl">Router1 (ACL)</h3>
<pre><code class="lang-bash">ip access-list extended FILTER_JARINGAN
  permit ip 192.168.50.0 0.0.0.255 any
  permit ip 192.168.70.0 0.0.0.255 any
  deny ip any any
<span class="hljs-built_in">exit</span>

interface Serial0/0/0
  ip access-group FILTER_JARINGAN <span class="hljs-keyword">in</span>
<span class="hljs-built_in">exit</span>
</code></pre>
<hr />
<h2 id="heading-langkah-5-uji-coba-jaringan">Langkah 5: Uji Coba Jaringan</h2>
<h3 id="heading-uji-dns-dan-web">Uji DNS dan Web</h3>
<ul>
<li>Akses URL: <code>http://kampus.web</code> dari PC1</li>
<li>Verifikasi tampilan halaman web</li>
</ul>
<h3 id="heading-uji-email">Uji Email</h3>
<ul>
<li>Email: mahasiswa1@kampus.mail</li>
<li>Password: mhs123</li>
<li>Server: kampus.mail</li>
<li>Kirim ke: dosen@kampus.mail</li>
</ul>
<h3 id="heading-uji-ftp">Uji FTP</h3>
<pre><code class="lang-bash">ftp kampus.ftp
Username: ftp_kampus
Password: ftp123
put laporan.txt
</code></pre>
<h3 id="heading-uji-wireless">Uji Wireless</h3>
<ul>
<li>Connect ke SSID <code>kampus_aman</code></li>
<li>Verifikasi dapat IP dan akses internet</li>
</ul>
<hr />
<h2 id="heading-langkah-6-backup-dan-restore-konfigurasi">Langkah 6: Backup dan Restore Konfigurasi</h2>
<h3 id="heading-backup-konfigurasi-router">Backup Konfigurasi Router</h3>
<pre><code class="lang-bash">copy running-config ftp:
Address of remote host: 40.40.40.4
Destination filename: backup_router1
</code></pre>
<h3 id="heading-restore-konfigurasi-router">Restore Konfigurasi Router</h3>
<pre><code class="lang-bash">copy ftp: startup-config
Address of remote host: 40.40.40.4
Source filename: backup_router1
Destination filename: startup-config
</code></pre>
<hr />
<h2 id="heading-troubleshooting">Troubleshooting</h2>
<ul>
<li><strong>PC tidak dapat IP:</strong> Periksa DHCP dan koneksi kabel</li>
<li><strong>Tidak bisa ping antar jaringan:</strong> Periksa routing (<code>show ip route</code>)</li>
<li><strong>Web/email gagal:</strong> Pastikan DNS aktif, cek <code>nslookup</code></li>
</ul>
<hr />
]]></content:encoded></item><item><title><![CDATA[Membuat QR Code Scanner USB ke MQTT Gateway di Linux Menggunakan Python]]></title><description><![CDATA[Pendahuluan
Dalam dunia industri modern, mengintegrasikan perangkat input seperti scanner barcode ke dalam sistem berbasis IoT atau backend server adalah hal penting. Artikel ini menunjukkan cara membangun sistem scanner QR/Barcode berbasis USB yang ...]]></description><link>https://blog.hasanamin.my.id/membuat-qr-code-scanner-usb-ke-mqtt-gateway-di-linux-menggunakan-python</link><guid isPermaLink="true">https://blog.hasanamin.my.id/membuat-qr-code-scanner-usb-ke-mqtt-gateway-di-linux-menggunakan-python</guid><category><![CDATA[Python]]></category><category><![CDATA[iot]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Thu, 05 Jun 2025 21:07:32 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-pendahuluan">Pendahuluan</h2>
<p>Dalam dunia industri modern, mengintegrasikan perangkat input seperti scanner barcode ke dalam sistem berbasis IoT atau backend server adalah hal penting. Artikel ini menunjukkan cara membangun sistem scanner QR/Barcode berbasis USB yang otomatis mengirimkan hasil scan ke broker MQTT menggunakan Python di Linux.</p>
<h2 id="heading-prasyarat">Prasyarat</h2>
<ul>
<li>Linux (contoh: Debian, Ubuntu, Orange Pi)</li>
<li>Scanner barcode USB</li>
<li>Python 3.x</li>
<li>MQTT broker (bisa lokal atau cloud seperti Mosquitto, EMQX)</li>
</ul>
<h2 id="heading-1-cek-dan-identifikasi-scanner-usb">1. Cek dan Identifikasi Scanner USB</h2>
<p>Sambungkan scanner barcode ke port USB. Gunakan perintah berikut untuk melihat apakah perangkat terdeteksi:</p>
<pre><code class="lang-bash">lsusb
</code></pre>
<p>Contoh output:</p>
<pre><code>Bus <span class="hljs-number">001</span> Device <span class="hljs-number">005</span>: ID <span class="hljs-number">0</span>c2e:<span class="hljs-number">0</span>b61 Scanner Scanner
</code></pre><p>Catat <code>Vendor ID</code> dan <code>Product ID</code> (contoh: <code>0c2e:0b61</code>). Ini akan membantu dalam mengidentifikasi device secara eksplisit jika diperlukan.</p>
<p>Lanjutkan dengan mengecek event device dari scanner:</p>
<pre><code class="lang-bash">ls -l /dev/input/by-id/
</code></pre>
<p>Output yang dituju:</p>
<pre><code>usb-Scanner_Scanner_20180411-event-kbd -&gt; ../event0
</code></pre><p>Catat path ke device, misalnya <code>/dev/input/event0</code>. Ini akan digunakan dalam kode.</p>
<h2 id="heading-2-instalasi-library-yang-dibutuhkan">2. Instalasi Library yang Dibutuhkan</h2>
<pre><code class="lang-bash">sudo apt update
sudo apt install python3-pip
pip3 install evdev paho-mqtt
</code></pre>
<h2 id="heading-3-struktur-kode-scanner">3. Struktur Kode Scanner</h2>
<p>Letakkan skrip di <code>/opt/qrscanner/scanner_evdev_mqtt.py</code>:</p>
<pre><code class="lang-python"><span class="hljs-keyword">import</span> traceback
<span class="hljs-keyword">import</span> paho.mqtt.client <span class="hljs-keyword">as</span> mqtt
<span class="hljs-keyword">import</span> json
<span class="hljs-keyword">from</span> datetime <span class="hljs-keyword">import</span> datetime
<span class="hljs-keyword">import</span> warnings
<span class="hljs-keyword">from</span> evdev <span class="hljs-keyword">import</span> InputDevice, categorize, ecodes, list_devices

warnings.filterwarnings(<span class="hljs-string">"ignore"</span>, category=DeprecationWarning)

<span class="hljs-comment"># Konfigurasi MQTT</span>
MQTT_BROKER = <span class="hljs-string">"broker.hivemq.com"</span>
MQTT_PORT = <span class="hljs-number">1883</span>
MQTT_TOPIC = <span class="hljs-string">"scanner/iot"</span>

<span class="hljs-comment"># Mapping Key Code</span>
KEY_MAP = {
    <span class="hljs-number">2</span>: <span class="hljs-string">'1'</span>, <span class="hljs-number">3</span>: <span class="hljs-string">'2'</span>, <span class="hljs-number">4</span>: <span class="hljs-string">'3'</span>, <span class="hljs-number">5</span>: <span class="hljs-string">'4'</span>, <span class="hljs-number">6</span>: <span class="hljs-string">'5'</span>, <span class="hljs-number">7</span>: <span class="hljs-string">'6'</span>, <span class="hljs-number">8</span>: <span class="hljs-string">'7'</span>, <span class="hljs-number">9</span>: <span class="hljs-string">'8'</span>, <span class="hljs-number">10</span>: <span class="hljs-string">'9'</span>, <span class="hljs-number">11</span>: <span class="hljs-string">'0'</span>,
    <span class="hljs-number">12</span>: <span class="hljs-string">'-'</span>, <span class="hljs-number">13</span>: <span class="hljs-string">'='</span>, <span class="hljs-number">14</span>: <span class="hljs-string">'Backspace'</span>, <span class="hljs-number">15</span>: <span class="hljs-string">'Tab'</span>, <span class="hljs-number">16</span>: <span class="hljs-string">'q'</span>, <span class="hljs-number">17</span>: <span class="hljs-string">'w'</span>, <span class="hljs-number">18</span>: <span class="hljs-string">'e'</span>, <span class="hljs-number">19</span>: <span class="hljs-string">'r'</span>,
    <span class="hljs-number">20</span>: <span class="hljs-string">'t'</span>, <span class="hljs-number">21</span>: <span class="hljs-string">'y'</span>, <span class="hljs-number">22</span>: <span class="hljs-string">'u'</span>, <span class="hljs-number">23</span>: <span class="hljs-string">'i'</span>, <span class="hljs-number">24</span>: <span class="hljs-string">'o'</span>, <span class="hljs-number">25</span>: <span class="hljs-string">'p'</span>, <span class="hljs-number">26</span>: <span class="hljs-string">'['</span>, <span class="hljs-number">27</span>: <span class="hljs-string">']'</span>, <span class="hljs-number">28</span>: <span class="hljs-string">'Enter'</span>,
    <span class="hljs-number">29</span>: <span class="hljs-string">'Ctrl'</span>, <span class="hljs-number">30</span>: <span class="hljs-string">'a'</span>, <span class="hljs-number">31</span>: <span class="hljs-string">'s'</span>, <span class="hljs-number">32</span>: <span class="hljs-string">'d'</span>, <span class="hljs-number">33</span>: <span class="hljs-string">'f'</span>, <span class="hljs-number">34</span>: <span class="hljs-string">'g'</span>, <span class="hljs-number">35</span>: <span class="hljs-string">'h'</span>, <span class="hljs-number">36</span>: <span class="hljs-string">'j'</span>, <span class="hljs-number">37</span>: <span class="hljs-string">'k'</span>,
    <span class="hljs-number">38</span>: <span class="hljs-string">'l'</span>, <span class="hljs-number">39</span>: <span class="hljs-string">';'</span>, <span class="hljs-number">40</span>: <span class="hljs-string">"'"</span>, <span class="hljs-number">41</span>: <span class="hljs-string">'`'</span>, <span class="hljs-number">42</span>: <span class="hljs-string">'Shift'</span>, <span class="hljs-number">43</span>: <span class="hljs-string">'\', 44: '</span>z<span class="hljs-string">', 45: '</span>x<span class="hljs-string">',
    46: '</span>c<span class="hljs-string">', 47: '</span>v<span class="hljs-string">', 48: '</span><span class="hljs-string">b', 49: '</span>n<span class="hljs-string">', 50: '</span>m<span class="hljs-string">', 51: '</span>,<span class="hljs-string">', 52: '</span>.<span class="hljs-string">', 53: '</span>/<span class="hljs-string">', 54: '</span>Shift<span class="hljs-string">',
    55: '</span>*<span class="hljs-string">', 56: '</span>Alt<span class="hljs-string">', 57: '</span> <span class="hljs-string">', 100: '</span>AltG<span class="hljs-string">r'
}

SHIFT_MAP = {
    '</span><span class="hljs-number">1</span><span class="hljs-string">': '</span>!<span class="hljs-string">', '</span><span class="hljs-number">2</span><span class="hljs-string">': '</span>@<span class="hljs-string">', '</span><span class="hljs-number">3</span><span class="hljs-string">': '</span><span class="hljs-comment">#', '4': '$', '5': '%', '6': '^', '7': '&amp;',</span>
    <span class="hljs-string">'8'</span>: <span class="hljs-string">'*'</span>, <span class="hljs-string">'9'</span>: <span class="hljs-string">'('</span>, <span class="hljs-string">'0'</span>: <span class="hljs-string">')'</span>, <span class="hljs-string">'-'</span>: <span class="hljs-string">'_'</span>, <span class="hljs-string">'='</span>: <span class="hljs-string">'+'</span>, <span class="hljs-string">'['</span>: <span class="hljs-string">'{'</span>, <span class="hljs-string">']'</span>: <span class="hljs-string">'}'</span>,
    <span class="hljs-string">'\': '</span>|<span class="hljs-string">', '</span>;<span class="hljs-string">': '</span>:<span class="hljs-string">', "'</span><span class="hljs-string">": '"</span><span class="hljs-string">', '</span>,<span class="hljs-string">': '</span>&lt;<span class="hljs-string">', '</span>.<span class="hljs-string">': '</span>&gt;<span class="hljs-string">', '</span>/<span class="hljs-string">': '</span>?<span class="hljs-string">', '</span>`<span class="hljs-string">': '</span>~<span class="hljs-string">'
}

TARGET_SCANNER_NAME = "Scanner Scanner"

# Deteksi scanner
def find_scanner_device(target_name=TARGET_SCANNER_NAME):
    devices = [InputDevice(path) for path in list_devices()]
    for dev in devices:
        if dev.name == target_name:
            return dev
    return None

# Kirim hasil ke MQTT
def publish_scanned_data(data):
    try:
        payload = {
            "timestamp": datetime.now().isoformat(),
            "scanned": data
        }
        client = mqtt.Client()
        client.connect(MQTT_BROKER, MQTT_PORT, 60)
        client.publish(MQTT_TOPIC, json.dumps(payload))
        client.disconnect()
    except Exception as e:
        print("[ERROR] MQTT publish failed:", e)
        traceback.print_exc()

# Fungsi utama scanner
def read_scanner():
    dev = find_scanner_device()
    if dev is None:
        print("[ERROR] Scanner not found.")
        return

    shift = False
    scanned = '</span><span class="hljs-string">'

    for event in dev.read_loop():
        if event.type == ecodes.EV_KEY:
            data = categorize(event)
            if data.keystate == 1:
                key = KEY_MAP.get(data.scancode, '</span><span class="hljs-string">')
                if key == '</span>Shift<span class="hljs-string">':
                    shift = True
                elif key == '</span>Ente<span class="hljs-string">r':
                    if scanned:
                        print("[INFO] Scanned:", scanned)
                        publish_scanned_data(scanned)
                        scanned = '</span><span class="hljs-string">'
                elif key:
                    scanned += SHIFT_MAP.get(key, key.upper()) if shift else key
                    shift = False

if __name__ == "__main__":
    read_scanner()</span>
</code></pre>
<h2 id="heading-4-buat-service-systemd">4. Buat Service Systemd</h2>
<p>File: <code>/etc/systemd/system/qrscanner.service</code></p>
<pre><code class="lang-ini"><span class="hljs-section">[Unit]</span>
<span class="hljs-attr">Description</span>=QR Scanner Python Script
<span class="hljs-attr">After</span>=network.target

<span class="hljs-section">[Service]</span>
<span class="hljs-attr">ExecStart</span>=/usr/bin/python3 /opt/qrscanner/scanner_evdev_mqtt.py
<span class="hljs-attr">WorkingDirectory</span>=/opt/qrscanner
<span class="hljs-attr">Restart</span>=always
<span class="hljs-attr">RestartSec</span>=<span class="hljs-number">3</span>
<span class="hljs-attr">StandardOutput</span>=journal
<span class="hljs-attr">StandardError</span>=journal

<span class="hljs-section">[Install]</span>
<span class="hljs-attr">WantedBy</span>=multi-user.target
</code></pre>
<p>Aktifkan dan jalankan service:</p>
<pre><code class="lang-bash">sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl <span class="hljs-built_in">enable</span> qrscanner.service
sudo systemctl start qrscanner.service
</code></pre>
<h2 id="heading-5-troubleshooting">5. Troubleshooting</h2>
<ul>
<li>Gunakan <code>journalctl -u qrscanner.service -f</code> untuk memantau log</li>
<li>Cek apakah device input berubah, misalnya unplug scanner lalu replug, dan amati <code>ls -l /dev/input/by-id/</code></li>
<li>Jika error karena device tidak ditemukan, buat pengecekan di awal dan log errornya.</li>
</ul>
<h2 id="heading-6-penutup">6. Penutup</h2>
<p>Dengan setup ini, scanner barcode Anda akan otomatis membaca QR/Barcode dan mengirimkan hasilnya secara langsung ke server melalui MQTT. Anda bisa mengintegrasikannya dengan dashboard IoT, database, atau sistem lain untuk proses lebih lanjut.</p>
<hr />
]]></content:encoded></item><item><title><![CDATA[🔥Multitier Realtime Chart Sensor Suhu via MQTT, MySQL, dan WebSocket]]></title><description><![CDATA[Panduan ini akan membimbing kita membuat sistem realtime monitoring suhu berbasis MQTT. Data dari sensor dikirim per detik via aplikasi smartphone (MyMQTT), kemudian:


Disubscribe oleh backend ExpressJS pada Server 1

Disimpan di MySQL pada Server 2...]]></description><link>https://blog.hasanamin.my.id/multitier-realtime-chart-sensor-suhu-via-mqtt-mysql-dan-websocket</link><guid isPermaLink="true">https://blog.hasanamin.my.id/multitier-realtime-chart-sensor-suhu-via-mqtt-mysql-dan-websocket</guid><category><![CDATA[Multi Tier Web Application ]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[mqtt]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Wed, 28 May 2025 11:06:31 GMT</pubDate><content:encoded><![CDATA[<blockquote>
<p>Panduan ini akan membimbing kita membuat sistem <strong>realtime monitoring</strong> suhu berbasis MQTT. Data dari sensor dikirim per detik via aplikasi smartphone (MyMQTT), kemudian:</p>
</blockquote>
<ul>
<li><p>Disubscribe oleh backend ExpressJS pada Server 1</p>
</li>
<li><p>Disimpan di MySQL pada Server 2</p>
</li>
<li><p>Dikirim ke frontend (HTML + Bootstrap + Chart.js) secara realtime menggunakan <strong>WebSocket (Socket.IO)</strong> pada Server 3</p>
</li>
</ul>
<hr />
<h2 id="heading-arsitektur-tiga-server">🌐 Arsitektur Tiga Server</h2>
<p>Arsitektur topologi aplikasi ini menggunakan multitier untuk mempelajari bagaimana aplikasi yang berbeda bisa saling berkomunikasi dan berintegrasi. Maka dari itu setiap bagian dari aplikasi di deploy pada server yang berbeda.</p>
<ol>
<li><p><strong>Server 1</strong>: Backend (Express + MQTT + Socket.IO)</p>
</li>
<li><p><strong>Server 2</strong>: Database (MySQL)</p>
</li>
<li><p><strong>Server 3</strong>: Frontend (HTML + Chart.js + Socket.IO client)</p>
</li>
</ol>
<hr />
<h2 id="heading-persiapan-instalasi">📦 Persiapan Instalasi</h2>
<h3 id="heading-server-1-install-nodejs-amp-backend"><strong>Server 1</strong>: Install Node.js &amp; Backend</h3>
<p>Server ini berfungsi sebagai <strong>otak dari sistem</strong>, yang menerima data dari sensor (melalui MQTT), menyimpannya ke database (MySQL di Server 2), dan kemudian <strong>mendistribusikan data tersebut secara realtime</strong> ke frontend (di Server 3) menggunakan WebSocket.</p>
<p>Untuk membuat backend ini bekerja, kita membutuhkan <strong>Node.js</strong>, yaitu sebuah runtime JavaScript yang memungkinkan kita menjalankan kode JavaScript di luar browser. Dengan Node.js, kita bisa membangun aplikasi server seperti API, sistem real-time, dan sebagainya.</p>
<p>Langkah-langkah instalasi:</p>
<pre><code class="lang-bash">sudo apt update &amp;&amp; sudo apt install -y nodejs npm
node -v &amp;&amp; npm -v
</code></pre>
<p><strong>Penjelasan:</strong></p>
<ul>
<li><p><code>nodejs</code> adalah environment yang akan menjalankan aplikasi backend kita.</p>
</li>
<li><p><code>npm</code> (Node Package Manager) digunakan untuk mengelola pustaka (library) yang akan kita butuhkan seperti <code>express</code>, <code>mqtt</code>, <code>mysql2</code>, dan <a target="_blank" href="http://socket.io"><code>socket.io</code></a>.</p>
</li>
</ul>
<p>Setelah Node.js terinstall, kita akan menggunakan library ini untuk develop:</p>
<ul>
<li><p>REST API (menggunakan Express)</p>
</li>
<li><p>MQTT Client (untuk subscribe data dari sensor)</p>
</li>
<li><p>Koneksi ke database MySQL</p>
</li>
<li><p>Komunikasi real-time ke frontend menggunakan <a target="_blank" href="http://Socket.IO">Socket.IO</a></p>
</li>
</ul>
<p>Dengan kata lain, Server 1 ini adalah <strong>penghubung utama</strong> antara:</p>
<ul>
<li><p>Sensor suhu (yang mengirimkan data)</p>
</li>
<li><p>Penyimpanan (MySQL)</p>
</li>
<li><p>Tampilan data (Chart di web browser)</p>
</li>
</ul>
<h3 id="heading-server-2-install-mysql"><strong>Server 2</strong>: Install MySQL</h3>
<p>Server ini berperan sebagai <strong>penyimpanan data (database server)</strong>. Setiap data suhu yang dikirim dari sensor melalui aplikasi MQTT akan diteruskan oleh backend (Server 1) dan <strong>disimpan secara terstruktur di MySQL</strong>.</p>
<p>Mengapa perlu server terpisah untuk database?</p>
<ul>
<li><p><strong>Keamanan dan skalabilitas</strong>: Memisahkan database dari backend membuat sistem lebih aman dan mudah diskalakan.</p>
</li>
<li><p><strong>Efisiensi</strong>: Beban kerja server dibagi antara penyimpanan dan pengolahan data.</p>
</li>
<li><p><strong>Konsistensi dan keandalan</strong>: MySQL adalah sistem manajemen basis data yang handal untuk menyimpan data dengan relasi.</p>
</li>
</ul>
<pre><code class="lang-bash">sudo apt install mysql-server
sudo mysql_secure_installation
</code></pre>
<p><strong>Penjelasan:</strong></p>
<ul>
<li><p><code>mysql-server</code> adalah perangkat lunak basis data yang akan kita gunakan.</p>
</li>
<li><p><code>mysql_secure_installation</code> membantu mengatur keamanan dasar (seperti password root dan penghapusan user anonim).</p>
</li>
</ul>
<h3 id="heading-server-3-web-server-optional"><strong>Server 3</strong>: Web Server (optional)</h3>
<p>Server ini berfungsi sebagai <strong>antarmuka pengguna (frontend)</strong> — tempat pengguna bisa melihat grafik suhu secara realtime melalui browser. Kita akan menggunakan <strong>Apache</strong> sebagai web server yang akan menyajikan file HTML, Bootstrap, dan Chart.js ke browser pengguna.</p>
<p>Mengapa dipisah ke server tersendiri?</p>
<ul>
<li><p><strong>Pemisahan tanggung jawab</strong>: Frontend fokus pada tampilan, backend fokus pada logika dan data.</p>
</li>
<li><p><strong>Pengamanan &amp; skalabilitas</strong>: Kita bisa memperkuat keamanan tiap layer sesuai kebutuhannya.</p>
</li>
<li><p><strong>Efisiensi distribusi konten</strong>: Web server seperti Apache sangat efisien dalam melayani file statis (HTML, JS, CSS) ke banyak pengguna sekaligus.</p>
</li>
</ul>
<pre><code class="lang-bash">sudo apt install apache2
</code></pre>
<p>Jika instalasi berhasil, maka untuk konfigurasi web server ada di directory <code>/var/www/html</code></p>
<p>Setelah itu, pastikan Apache aktif:</p>
<pre><code class="lang-bash">sudo systemctl restart apache2
sudo systemctl <span class="hljs-built_in">enable</span> apache2
</code></pre>
<p>Lalu akses frontend dari browser melalui:</p>
<pre><code class="lang-bash">http://&lt;IP_SERVER3&gt;
</code></pre>
<p>Frontend ini akan otomatis membuka koneksi WebSocket ke backend (Server 1), dan menampilkan data suhu ke chart secara realtime. Mahasiswa akan melihat bagaimana satu sistem IoT bisa terdiri dari beberapa komponen dan berkomunikasi melalui jaringan antar server.</p>
<hr />
<h2 id="heading-konfigurasi-database-server-2">🗄️ Konfigurasi Database (Server 2)</h2>
<p>Login ke MySQL:</p>
<pre><code class="lang-bash">sudo mysql -u root -p
</code></pre>
<p>Buat database dan user:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">DATABASE</span> mqttdb;
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">USER</span> <span class="hljs-string">'mqttuser'</span>@<span class="hljs-string">'%'</span> <span class="hljs-keyword">IDENTIFIED</span> <span class="hljs-keyword">BY</span> <span class="hljs-string">'Pass1324!@'</span>;
<span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">ALL</span> <span class="hljs-keyword">PRIVILEGES</span> <span class="hljs-keyword">ON</span> mqttdb.* <span class="hljs-keyword">TO</span> <span class="hljs-string">'mqttuser'</span>@<span class="hljs-string">'%'</span>;
<span class="hljs-keyword">FLUSH</span> <span class="hljs-keyword">PRIVILEGES</span>;
<span class="hljs-keyword">USE</span> mqttdb;
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> temperatures (
  <span class="hljs-keyword">id</span> <span class="hljs-built_in">INT</span> AUTO_INCREMENT PRIMARY <span class="hljs-keyword">KEY</span>,
  <span class="hljs-keyword">value</span> <span class="hljs-built_in">FLOAT</span> <span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>,
  <span class="hljs-built_in">timestamp</span> DATETIME <span class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">CURRENT_TIMESTAMP</span>
);
</code></pre>
<hr />
<h2 id="heading-backend-server-1">🧠 Backend (Server 1)</h2>
<h3 id="heading-1-struktur-folder">1. Struktur Folder</h3>
<p>Struktur folder untuk backend proyek ini sangat sederhana dan cukup satu level saja. Berikut struktur direktori utamanya:</p>
<pre><code class="lang-bash">mqtt-backend/
│── server.js
│── package.json
</code></pre>
<h4 id="heading-penjelasan">Penjelasan:</h4>
<ul>
<li><p><code>mqtt-backend/</code>: Ini adalah folder root untuk aplikasi backend Node.js Anda. Semua file terkait backend diletakkan di sini.</p>
</li>
<li><p><code>server.js</code>: File ini adalah titik masuk (entry point) dari aplikasi backend. Di dalamnya terdapat:</p>
<ul>
<li><p>Koneksi ke broker MQTT (berlangganan data suhu)</p>
</li>
<li><p>Koneksi ke database MySQL (untuk menyimpan data suhu)</p>
</li>
<li><p>Setup WebSocket (mengirim data ke frontend secara realtime)</p>
</li>
<li><p>Setup Express.js (API dan routing jika diperlukan)</p>
</li>
</ul>
</li>
<li><p><code>package.json</code>: File ini otomatis dibuat ketika Anda menjalankan <code>npm init</code>. File ini berfungsi untuk:</p>
<ul>
<li><p>Mendefinisikan nama aplikasi, versi, deskripsi, dan entry point.</p>
</li>
<li><p>Menyimpan daftar dependency (seperti <code>express</code>, <code>mqtt</code>, <code>mysql2</code>, dan <a target="_blank" href="http://socket.io"><code>socket.io</code></a>)</p>
</li>
<li><p>Menyediakan script seperti <code>npm start</code> untuk menjalankan server</p>
</li>
</ul>
</li>
</ul>
<blockquote>
<p>💡 <strong>Tips untuk Mahasiswa</strong>:<br />Struktur folder yang rapi sangat penting dalam pengembangan perangkat lunak agar kode mudah dipelihara dan dikembangkan. Meskipun saat ini proyeknya kecil, struktur ini akan membantu saat proyek berkembang lebih besar.</p>
</blockquote>
<h3 id="heading-2-install-modul">2. Install Modul</h3>
<p>Setelah membuat folder backend, kita akan menginisialisasi proyek Node.js dan menginstal berbagai modul yang dibutuhkan.</p>
<pre><code class="lang-bash">mkdir mqtt-backend
<span class="hljs-built_in">cd</span> mqtt-backend
npm init -y
npm install express mysql2 mqtt socket.io cors
</code></pre>
<h4 id="heading-penjelasan-langkah-demi-langkah">Penjelasan langkah demi langkah:</h4>
<ul>
<li><p><code>mkdir mqtt-backend</code><br />  Membuat folder baru bernama <code>mqtt-backend</code>, tempat semua file backend akan disimpan.</p>
</li>
<li><p><code>cd mqtt-backend</code><br />  Masuk ke folder tersebut untuk mulai bekerja di dalamnya.</p>
</li>
<li><p><code>npm init -y</code><br />  Membuat file <code>package.json</code> secara otomatis. File ini berisi informasi tentang proyek dan dependency yang digunakan.</p>
</li>
<li><p><code>npm install express mysql2 mqtt</code> <a target="_blank" href="http://socket.io"><code>socket.io</code></a> <code>cors</code><br />  Menginstal semua modul yang dibutuhkan:</p>
<ol>
<li><p><code>express</code> : Framework web minimalis untuk membangun server HTTP</p>
</li>
<li><p><code>mysql2</code> : Driver untuk menghubungkan Node.js ke database MySQL</p>
</li>
<li><p><code>mqtt</code> : Library untuk berlangganan ke broker MQTT dan menerima data sensor</p>
</li>
<li><p><a target="_blank" href="http://socket.io"><code>socket.io</code></a> : Library untuk komunikasi realtime antara backend dan frontend via WebSocket</p>
</li>
<li><p><code>cors</code> : Middleware untuk mengizinkan akses lintas domain (diperlukan oleh frontend)</p>
</li>
</ol>
</li>
</ul>
<blockquote>
<p>💡 <strong>Tips untuk Mahasiswa</strong>:<br />Dalam pengembangan backend modern, menggunakan modul-modul seperti ini memudahkan kita membangun server yang tangguh, fleksibel, dan mendukung komunikasi realtime.</p>
</blockquote>
<h3 id="heading-3-kode-serverjs">3. Kode <code>server.js</code></h3>
<p>Berikut adalah kode lengkap backend Node.js yang:</p>
<ul>
<li><p>Terhubung ke broker MQTT (misalnya via aplikasi MyMQTT)</p>
</li>
<li><p>Menyimpan data suhu ke database MySQL</p>
</li>
<li><p>Mengirim data secara realtime ke frontend melalui WebSocket</p>
</li>
</ul>
<pre><code class="lang-javascript"><span class="hljs-comment">// Import modul yang dibutuhkan</span>
<span class="hljs-keyword">const</span> express = <span class="hljs-built_in">require</span>(<span class="hljs-string">'express'</span>);           <span class="hljs-comment">// Framework untuk server HTTP</span>
<span class="hljs-keyword">const</span> mqtt = <span class="hljs-built_in">require</span>(<span class="hljs-string">'mqtt'</span>);                 <span class="hljs-comment">// Untuk koneksi MQTT</span>
<span class="hljs-keyword">const</span> mysql = <span class="hljs-built_in">require</span>(<span class="hljs-string">'mysql2'</span>);              <span class="hljs-comment">// Driver MySQL</span>
<span class="hljs-keyword">const</span> cors = <span class="hljs-built_in">require</span>(<span class="hljs-string">'cors'</span>);                 <span class="hljs-comment">// Untuk mengizinkan akses dari frontend</span>
<span class="hljs-keyword">const</span> http = <span class="hljs-built_in">require</span>(<span class="hljs-string">'http'</span>);                 <span class="hljs-comment">// Untuk membuat HTTP server manual</span>
<span class="hljs-keyword">const</span> { Server } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'socket.io'</span>);      <span class="hljs-comment">// Untuk WebSocket</span>

<span class="hljs-keyword">const</span> app = express();
app.use(cors());                              <span class="hljs-comment">// Aktifkan CORS agar frontend bisa akses</span>

<span class="hljs-keyword">const</span> server = http.createServer(app);        <span class="hljs-comment">// Buat HTTP server</span>
<span class="hljs-keyword">const</span> io = <span class="hljs-keyword">new</span> Server(server, { <span class="hljs-attr">cors</span>: { <span class="hljs-attr">origin</span>: <span class="hljs-string">"*"</span> } });  <span class="hljs-comment">// Inisialisasi WebSocket</span>

<span class="hljs-comment">// Konfigurasi koneksi ke MySQL (ganti IP_SERVER2 sesuai lokasi server database)</span>
<span class="hljs-keyword">const</span> db = mysql.createConnection({
  <span class="hljs-attr">host</span>: <span class="hljs-string">'IP_SERVER2'</span>,
  <span class="hljs-attr">user</span>: <span class="hljs-string">'mqttuser'</span>,
  <span class="hljs-attr">password</span>: <span class="hljs-string">'password123'</span>,
  <span class="hljs-attr">database</span>: <span class="hljs-string">'mqttdb'</span>
});

<span class="hljs-comment">// Cek koneksi MySQL</span>
db.connect(<span class="hljs-function"><span class="hljs-params">err</span> =&gt;</span> {
  <span class="hljs-keyword">if</span> (err) <span class="hljs-keyword">return</span> <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'MySQL error:'</span>, err);
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Connected to MySQL'</span>);
});

<span class="hljs-comment">// Koneksi ke broker MQTT publik (bisa juga pakai lokal jika punya)</span>
<span class="hljs-keyword">const</span> mqttClient = mqtt.connect(<span class="hljs-string">'mqtt://broker.hivemq.com'</span>);

<span class="hljs-comment">// Saat konek ke MQTT, subscribe ke topik `sensor/suhu`</span>
mqttClient.on(<span class="hljs-string">'connect'</span>, <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'MQTT Connected'</span>);
  mqttClient.subscribe(<span class="hljs-string">'sensor/suhu'</span>);
});

<span class="hljs-comment">// Saat menerima pesan dari topik MQTT</span>
mqttClient.on(<span class="hljs-string">'message'</span>, <span class="hljs-function">(<span class="hljs-params">topic, message</span>) =&gt;</span> {
  <span class="hljs-keyword">const</span> suhu = <span class="hljs-built_in">parseFloat</span>(message.toString());   <span class="hljs-comment">// Ambil nilai suhu</span>
  <span class="hljs-keyword">if</span> (!<span class="hljs-built_in">isNaN</span>(suhu)) {
    <span class="hljs-comment">// Simpan ke database</span>
    db.query(<span class="hljs-string">'INSERT INTO temperatures (value) VALUES (?)'</span>, [suhu], <span class="hljs-function"><span class="hljs-params">err</span> =&gt;</span> {
      <span class="hljs-keyword">if</span> (err) <span class="hljs-keyword">return</span> <span class="hljs-built_in">console</span>.error(err);
      <span class="hljs-keyword">const</span> timestamp = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>().toISOString();
      <span class="hljs-comment">// Kirim ke frontend melalui WebSocket</span>
      io.emit(<span class="hljs-string">'new-data'</span>, { <span class="hljs-attr">value</span>: suhu, timestamp });
    });
  }
});

<span class="hljs-comment">// Endpoint untuk ambil data terbaru (20 data terakhir)</span>
app.get(<span class="hljs-string">'/api/data'</span>, <span class="hljs-function">(<span class="hljs-params">req, res</span>) =&gt;</span> {
  db.query(<span class="hljs-string">'SELECT * FROM temperatures ORDER BY timestamp DESC LIMIT 20'</span>, <span class="hljs-function">(<span class="hljs-params">err, results</span>) =&gt;</span> {
    <span class="hljs-keyword">if</span> (err) <span class="hljs-keyword">return</span> res.status(<span class="hljs-number">500</span>).send(<span class="hljs-string">'DB error'</span>);
    res.json(results.reverse());  <span class="hljs-comment">// Dibalik agar urutan waktu dari lama ke baru</span>
  });
});

<span class="hljs-comment">// Log ketika ada koneksi WebSocket dari frontend</span>
io.on(<span class="hljs-string">'connection'</span>, <span class="hljs-function">(<span class="hljs-params">socket</span>) =&gt;</span> {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Client connected:'</span>, socket.id);
});

<span class="hljs-comment">// Jalankan server di port 3000</span>
server.listen(<span class="hljs-number">3000</span>, <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Backend running on http://&lt;IP_SERVER1&gt;:3000'</span>);
});
</code></pre>
<p>Cara Menjalankan Backend:</p>
<pre><code class="lang-bash">node server.js
</code></pre>
<p>Jika berhasil, Anda akan melihat log:</p>
<pre><code class="lang-bash">Backend running on http://&lt;IP_SERVER1&gt;:3000
MQTT Connected
Connected to MySQL
</code></pre>
<blockquote>
<p>🎓 <strong>Catatan untuk Mahasiswa</strong>:</p>
<ul>
<li><p>Backend ini adalah jembatan antara <em>sensor (via MQTT)</em>, <em>database (MySQL)</em>, dan <em>frontend (melalui WebSocket)</em>.</p>
</li>
<li><p>Pendekatan ini sangat ideal untuk aplikasi IoT realtime karena efisien dan scalable.</p>
</li>
</ul>
</blockquote>
<hr />
<h2 id="heading-frontend-server-3">🎨 Frontend (Server 3)</h2>
<h3 id="heading-1-html-file-indexhtml">1. HTML File (<code>index.html</code>)</h3>
<p>File ini adalah tampilan sederhana berbasis HTML untuk menampilkan data suhu secara <strong>realtime</strong> menggunakan <strong>Chart.js</strong> dan <a target="_blank" href="http://Socket.IO"><strong>Socket.IO</strong></a>.</p>
<pre><code class="lang-xml"><span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"en"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Sensor Suhu Realtime<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
  <span class="hljs-comment">&lt;!-- Chart.js untuk menampilkan grafik --&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://cdn.jsdelivr.net/npm/chart.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
  <span class="hljs-comment">&lt;!-- Socket.IO client untuk komunikasi realtime --&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://cdn.socket.io/4.7.2/socket.io.min.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
  <span class="hljs-comment">&lt;!-- Bootstrap CSS untuk tampilan lebih rapi --&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"p-5"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>Sensor Suhu Realtime<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">canvas</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"suhuChart"</span> <span class="hljs-attr">width</span>=<span class="hljs-string">"600"</span> <span class="hljs-attr">height</span>=<span class="hljs-string">"300"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">canvas</span>&gt;</span>

  <span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    <span class="hljs-comment">// Inisialisasi koneksi ke backend menggunakan WebSocket</span>
    <span class="hljs-keyword">const</span> socket = io(<span class="hljs-string">'http://&lt;IP_SERVER1&gt;:3000'</span>);

    <span class="hljs-comment">// Ambil elemen canvas untuk grafik</span>
    <span class="hljs-keyword">const</span> ctx = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'suhuChart'</span>).getContext(<span class="hljs-string">'2d'</span>);

    <span class="hljs-comment">// Buat grafik awal (kosong)</span>
    <span class="hljs-keyword">const</span> chart = <span class="hljs-keyword">new</span> Chart(ctx, {
      <span class="hljs-attr">type</span>: <span class="hljs-string">'line'</span>,
      <span class="hljs-attr">data</span>: {
        <span class="hljs-attr">labels</span>: [],  <span class="hljs-comment">// Label waktu</span>
        <span class="hljs-attr">datasets</span>: [{
          <span class="hljs-attr">label</span>: <span class="hljs-string">'Suhu (°C)'</span>,
          <span class="hljs-attr">data</span>: [],
          <span class="hljs-attr">borderColor</span>: <span class="hljs-string">'red'</span>,
          <span class="hljs-attr">tension</span>: <span class="hljs-number">0.3</span>,
        }]
      }
    });

    <span class="hljs-comment">// Ketika ada data baru dari server</span>
    socket.on(<span class="hljs-string">'new-data'</span>, <span class="hljs-function">(<span class="hljs-params">data</span>) =&gt;</span> {
      <span class="hljs-keyword">const</span> time = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>(data.timestamp).toLocaleTimeString(); <span class="hljs-comment">// Format waktu</span>
      chart.data.labels.push(time);         <span class="hljs-comment">// Tambah waktu ke label</span>
      chart.data.datasets[<span class="hljs-number">0</span>].data.push(data.value); <span class="hljs-comment">// Tambah suhu ke grafik</span>

      <span class="hljs-comment">// Maksimal 20 data terakhir saja yang ditampilkan</span>
      <span class="hljs-keyword">if</span> (chart.data.labels.length &gt; <span class="hljs-number">20</span>) {
        chart.data.labels.shift();          <span class="hljs-comment">// Hapus label tertua</span>
        chart.data.datasets[<span class="hljs-number">0</span>].data.shift(); <span class="hljs-comment">// Hapus data tertua</span>
      }

      chart.update(); <span class="hljs-comment">// Update grafik di browser</span>
    });
  </span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></pre>
<p>Simpan di folder yang bisa diakses web server (<code>/var/www/html</code> atau <code>nginx/html</code>).</p>
<h4 id="heading-penjelasan-utama">🔍 Penjelasan Utama:</h4>
<ul>
<li><p><strong>Chart.js</strong>: Library visualisasi data, dipakai untuk menggambar grafik suhu.</p>
</li>
<li><p><a target="_blank" href="http://Socket.IO"><strong>Socket.IO</strong></a>: Digunakan untuk menerima data secara realtime dari server.</p>
</li>
<li><p><strong>Bootstrap</strong>: Library CSS agar tampilan frontend rapi tanpa perlu menulis CSS manual.</p>
</li>
<li><p><code>&lt;IP_SERVER1&gt;</code>: Ganti dengan IP dari <strong>Server 1</strong> tempat backend berjalan.</p>
</li>
</ul>
<blockquote>
<p>🎓 <strong>Catatan untuk Mahasiswa</strong>:<br />File ini bisa disimpan di server Apache (misalnya di <code>/var/www/html</code>) agar bisa diakses lewat browser dari berbagai perangkat dalam jaringan yang sama.</p>
</blockquote>
<hr />
<h2 id="heading-pengiriman-data">📱 Pengiriman Data</h2>
<p>Gunakan aplikasi <strong>MyMQTT</strong> di HP:</p>
<ul>
<li><p>Broker: <code>broker.hivemq.com</code></p>
</li>
<li><p>Publish ke topic: <code>sensor/suhu</code></p>
</li>
<li><p>Data: angka suhu, misal <code>34</code>, <code>35</code>, <code>36</code> per detik</p>
</li>
</ul>
<hr />
<h2 id="heading-penutup">🚀 Penutup</h2>
<p>✅ Kita sekarang memiliki sistem sensor suhu realtime dengan MQTT, MySQL, dan WebSocket yang ringan dan efisien.<br />Silakan dikembangkan untuk fitur lain seperti alert, dashboard login, grafik mingguan, dll.</p>
<hr />
<blockquote>
<p>Ditulis oleh: Hasan Amin<br />Follow saya di Hashnode dan GitHub untuk project open source lainnya.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Instalasi & Konfigurasi Layanan Server Ubuntu]]></title><description><![CDATA[Panduan ini membantu Anda mengatur Ubuntu Server untuk administrasi jaringan dan aplikasi web secara bertahap.

1. 🔄 Update & Upgrade Sistem
sudo apt update -y


2. 🔐 OpenSSH Server
Untuk login ke server secara remote.
sudo apt install openssh-serv...]]></description><link>https://blog.hasanamin.my.id/instalasi-and-konfigurasi-layanan-server-ubuntu</link><guid isPermaLink="true">https://blog.hasanamin.my.id/instalasi-and-konfigurasi-layanan-server-ubuntu</guid><category><![CDATA[ubuntu-server]]></category><category><![CDATA[linux administrator]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Thu, 22 May 2025 07:47:37 GMT</pubDate><content:encoded><![CDATA[<p>Panduan ini membantu Anda mengatur Ubuntu Server untuk administrasi jaringan dan aplikasi web secara bertahap.</p>
<hr />
<h2 id="heading-1-update-amp-upgrade-sistem">1. 🔄 Update &amp; Upgrade Sistem</h2>
<pre><code class="lang-bash">sudo apt update -y
</code></pre>
<hr />
<h2 id="heading-2-openssh-server">2. 🔐 OpenSSH Server</h2>
<p>Untuk login ke server secara remote.</p>
<pre><code class="lang-bash">sudo apt install openssh-server -y
sudo systemctl status ssh
</code></pre>
<hr />
<h2 id="heading-3-ufw-uncomplicated-firewall">3. 🧱 UFW (Uncomplicated Firewall)</h2>
<p>Mengatur lalu lintas jaringan.</p>
<pre><code class="lang-bash">sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw <span class="hljs-built_in">enable</span>
</code></pre>
<hr />
<h2 id="heading-4-apache2-web-server">4. 🌐 Apache2 Web Server</h2>
<p>Menjalankan server HTTP.</p>
<pre><code class="lang-bash">sudo apt install apache2 -y
sudo ufw allow <span class="hljs-string">'Apache Full'</span>
</code></pre>
<p>Cek: <code>http://IP-Server</code></p>
<hr />
<h2 id="heading-5-php-untuk-web-server-dinamis">5. 🐘 PHP (Untuk Web Server Dinamis)</h2>
<pre><code class="lang-bash">sudo apt install php libapache2-mod-php php-mysql -y
<span class="hljs-built_in">echo</span> <span class="hljs-string">"&lt;?php phpinfo(); ?&gt;"</span> | sudo tee /var/www/html/info.php
</code></pre>
<p>Cek: <code>http://IP-Server/info.php</code></p>
<hr />
<h2 id="heading-6-mysql-server">6. 🐬 MySQL Server</h2>
<pre><code class="lang-bash">sudo apt install mysql-server -y
sudo mysql_secure_installation
</code></pre>
<p>Membuat DB dan User:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">DATABASE</span> dbku;
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">USER</span> <span class="hljs-string">'userku'</span>@<span class="hljs-string">'localhost'</span> <span class="hljs-keyword">IDENTIFIED</span> <span class="hljs-keyword">BY</span> <span class="hljs-string">'passwordku'</span>;
<span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">ALL</span> <span class="hljs-keyword">PRIVILEGES</span> <span class="hljs-keyword">ON</span> dbku.* <span class="hljs-keyword">TO</span> <span class="hljs-string">'userku'</span>@<span class="hljs-string">'localhost'</span>;
<span class="hljs-keyword">FLUSH</span> <span class="hljs-keyword">PRIVILEGES</span>;
</code></pre>
<hr />
<h2 id="heading-7-python-amp-pip">7. 🐍 Python &amp; Pip</h2>
<pre><code class="lang-bash">sudo apt install python3 python3-pip python3-venv -y
python3 --version
pip3 --version
</code></pre>
<p>Opsional:</p>
<pre><code class="lang-bash">python3 -m venv env
<span class="hljs-built_in">source</span> env/bin/activate
</code></pre>
<hr />
<h2 id="heading-8-mosquitto-mqtt-broker">8. 📡 Mosquitto MQTT Broker</h2>
<pre><code class="lang-bash">sudo apt install mosquitto mosquitto-clients -y
sudo systemctl <span class="hljs-built_in">enable</span> mosquitto
</code></pre>
<p>Konfigurasi:</p>
<pre><code class="lang-bash">sudo nano /etc/mosquitto/mosquitto.conf
</code></pre>
<p>Tambahkan:</p>
<pre><code class="lang-bash">allow_anonymous <span class="hljs-literal">true</span>
listener 1883
</code></pre>
<p>Restart:</p>
<pre><code class="lang-bash">sudo systemctl restart mosquitto
</code></pre>
<p>Tes:</p>
<pre><code class="lang-bash">mosquitto_sub -h localhost -t topikku &amp;
mosquitto_pub -h localhost -t topikku -m <span class="hljs-string">"halo dari broker mqtt"</span>
</code></pre>
<hr />
<h2 id="heading-9-ftp-server-vsftpd">9. 🗂️ FTP Server (vsftpd)</h2>
<pre><code class="lang-bash">sudo apt install vsftpd -y
sudo nano /etc/vsftpd.conf
</code></pre>
<p>Ubah:</p>
<pre><code class="lang-bash">write_enable=YES
local_enable=YES
</code></pre>
<p>Restart:</p>
<pre><code class="lang-bash">sudo systemctl restart vsftpd
</code></pre>
<hr />
<h2 id="heading-10-samba-file-sharing">10. 📂 Samba (File Sharing)</h2>
<pre><code class="lang-bash">sudo apt install samba -y
sudo mkdir -p /srv/sambashare
sudo chown nobody:nogroup /srv/sambashare
sudo nano /etc/samba/smb.conf
</code></pre>
<p>Tambahkan:</p>
<pre><code class="lang-ini"><span class="hljs-section">[Shared]</span>
<span class="hljs-attr">path</span> = /srv/sambashare
<span class="hljs-attr">browseable</span> = <span class="hljs-literal">yes</span>
read <span class="hljs-attr">only</span> = <span class="hljs-literal">no</span>
guest <span class="hljs-attr">ok</span> = <span class="hljs-literal">yes</span>
</code></pre>
<p>Restart:</p>
<pre><code class="lang-bash">sudo systemctl restart smbd
</code></pre>
<hr />
<h2 id="heading-11-dhcp-server">11. 🌐 DHCP Server</h2>
<pre><code class="lang-bash">sudo apt install isc-dhcp-server -y
sudo nano /etc/dhcp/dhcpd.conf
</code></pre>
<p>Contoh konfigurasi:</p>
<pre><code class="lang-bash">subnet 192.168.56.0 netmask 255.255.255.0 {
  range 192.168.56.100 192.168.56.200;
  option routers 192.168.56.1;
  option domain-name-servers 8.8.8.8;
}
</code></pre>
<p>Pilih interface:</p>
<pre><code class="lang-bash">sudo nano /etc/default/isc-dhcp-server
INTERFACESv4=<span class="hljs-string">"enp0s3"</span>
</code></pre>
<p>Restart:</p>
<pre><code class="lang-bash">sudo systemctl restart isc-dhcp-server
</code></pre>
<hr />
<h2 id="heading-12-dns-server-bind9">12. 🖥️ DNS Server (Bind9)</h2>
<pre><code class="lang-bash">sudo apt install bind9 bind9utils bind9-doc -y
sudo nano /etc/<span class="hljs-built_in">bind</span>/named.conf.local
</code></pre>
<p>Contoh konfigurasi:</p>
<pre><code class="lang-bash">zone <span class="hljs-string">"example.local"</span> {
    <span class="hljs-built_in">type</span> master;
    file <span class="hljs-string">"/etc/bind/db.example.local"</span>;
};

zone <span class="hljs-string">"56.168.192.in-addr.arpa"</span> {
    <span class="hljs-built_in">type</span> master;
    file <span class="hljs-string">"/etc/bind/db.192"</span>;
}
</code></pre>
<p>Restart:</p>
<pre><code class="lang-bash">sudo systemctl restart bind9
</code></pre>
<hr />
<h2 id="heading-13-fail2ban">13. 🛡️ Fail2Ban</h2>
<pre><code class="lang-bash">sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
</code></pre>
<p>Aktifkan SSH:</p>
<pre><code class="lang-ini"><span class="hljs-section">[sshd]</span>
<span class="hljs-attr">enabled</span> = <span class="hljs-literal">true</span>
</code></pre>
<p>Restart:</p>
<pre><code class="lang-bash">sudo systemctl restart fail2ban
</code></pre>
<hr />
<h2 id="heading-14-zerotier">14. 🛡️ Zerotier</h2>
<pre><code class="lang-bash">curl -s https://install.zerotier.com | sudo bash
</code></pre>
<p><em>Jika ada GPG terinstall, Option yang lebih aman juga tersedia:</em></p>
<pre><code class="lang-bash">curl -s <span class="hljs-string">'https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact%40zerotier.com.gpg'</span> | gpg --import &amp;amp;&amp;amp; \
<span class="hljs-keyword">if</span> z=$(curl -s <span class="hljs-string">'https://install.zerotier.com/'</span> | gpg); <span class="hljs-keyword">then</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$z</span>"</span> | sudo bash; <span class="hljs-keyword">fi</span>
</code></pre>
<p>Setelah install, jangan lupa update package nya menggunakan apt / yum update.</p>
<p>Untuk cek apakah zerotier sudah terinstall di server, maka masukkan perintah berikut ini:</p>
<pre><code class="lang-bash">sudo zerotier-cli status
</code></pre>
<p>kemudian untuk konek ke dalam jaringan zerotier, maka masukkan perintah berikut ini:</p>
<pre><code class="lang-bash">sudo zerotier-cli join &lt;NETWORK ID&gt;
</code></pre>
<hr />
<h2 id="heading-penutup">✅ Penutup</h2>
<h2 id="heading-penutup-1">✅ Penutup</h2>
<p>Dengan layanan di atas, server Anda siap:</p>
<ul>
<li><p>Menyediakan web dan database dinamis</p>
</li>
<li><p>Mengatur komunikasi IoT</p>
</li>
<li><p>Berbagi file lintas sistem</p>
</li>
<li><p>Mengatur IP dan DNS lokal</p>
</li>
<li><p>Mengelola keamanan akses</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Instalasi Ubuntu Server di VirtualBox]]></title><description><![CDATA[Menginstal Ubuntu Server di VirtualBox adalah cara praktis untuk belajar administrasi server tanpa harus menggunakan perangkat fisik tambahan. Berikut ini panduan lengkap mulai dari pengunduhan hingga konfigurasi awal server.

🧰 Persiapan
1. Downloa...]]></description><link>https://blog.hasanamin.my.id/instalasi-ubuntu-server-di-virtualbox</link><guid isPermaLink="true">https://blog.hasanamin.my.id/instalasi-ubuntu-server-di-virtualbox</guid><category><![CDATA[Ubuntu]]></category><category><![CDATA[virtual machine]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Thu, 22 May 2025 07:10:24 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747898138419/b382af18-27bd-42cc-8389-db0f5b86ca21.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Menginstal Ubuntu Server di VirtualBox adalah cara praktis untuk belajar administrasi server tanpa harus menggunakan perangkat fisik tambahan. Berikut ini panduan lengkap mulai dari pengunduhan hingga konfigurasi awal server.</p>
<hr />
<h2 id="heading-persiapan">🧰 Persiapan</h2>
<h3 id="heading-1-download-software-yang-dibutuhkan">1. Download Software yang Dibutuhkan</h3>
<h4 id="heading-a-virtualbox">a. VirtualBox</h4>
<p>Unduh VirtualBox dari situs resmi:<br />🔗 <a target="_blank" href="https://www.virtualbox.org/">https://www.virtualbox.org/</a></p>
<h4 id="heading-b-ubuntu-server-iso">b. Ubuntu Server ISO</h4>
<p>Unduh versi LTS terbaru dari Ubuntu Server:<br />🔗 <a target="_blank" href="https://ubuntu.com/download/server">https://ubuntu.com/download/server</a></p>
<p>Contoh: <code>ubuntu-22.04.4-live-server-amd64.iso</code></p>
<hr />
<h2 id="heading-langkah-langkah-instalasi">🛠️ Langkah-Langkah Instalasi</h2>
<h3 id="heading-2-buat-mesin-virtual-baru">2. Buat Mesin Virtual Baru</h3>
<ol>
<li><p>Buka <strong>VirtualBox</strong>, klik tombol <strong>"New"</strong>.</p>
</li>
<li><p>Isi informasi:</p>
<ul>
<li><p><strong>Name</strong>: Ubuntu-Server</p>
</li>
<li><p><strong>ISO Image:</strong> File iso ubuntu server nya</p>
</li>
<li><p><strong>Type</strong>: Linux</p>
</li>
<li><p><strong>Version</strong>: Ubuntu (64-bit)</p>
</li>
<li><p>Ceklik skip Unattended Installation</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747894037175/ab94f533-01ed-42e2-bdea-9d54b529cfa8.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p>Klik <strong>Next</strong>, lalu atur Hardware:</p>
<ul>
<li><p><strong>RAM</strong>: Minimal 1024 MB (disarankan 2048 MB)</p>
</li>
<li><p>CPU: Minimal 1 (disarankan 2 cpu)</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747893858130/6eaf25e7-8ec4-4c55-8258-eb7d97d74341.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p>Pilih <strong>"Create a virtual hard disk now"</strong>, lalu klik <strong>Create</strong>.</p>
</li>
<li><p>Pilih <strong>VDI (VirtualBox Disk Image)</strong> → <strong>Dynamically allocated</strong>.</p>
</li>
<li><p>Tentukan ukuran hard disk virtual:</p>
<ul>
<li><p><strong>Ukuran</strong>: Minimal 10 GB (disarankan 20 GB)</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747894104516/43f9c221-b4ff-4f5e-9b95-5b5132287179.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p>Klik Finish</p>
</li>
</ol>
<hr />
<h3 id="heading-4-proses-intsalasi">4. Proses Intsalasi</h3>
<ol>
<li><p>Klik <strong>Start</strong> untuk menyalakan mesin virtual.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747894343235/e93dcd99-0a45-4c74-8339-91b35c831c26.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Proses boot akan dimulai dari file ISO. → tekan <strong>Enter</strong>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747894389101/5a5eb8ad-699c-4450-99db-3ac9fb6a6e26.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Pilih bahasa sesuai kebutuhan. → tekan <strong>Enter</strong>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747894780702/dfd91e34-e254-4386-8711-7564960b6581.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Pilih <strong>Continue Without Updating</strong> → tekan <strong>Enter</strong>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747894844677/792fc3ac-7458-43a7-9945-5967c6892260.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Biasanya otomatis mendeteksi, jika tidak, pilih <strong>English (US)</strong> atau sesuai kebutuhan.. <strong><mark>Done</mark></strong> → tekan <strong>Enter</strong>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747894946459/a3a47f81-9860-44ae-bd96-0fb42507154d.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Pilih <strong>Install OpenSSH server</strong> agar bisa akses server via SSH nanti. <strong><mark>Done</mark></strong> → tekan <strong>Enter</strong>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747895054835/37ee87f0-1af1-496c-bb6f-ff1fe8e6f65c.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Pengaturan Jaringan</p>
<ul>
<li><p>Jika ada DHCP, jaringan akan otomatis terdeteksi.</p>
</li>
<li><p>Jika tidak, atur IP secara manual.</p>
</li>
<li><p>Atau biarkan default agar bisa di setup nanti</p>
</li>
<li><p><strong><mark>Done</mark></strong> → tekan <strong>Enter</strong>.</p>
</li>
</ul>
</li>
</ol>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747895665976/607d680a-37fe-40f0-b840-364ebe0f5510.png" alt class="image--center mx-auto" /></p>
<ol start="8">
<li><p><strong>Proxy Address</strong>: Kosongkan. <strong><mark>Done</mark></strong> → tekan <strong>Enter</strong>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747895761114/50094f85-7c74-48f3-a6ac-f9ae8170753c.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747895819527/1da431be-d2a6-465a-972a-b577e17181d8.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Partisi Disk</p>
<ul>
<li><p>Pilih <strong>Use entire disk</strong> → lanjutkan.</p>
</li>
<li><p>Konfirmasi dengan memilih <strong>Done</strong> dan <strong>Continue</strong>.</p>
</li>
</ul>
</li>
</ol>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747895894789/d772d0b4-4618-48ce-8f26-ded7a7584f90.png" alt class="image--center mx-auto" /></p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747895948755/f6786dc6-29d8-4674-a508-aafd1fc9a9e6.png" alt class="image--center mx-auto" /></p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747895973387/47bd6433-3a58-4334-a669-181c48171849.png" alt class="image--center mx-auto" /></p>
<ol start="10">
<li><p>Nama Server &amp; Username</p>
<ul>
<li><p><strong>Full name</strong>: Nama Lengkap</p>
</li>
<li><p><strong>Server name</strong>: server</p>
</li>
<li><p><strong>Username</strong>: ubuntu</p>
</li>
<li><p><strong>Password</strong>: (isi sesuai keinginan)</p>
</li>
<li><p><strong><mark>Done</mark></strong> → tekan <strong>Enter</strong>.</p>
</li>
</ul>
</li>
</ol>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747896113745/c5cb92d1-5302-4e3a-84a6-8b1a56da541e.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Gunakan spasi untuk memilih Skip for now. <strong><mark>Continue </mark></strong> → tekan <strong>Enter</strong>.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747896192328/c0444aa2-dac4-444f-a58a-2385d0e28d8e.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<ol start="11">
<li>Instalasi OpenSSH</li>
</ol>
<ul>
<li><p>Pilih <strong>Install OpenSSH server</strong> dengan klik tombol spasi agar bisa akses server via SSH nanti.</p>
</li>
<li><p><strong><mark>Done</mark></strong>→ tekan <strong>Enter</strong>.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747896553460/941e2ee7-8f70-4e82-b9e0-09b76dba4cde.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<ol start="12">
<li>Pilih Snap / Fitur Tambahan</li>
</ol>
<ul>
<li><p>Lewati atau pilih sesuai kebutuhan (misal: Docker, Ansible, dll).</p>
</li>
<li><p><strong><mark>Done</mark></strong>→ tekan <strong>Enter</strong>.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747896653406/5ad6ba38-8957-441c-abdb-9faa1aabfad4.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<ol start="13">
<li><p>Instalasi Dimulai</p>
<ul>
<li>Tunggu hingga proses instalasi selesai (sekitar 5–10 menit).</li>
</ul>
</li>
</ol>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747896820629/06031aff-ac42-4702-abd6-2e4edb83e7cc.png" alt class="image--center mx-auto" /></p>
<ol start="14">
<li>Reboot</li>
</ol>
<ul>
<li><p>Setelah selesai, pilih <strong>Reboot Now</strong>.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747897030097/6b43a718-f11a-420f-86cd-6e3bc8663d07.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Eject ISO agar tidak boot ulang ke installer:</p>
<ul>
<li><p>Klik kanan ikon CD → <strong>Remove disk from virtual drive</strong>.</p>
</li>
<li><p>Jika sudah otomatis tereject biarkan saja</p>
</li>
</ul>
</li>
</ul>
<hr />
<h2 id="heading-login-pertama">✅ Login Pertama</h2>
<p>Setelah reboot:</p>
<ul>
<li><p>Login dengan username dan password yang dibuat saat instalasi.</p>
</li>
<li><p>Password tidak akan muncul saat di ketik, jadi harus yakin bahwa password nya benar</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747897295766/df6568a4-82fc-48ae-8146-2beea5e3c9d5.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Ketik perintah dasar seperti:</p>
</li>
</ul>
<pre><code class="lang-bash">sudo apt update
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747897393830/4eda112d-2a8e-47c4-a707-356bece97d5a.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-tips-tambahan-opsional">🧪 Tips Tambahan (Opsional)</h2>
<ul>
<li><p><strong>Snapshot</strong>: Sebelum mengutak-atik sistem, ambil snapshot di VirtualBox.</p>
</li>
<li><p><strong>Bridged Network</strong>: Agar server bisa diakses dari luar (misal via SSH), ubah adapter dari NAT ke <strong>Bridged Adapter</strong> di pengaturan jaringan mesin virtual.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747897515323/f2b1561a-080b-489f-a492-180773a534ad.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747897667994/b7cfed8e-65f7-471d-a0d5-9ae6154ee6a4.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Simulasi Penyerangan Database Menggunakan Kali Linux]]></title><description><![CDATA[⚠️ Disclaimer

Simulasi ini hanya boleh dilakukan di lingkungan lokal (localhost) untuk tujuan pembelajaran. Jangan pernah melakukan ini di sistem yang tidak kamu miliki izin penuh.


🎯 Tujuan Simulasi

Mempelajari bagaimana SQL Injection bekerja

M...]]></description><link>https://blog.hasanamin.my.id/simulasi-penyerangan-database-menggunakan-kali-linux</link><guid isPermaLink="true">https://blog.hasanamin.my.id/simulasi-penyerangan-database-menggunakan-kali-linux</guid><category><![CDATA[Kali Linux]]></category><category><![CDATA[#sqlinjection]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Wed, 21 May 2025 11:47:37 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-disclaimer">⚠️ Disclaimer</h3>
<blockquote>
<p><strong>Simulasi ini hanya boleh dilakukan di lingkungan lokal (</strong><a target="_blank" href="http://localhost"><strong>localhost</strong></a><strong>) untuk tujuan pembelajaran. Jangan pernah melakukan ini di sistem yang tidak kamu miliki izin penuh.</strong></p>
</blockquote>
<hr />
<h2 id="heading-tujuan-simulasi">🎯 Tujuan Simulasi</h2>
<ul>
<li><p>Mempelajari bagaimana SQL Injection bekerja</p>
</li>
<li><p>Menggunakan <code>sqlmap</code> untuk menguji kerentanan database</p>
</li>
<li><p>Menunjukkan pentingnya validasi input dan pengamanan query di backend</p>
</li>
</ul>
<hr />
<h2 id="heading-tools-yang-digunakan">🧰 Tools yang Digunakan</h2>
<ul>
<li><p>Kali Linux</p>
</li>
<li><p>XAMPP / Apache + MySQL (server lokal)</p>
</li>
<li><p><code>sqlmap</code> (sudah tersedia di Kali Linux)</p>
</li>
<li><p>Aplikasi web rentan: <strong>DVWA (Damn Vulnerable Web Application)</strong></p>
</li>
</ul>
<hr />
<h2 id="heading-langkah-langkah-praktikum">🏗️ Langkah-Langkah Praktikum</h2>
<h3 id="heading-1-install-dvwa-di-mesin-target-localhosthttplocalhost">1. Install DVWA di Mesin Target (<a target="_blank" href="http://localhost">localhost</a>)</h3>
<p><strong>Di Kali atau Ubuntu server:</strong></p>
<pre><code class="lang-bash">sudo apt update
sudo apt install apache2 mariadb-server php php-mysqli git -y
<span class="hljs-built_in">cd</span> /var/www/html
sudo git <span class="hljs-built_in">clone</span> https://github.com/digininja/DVWA.git
sudo chown -R www-data:www-data DVWA
</code></pre>
<h3 id="heading-2-konfigurasi-database-dvwa">2. Konfigurasi Database DVWA</h3>
<pre><code class="lang-bash">sudo mysql -u root
</code></pre>
<p>Di prompt MySQL:</p>
<pre><code class="lang-bash">CREATE DATABASE dvwa;
CREATE USER <span class="hljs-string">'dvwauser'</span>@<span class="hljs-string">'localhost'</span> IDENTIFIED BY <span class="hljs-string">'dvwapass'</span>;
GRANT ALL PRIVILEGES ON dvwa.* TO <span class="hljs-string">'dvwauser'</span>@<span class="hljs-string">'localhost'</span>;
FLUSH PRIVILEGES;
EXIT;
</code></pre>
<p>Edit file <code>DVWA/config/</code><a target="_blank" href="http://config.inc"><code>config.inc</code></a><code>.php</code>:</p>
<pre><code class="lang-bash"><span class="hljs-variable">$_DVWA</span>[ <span class="hljs-string">'db_user'</span> ] = <span class="hljs-string">'dvwauser'</span>;
<span class="hljs-variable">$_DVWA</span>[ <span class="hljs-string">'db_password'</span> ] = <span class="hljs-string">'dvwapass'</span>;
</code></pre>
<h3 id="heading-3-jalankan-apache-dan-mysql">3. Jalankan Apache dan MySQL</h3>
<pre><code class="lang-bash">sudo systemctl start apache2
sudo systemctl start mysql
</code></pre>
<p>Akses DVWA di browser:</p>
<pre><code class="lang-bash">http://localhost/DVWA/setup.php
</code></pre>
<p>Klik <strong>Create / Reset Database</strong>.</p>
<p>Set <strong>Security Level</strong> ke "Low".</p>
<hr />
<h2 id="heading-simulasi-serangan-sql-injection">🧪 Simulasi Serangan SQL Injection</h2>
<h3 id="heading-1-akses-target">1. Akses Target</h3>
<p>Cek halaman login atau halaman dengan parameter GET (misal: <code>id=1</code>):</p>
<pre><code class="lang-bash">http://localhost/DVWA/vulnerabilities/sqli/?id=1&amp;Submit=Submit<span class="hljs-comment">#</span>
</code></pre>
<h3 id="heading-2-jalankan-sqlmap">2. Jalankan sqlmap</h3>
<p>Buka terminal di Kali Linux dan jalankan:</p>
<pre><code class="lang-bash">sqlmap -u <span class="hljs-string">"http://localhost/DVWA/vulnerabilities/sqli/?id=1&amp;Submit=Submit#"</span> --cookie=<span class="hljs-string">"security=low; PHPSESSID=..."</span> --dbs
</code></pre>
<blockquote>
<p>📝 Ganti <code>PHPSESSID=...</code> dengan session cookie dari browser.</p>
</blockquote>
<p><code>sqlmap</code> akan mendeteksi dan menampilkan database yang tersedia.</p>
<h3 id="heading-3-dump-isi-database">3. Dump Isi Database</h3>
<p>Setelah tahu nama databasenya, misalnya <code>dvwa</code>, lakukan dump tabel:</p>
<pre><code class="lang-bash">sqlmap -u <span class="hljs-string">"http://localhost/DVWA/vulnerabilities/sqli/?id=1&amp;Submit=Submit#"</span> --cookie=<span class="hljs-string">"..."</span> -D dvwa --tables
sqlmap -u <span class="hljs-string">"..."</span> --cookie=<span class="hljs-string">"..."</span> -D dvwa -T users --dump
</code></pre>
<hr />
<h2 id="heading-hasil-yang-didapat">🔍 Hasil yang Didapat</h2>
<ul>
<li><p>Nama-nama database dan tabel terbuka</p>
</li>
<li><p>Data user seperti username dan password berhasil diambil</p>
</li>
<li><p>Menunjukkan <strong>betapa berbahayanya input tanpa filter</strong></p>
</li>
</ul>
<hr />
<h2 id="heading-tindakan-pencegahan">🛡️ Tindakan Pencegahan</h2>
<ol>
<li><p>Gunakan <strong>prepared statements</strong> di backend.</p>
</li>
<li><p>Validasi semua input dari user.</p>
</li>
<li><p>Jangan tampilkan error SQL ke user.</p>
</li>
<li><p>Gunakan WAF (Web Application Firewall).</p>
</li>
<li><p>Selalu update dan patch sistem.</p>
</li>
</ol>
<hr />
<h2 id="heading-kesimpulan">✅ Kesimpulan</h2>
<p>Simulasi ini menunjukkan betapa mudahnya database bisa diretas jika:</p>
<ul>
<li><p>Tidak ada sanitasi input</p>
</li>
<li><p>Aplikasi tidak aman</p>
</li>
<li><p>Sistem terlalu terbuka</p>
</li>
</ul>
<blockquote>
<p>💡 Praktikum ini bukan hanya tentang menyerang, tapi <strong>membuka mata bahwa keamanan web dan database adalah tanggung jawab utama developer &amp; sysadmin.</strong></p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Database Multilevel]]></title><description><![CDATA[📌 Apa Itu Database Multilevel?
Database Multilevel adalah jenis database yang menyimpan data dengan level keamanan berbeda-beda. Ini seperti menyimpan data di laci-laci yang hanya bisa dibuka oleh orang dengan kunci (akses) tertentu.
🔐 Tujuannya: M...]]></description><link>https://blog.hasanamin.my.id/database-multilevel</link><guid isPermaLink="true">https://blog.hasanamin.my.id/database-multilevel</guid><category><![CDATA[cyber security]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Wed, 21 May 2025 11:44:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747827740035/77fc8b3f-379b-49f1-a165-79e05d50dac9.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-apa-itu-database-multilevel">📌 Apa Itu Database Multilevel?</h2>
<p><strong>Database Multilevel</strong> adalah jenis database yang menyimpan data dengan <em>level keamanan</em> berbeda-beda. Ini seperti menyimpan data di laci-laci yang hanya bisa dibuka oleh orang dengan kunci (akses) tertentu.</p>
<p>🔐 <strong>Tujuannya</strong>: Mencegah pengguna dengan hak akses rendah mengakses data yang sensitif atau rahasia.</p>
<hr />
<h2 id="heading-analogi-super-gampang">🧠 Analogi Super Gampang</h2>
<p>Bayangkan kamu bekerja di sebuah kantor:</p>
<ul>
<li><p>Pegawai biasa hanya bisa buka <strong>laci meja</strong> berlabel "Publik".</p>
</li>
<li><p>Manajer bisa buka laci "Publik" dan "Rahasia Tim".</p>
</li>
<li><p>Direktur bisa buka semua laci, termasuk "Sangat Rahasia".</p>
</li>
</ul>
<p>Setiap laci = <em>level keamanan data</em>.<br />Setiap orang = <em>user dengan level akses berbeda</em>.<br />Sistem ini memastikan <strong>hanya orang yang tepat melihat data yang tepat</strong>.</p>
<hr />
<h2 id="heading-studi-kasus-sederhana">📚 Studi Kasus Sederhana</h2>
<h3 id="heading-kasus-sistem-database-militer">🎯 Kasus: Sistem Database Militer</h3>
<p>Bayangkan ada database militer berisi:</p>
<ul>
<li><p><strong>Data personil umum</strong>: bisa diakses oleh semua anggota.</p>
</li>
<li><p><strong>Rencana operasi</strong>: hanya bisa diakses oleh perwira.</p>
</li>
<li><p><strong>Intelijen rahasia</strong>: hanya bisa diakses oleh jenderal.</p>
</li>
</ul>
<p>Tanpa sistem multilevel, tentara biasa bisa lihat data rahasia.<br />Dengan sistem multilevel, <strong>akses dibatasi sesuai level keamanan</strong>.</p>
<hr />
<h2 id="heading-praktikum-uji-coba-sistem-multilevel-access-di-kali-linux">🧪 Praktikum: Uji Coba Sistem Multilevel Access di Kali Linux</h2>
<blockquote>
<p>💡 <strong>Tujuan</strong>: Mensimulasikan pembatasan akses ke file/direktori berdasarkan <em>security level</em> dengan user yang berbeda.</p>
</blockquote>
<h3 id="heading-persiapan">🔧 Persiapan</h3>
<ol>
<li><p>Gunakan Kali Linux (bisa pakai VirtualBox/VMware).</p>
</li>
<li><p>Buat 3 user:</p>
<pre><code class="lang-bash"> sudo adduser user_biasa
 sudo adduser user_perwira
 sudo adduser user_jenderal
</code></pre>
</li>
<li><p>Buat grup:</p>
<pre><code class="lang-bash"> sudo groupadd level_rahasia
 sudo groupadd level_sangat_rahasia
</code></pre>
</li>
<li><p>Tambahkan user ke grup:</p>
<pre><code class="lang-bash"> sudo usermod -aG level_rahasia user_perwira
 sudo usermod -aG level_sangat_rahasia user_jenderal
</code></pre>
</li>
</ol>
<h3 id="heading-simulasi-direktori-multilevel">📁 Simulasi Direktori Multilevel</h3>
<ol>
<li><p>Buat folder dan file:</p>
<pre><code class="lang-bash"> sudo mkdir /multilevel_data
 <span class="hljs-built_in">cd</span> /multilevel_data
 sudo mkdir publik rahasia sangat_rahasia

 <span class="hljs-built_in">echo</span> <span class="hljs-string">"Ini data publik"</span> | sudo tee publik/data.txt
 <span class="hljs-built_in">echo</span> <span class="hljs-string">"Ini data rahasia"</span> | sudo tee rahasia/data.txt
 <span class="hljs-built_in">echo</span> <span class="hljs-string">"Ini data sangat rahasia"</span> | sudo tee sangat_rahasia/data.txt
</code></pre>
</li>
<li><p>Set hak akses:</p>
<pre><code class="lang-bash"> <span class="hljs-comment"># Publik: semua boleh baca</span>
 sudo chmod 755 publik

 <span class="hljs-comment"># Rahasia: hanya grup level_rahasia</span>
 sudo chown :level_rahasia rahasia
 sudo chmod 770 rahasia

 <span class="hljs-comment"># Sangat Rahasia: hanya grup level_sangat_rahasia</span>
 sudo chown :level_sangat_rahasia sangat_rahasia
 sudo chmod 770 sangat_rahasia
</code></pre>
</li>
</ol>
<hr />
<h2 id="heading-pengujian-akses-simulasi-pelanggaran">🔍 Pengujian Akses (Simulasi Pelanggaran)</h2>
<p>Login sebagai user biasa:</p>
<pre><code class="lang-bash">su - user_biasa
<span class="hljs-built_in">cd</span> /multilevel_data/rahasia
</code></pre>
<p>➡️ Harusnya akan muncul <strong>Permission Denied</strong>.</p>
<p>Login sebagai user_perwira:</p>
<pre><code class="lang-bash">su - user_perwira
<span class="hljs-built_in">cd</span> /multilevel_data/rahasia
cat data.txt  <span class="hljs-comment"># Bisa dibaca</span>
</code></pre>
<p>Login sebagai user_jenderal:</p>
<pre><code class="lang-bash">su - user_jenderal
<span class="hljs-built_in">cd</span> /multilevel_data/sangat_rahasia
cat data.txt  <span class="hljs-comment"># Bisa dibaca</span>
</code></pre>
<hr />
<h2 id="heading-apa-yang-bisa-dipelajari">⚠️ Apa yang Bisa Dipelajari?</h2>
<ul>
<li><p>Sistem ini <strong>melindungi data sensitif berdasarkan level</strong>.</p>
</li>
<li><p>Pengguna tidak bisa mengakses data di luar haknya.</p>
</li>
<li><p>Simulasi ini penting untuk dipahami oleh siapa pun yang membangun sistem keamanan.</p>
</li>
</ul>
<hr />
<h2 id="heading-kesimpulan">🚀 Kesimpulan</h2>
<p><strong>Database Multilevel</strong> adalah pendekatan penting dalam dunia cybersecurity.<br />Dengan membatasi akses berdasarkan level, kita bisa menjaga data tetap aman di lingkungan yang kompleks — seperti militer, pemerintahan, atau bahkan perusahaan teknologi.</p>
<blockquote>
<p>🛡️ Dalam dunia yang makin rawan kebocoran data, pendekatan multilevel adalah <strong>benteng pertahanan pertama</strong> yang wajib dipahami.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Multiplexer dan Pengecekan Kesalahan Paritas]]></title><description><![CDATA[🔀 Multiplexer dan Paritas: Teori, Fungsi, Contoh, dan Analogi Paling Gampang!

Yuk bahas dua topik penting dalam dunia elektronika digital dan komunikasi data: Multiplexer (MUX) dan Paritas. Lengkap dari teori sampai contoh praktisnya!


🎛️ Multipl...]]></description><link>https://blog.hasanamin.my.id/multiplexer-dan-pengecekan-kesalahan-paritas</link><guid isPermaLink="true">https://blog.hasanamin.my.id/multiplexer-dan-pengecekan-kesalahan-paritas</guid><category><![CDATA[multiplexer]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Wed, 21 May 2025 11:32:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747826714107/e07c2f85-29c6-4ded-b6fb-969b1a47e033.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-multiplexer-dan-paritas-teori-fungsi-contoh-dan-analogi-paling-gampang">🔀 Multiplexer dan Paritas: Teori, Fungsi, Contoh, dan Analogi Paling Gampang!</h2>
<blockquote>
<p>Yuk bahas dua topik penting dalam dunia elektronika digital dan komunikasi data: <strong>Multiplexer (MUX)</strong> dan <strong>Paritas</strong>. Lengkap dari teori sampai contoh praktisnya!</p>
</blockquote>
<hr />
<h2 id="heading-multiplexer">🎛️ Multiplexer</h2>
<h3 id="heading-definisi-teori">📘 Definisi Teori</h3>
<p><strong>Multiplexer (MUX)</strong> adalah <strong>komponen logika digital</strong> yang berfungsi untuk <strong>memilih satu dari beberapa sinyal input dan meneruskannya ke satu jalur output</strong> berdasarkan sinyal kontrol (selector).</p>
<p>MUX dikenal juga sebagai <strong>data selector</strong>, karena ia memilih <strong>satu input dari banyak jalur</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747827248259/a1e3a8da-e3d9-4601-880b-e87dee8986e4.png" alt class="image--center mx-auto" /></p>
<hr />
<h3 id="heading-kenapa-harus-ada-multiplexer">❓ Kenapa Harus Ada Multiplexer?</h3>
<p>Tanpa MUX, jika kita ingin membaca banyak sinyal input (misalnya sensor) secara paralel, maka:</p>
<ul>
<li><p>Dibutuhkan banyak pin input pada mikrokontroler</p>
</li>
<li><p>Menyulitkan routing sinyal pada sistem digital</p>
</li>
</ul>
<p>👉 <strong>Multiplexer menghemat jalur koneksi</strong>, karena cukup satu jalur output yang bisa digunakan untuk banyak input.</p>
<hr />
<h3 id="heading-digunakan-untuk-apa">🎯 Digunakan Untuk Apa?</h3>
<p>Beberapa <strong>penggunaan multiplexer</strong> dalam dunia nyata:</p>
<ul>
<li><p>Menggabungkan banyak sensor ke satu pin analog mikrokontroler</p>
</li>
<li><p>Menyalurkan data dari berbagai sumber ke satu saluran komunikasi</p>
</li>
<li><p>Implementasi dalam <strong>CPU</strong>, seperti memilih data dari register atau ALU</p>
</li>
<li><p>Menyederhanakan rangkaian logika</p>
</li>
</ul>
<hr />
<h3 id="heading-analogi-simpel">🤔 Analogi Simpel</h3>
<p>Bayangkan kamu bekerja di restoran dengan 4 juru masak. Kamu hanya punya <strong>1 interkom</strong> untuk berbicara. Lalu kamu bilang:</p>
<blockquote>
<p>“Sekarang sambungkan ke koki nomor 2.”</p>
</blockquote>
<p>📌 Di sini:</p>
<ul>
<li><p>Kamu = <strong>Selector</strong></p>
</li>
<li><p>4 juru masak = <strong>Input</strong></p>
</li>
<li><p>Interkom = <strong>Output</strong></p>
</li>
<li><p>Orang yang memilih = <strong>MUX</strong></p>
</li>
</ul>
<p>MUX menghubungkan satu input yang dipilih ke satu output.</p>
<hr />
<h3 id="heading-contoh-dan-studi-kasus">💡 Contoh dan Studi Kasus</h3>
<h4 id="heading-kasus">Kasus:</h4>
<p>Kamu membuat sistem monitoring suhu untuk 4 ruangan berbeda (sensor A, B, C, D), tapi mikrokontrolermu cuma punya <strong>1 pin analog input</strong>.</p>
<h4 id="heading-solusi">Solusi:</h4>
<p>Gunakan <strong>MUX 4-to-1</strong>. Sambungkan:</p>
<ul>
<li><p>I0 = Sensor A</p>
</li>
<li><p>I1 = Sensor B</p>
</li>
<li><p>I2 = Sensor C</p>
</li>
<li><p>I3 = Sensor D</p>
</li>
</ul>
<p>Gunakan <strong>2 bit selector</strong> untuk memilih input mana yang dibaca.</p>
<pre><code class="lang-bash">| S1 | S0 | Output |
|----|----|--------|
| 0  | 0  | I0     |
| 0  | 1  | I1     |
| 1  | 0  | I2     |
| 1  | 1  | I3     |
</code></pre>
<p>➡️ Sekarang kamu bisa membaca semua sensor satu per satu melalui satu pin saja.</p>
<hr />
<h2 id="heading-paritas">🧮 Paritas</h2>
<h3 id="heading-definisi-teori-1">📘 Definisi Teori</h3>
<p><strong>Paritas</strong> adalah teknik dalam sistem komunikasi digital untuk <strong>mendeteksi kesalahan (error detection)</strong> dalam pengiriman data.<br />Caranya adalah dengan <strong>menambahkan satu bit ekstra</strong> (disebut <strong>bit paritas</strong>) ke dalam data biner, agar penerima bisa memverifikasi apakah data diterima dengan benar.</p>
<hr />
<h3 id="heading-kenapa-harus-ada-paritas">❓ Kenapa Harus Ada Paritas?</h3>
<p>Dalam komunikasi digital (misalnya pengiriman data via kabel atau udara), data bisa <strong>rusak karena noise</strong>, gangguan elektromagnetik, atau kerusakan perangkat keras.</p>
<p>Tanpa metode pengecekan seperti <strong>bit paritas</strong>, maka:</p>
<ul>
<li><p>Data rusak tidak terdeteksi</p>
</li>
<li><p>Bisa menyebabkan kesalahan informasi, perhitungan, atau bahkan kerusakan sistem</p>
</li>
</ul>
<p>Dengan paritas, sistem bisa <strong>mengecek sendiri</strong> apakah data masuk <strong>valid atau perlu dikirim ulang</strong>.</p>
<hr />
<h3 id="heading-digunakan-untuk-apa-1">🎯 Digunakan Untuk Apa?</h3>
<ul>
<li><p><strong>Protokol komunikasi serial</strong> (UART, RS-232, dsb.)</p>
</li>
<li><p><strong>Memory RAM</strong> yang dilengkapi deteksi error (Parity RAM)</p>
</li>
<li><p>Komunikasi antar perangkat embedded</p>
</li>
<li><p>Sistem safety-critical seperti peralatan medis atau industri</p>
</li>
</ul>
<hr />
<h3 id="heading-analogi-sederhana">🤔 Analogi Sederhana</h3>
<p>Bayangkan kamu mengirimkan 4 kelereng ke temanmu, dan bilang:</p>
<blockquote>
<p>“Saya kirim dalam jumlah genap ya!”</p>
</blockquote>
<p>Kalau temanmu hanya menerima 3 kelereng, dia tahu: “Oh, ini gak genap. Berarti ada yang hilang.”</p>
<p>📌 Sama halnya dengan <strong>bit paritas</strong>:</p>
<ul>
<li><p>Jika data 4 bit adalah <code>1011</code>, jumlah bit 1 = 3 (ganjil)</p>
</li>
<li><p>Kamu ingin <strong>genap</strong> → tambah <strong>bit paritas = 1</strong></p>
</li>
<li><p>Data jadi <code>10111</code></p>
</li>
</ul>
<p>Kalau bit terganggu, penerima bisa tahu <strong>data salah</strong> hanya dengan menghitung jumlah 1-nya.</p>
<hr />
<h3 id="heading-contoh-dan-studi-kasus-1">💡 Contoh dan Studi Kasus</h3>
<h4 id="heading-kasus-1">Kasus:</h4>
<p>Sebuah sensor mengirimkan data 8 bit ke mikrokontroler. Untuk memastikan data diterima benar, digunakan <strong>bit paritas genap</strong>.</p>
<h4 id="heading-data-yang-dikirim">Data yang dikirim:</h4>
<p><code>11010110</code> (jumlah bit 1 = 4 → genap)<br />Bit paritas = <code>0</code><br />Data dikirim: <code>110101100</code></p>
<p>Jika data diterima berubah jadi <code>100101100</code> (jumlah bit 1 = 3 → ganjil), maka mikrokontroler tahu <strong>data rusak</strong>.</p>
<p>➡️ Solusi: minta pengiriman ulang.</p>
<hr />
<h2 id="heading-kesimpulan">🧩 Kesimpulan</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Topik</td><td>Definisi Teori</td><td>Fungsi Utama</td><td>Digunakan Dalam</td></tr>
</thead>
<tbody>
<tr>
<td>Multiplexer</td><td>Rangkaian digital untuk memilih satu dari banyak input</td><td>Hemat jalur input, seleksi data</td><td>Sensor ke mikrokontroler, CPU, sistem kontrol</td></tr>
<tr>
<td>Paritas</td><td>Metode pengecekan error dengan menambahkan bit ekstra</td><td>Deteksi kerusakan data</td><td>Komunikasi digital, memori RAM, sistem safety-critical</td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-penutup">🚀 Penutup</h2>
<p>Sekarang kamu sudah paham:</p>
<ul>
<li><p><strong>Multiplexer</strong> = “si pemilih input”</p>
</li>
<li><p><strong>Paritas</strong> = “si detektor error”</p>
</li>
</ul>
<p>Dua konsep ini sederhana tapi sangat <strong>fundamental dalam sistem digital dan komunikasi</strong>. Jangan lupa latihan soal dan coba aplikasikan di Arduino, ESP32, atau proyek mikrokontrolermu.</p>
]]></content:encoded></item><item><title><![CDATA[Mengenal Aircrack]]></title><description><![CDATA[📌 Apa itu Aircrack-ng?
Aircrack-ng adalah rangkaian tools untuk menilai keamanan jaringan Wi-Fi, dengan kemampuan untuk menangkap paket, melakukan deauth, dan crack password WEP/WPA/WPA2 menggunakan brute-force dictionary attacks.
🎓 Tujuan Simulasi...]]></description><link>https://blog.hasanamin.my.id/mengenal-aircrack</link><guid isPermaLink="true">https://blog.hasanamin.my.id/mengenal-aircrack</guid><category><![CDATA[#Kali Linux Ethical Hacking Penetration Testing Cybersecurity Digital Forensics Network Security Terminal Commands Linux Security Tools Wi-Fi Hacking Metasploit Nmap Wireshark Password Cracking Aircrack-ng System Administration Linux Distribution Virtualization Dual Boot GNOME Desktop Environment Security Auditing]]></category><category><![CDATA[aircrack]]></category><category><![CDATA[Kali Linux]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Mon, 19 May 2025 11:53:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747655557655/2517a5ec-cfcf-42e7-a7bb-b7e0be0414f4.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-apa-itu-aircrack-ng">📌 Apa itu Aircrack-ng?</h2>
<p><a target="_blank" href="https://www.aircrack-ng.org/">Aircrack-ng</a> adalah rangkaian tools untuk menilai keamanan jaringan Wi-Fi, dengan kemampuan untuk menangkap paket, melakukan deauth, dan crack password WEP/WPA/WPA2 menggunakan brute-force dictionary attacks.</p>
<h2 id="heading-tujuan-simulasi">🎓 Tujuan Simulasi</h2>
<ul>
<li><p>Memahami cara kerja serangan terhadap jaringan Wi-Fi</p>
</li>
<li><p>Mengenal langkah-langkah ethical hacking</p>
</li>
<li><p>Praktik penggunaan tools dasar pentest di sistem Linux (Kali Linux)</p>
</li>
</ul>
<hr />
<h2 id="heading-persiapan-alat">🧰 Persiapan Alat</h2>
<h3 id="heading-perangkat-lunak">Perangkat Lunak</h3>
<ul>
<li><p>OS: Kali Linux (direkomendasikan)</p>
</li>
<li><p>Tools: Aircrack-ng (sudah terinstal di Kali)</p>
</li>
</ul>
<h3 id="heading-perangkat-keras">Perangkat Keras</h3>
<ul>
<li><p>Laptop dengan Wi-Fi adapter yang mendukung mode <strong>monitor</strong></p>
<ul>
<li>Contoh chipset: Atheros, Realtek, atau Alfa AWUS036NHA</li>
</ul>
</li>
</ul>
<hr />
<h2 id="heading-langkah-simulasi">🧪 Langkah Simulasi</h2>
<h3 id="heading-1-cek-interface-wireless">1. <strong>Cek Interface Wireless</strong></h3>
<pre><code class="lang-bash">iwconfig
</code></pre>
<p>Contoh output:</p>
<pre><code class="lang-bash">wlan0     IEEE 802.11  Mode:Managed  Access Point: Not-Associated
</code></pre>
<hr />
<h3 id="heading-2-aktifkan-mode-monitor">2. <strong>Aktifkan Mode Monitor</strong></h3>
<pre><code class="lang-bash">sudo airmon-ng start wlan0
</code></pre>
<p>Akan menghasilkan interface baru seperti <code>wlan0mon</code>.</p>
<hr />
<h3 id="heading-3-lakukan-scan-jaringan-sekitar">3. <strong>Lakukan Scan Jaringan Sekitar</strong></h3>
<pre><code class="lang-bash">sudo airodump-ng wlan0mon
</code></pre>
<p>Tunggu sampai terlihat BSSID dan channel target (gunakan jaringan dummy/lab).</p>
<hr />
<h3 id="heading-4-fokus-ke-target-access-point">4. <strong>Fokus ke Target Access Point</strong></h3>
<pre><code class="lang-bash">sudo airodump-ng --bssid &lt;BSSID_TARGET&gt; -c &lt;CHANNEL&gt; -w hasil wlan0mon
</code></pre>
<p>Keterangan:</p>
<ul>
<li><p><code>&lt;BSSID_TARGET&gt;</code>: MAC address AP target</p>
</li>
<li><p><code>&lt;CHANNEL&gt;</code>: channel AP target</p>
</li>
<li><p><code>-w hasil</code>: menyimpan hasil capture ke file <code>hasil.cap</code></p>
</li>
</ul>
<hr />
<h3 id="heading-5-lakukan-serangan-deauthentication-opsional">5. <strong>Lakukan Serangan Deauthentication (Opsional)</strong></h3>
<p>Untuk memaksa client reconnect dan mendapatkan handshake:</p>
<pre><code class="lang-bash">sudo aireplay-ng --deauth 10 -a &lt;BSSID_TARGET&gt; wlan0mon
</code></pre>
<hr />
<h3 id="heading-6-crack-password-wi-fi-wpawpa2">6. <strong>Crack Password Wi-Fi (WPA/WPA2)</strong></h3>
<p>Setelah handshake tertangkap (<code>hasil.cap</code>), gunakan dictionary wordlist:</p>
<pre><code class="lang-bash">aircrack-ng hasil.cap -w /usr/share/wordlists/rockyou.txt
</code></pre>
<hr />
<h2 id="heading-tips-untuk-simulasi-kelas">✅ Tips untuk Simulasi Kelas</h2>
<ul>
<li><p>Gunakan AP dummy dengan password yang ada di wordlist.</p>
</li>
<li><p>Uji hanya di jaringan lab yang disediakan dosen/instruktur.</p>
</li>
<li><p>Diskusikan etika dan legalitas hacking di awal materi.</p>
</li>
<li><p>Minta siswa membuat laporan hasil simulasi dan refleksi etis.</p>
</li>
</ul>
<hr />
<h2 id="heading-penutup">🛡️ Penutup</h2>
<p>Aircrack-ng merupakan tool yang powerful dalam dunia cybersecurity. Dengan pendekatan etis dan simulasi yang legal, siswa dapat belajar bagaimana melindungi sistem dengan lebih baik, karena memahami cara kerja serangan adalah langkah pertama untuk membuat pertahanan yang kuat.</p>
<hr />
<h2 id="heading-referensi">🔗 Referensi</h2>
<ul>
<li><p><a target="_blank" href="https://www.aircrack-ng.org/">Aircrack-ng Official Site</a></p>
</li>
<li><p>Kali Linux Tools</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[04. Penguatan Keamanan Akses Administrator Jaringan]]></title><description><![CDATA[📄 Studi Kasus:
Administrator menemukan router menggunakan akun default tanpa pengamanan tambahan. Untuk menghindari penyusupan dan brute-force attack, kamu diminta mengamankan akses ke perangkat jaringan.

🎯 Tugas:

Hapus akun default cisco dan bua...]]></description><link>https://blog.hasanamin.my.id/04-penguatan-keamanan-akses-administrator-jaringan</link><guid isPermaLink="true">https://blog.hasanamin.my.id/04-penguatan-keamanan-akses-administrator-jaringan</guid><category><![CDATA[Cisco Packet Tracer]]></category><category><![CDATA[router protocol]]></category><category><![CDATA[ujikom]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[networking for beginners]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Sun, 13 Apr 2025 02:50:31 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-studi-kasus">📄 Studi Kasus:</h3>
<p>Administrator menemukan router menggunakan akun default tanpa pengamanan tambahan. Untuk menghindari penyusupan dan brute-force attack, kamu diminta mengamankan akses ke perangkat jaringan.</p>
<hr />
<h3 id="heading-tugas">🎯 Tugas:</h3>
<ol>
<li><p>Hapus akun default <code>cisco</code> dan buat akun baru <code>admin</code> (akses penuh) dan <code>monitor</code> (akses terbatas).</p>
</li>
<li><p>Aktifkan enkripsi password.</p>
</li>
<li><p>Terapkan batasan login dan waktu idle sebelum logout otomatis.</p>
</li>
<li><p>Tampilkan daftar akun dan hak akses untuk verifikasi.</p>
</li>
<li><p>Aktifkan logging untuk memantau aktivitas login pengguna.</p>
</li>
</ol>
<hr />
<h3 id="heading-dokumentasi">📸 Dokumentasi:</h3>
<p>✔ Screenshot hasil konfigurasi dan show command<br />✔ Catatan log login pengguna<br />✔ Ringkasan konfigurasi keamanan akun</p>
<hr />
<h2 id="heading-kunci-jawaban-konfigurasi-lengkap-cisco">✅ <strong>Kunci Jawaban – Konfigurasi Lengkap Cisco</strong></h2>
<pre><code class="lang-bash">Router&gt; <span class="hljs-built_in">enable</span>
Router<span class="hljs-comment"># configure terminal</span>
Enter configuration commands, one per line. End with CNTL/Z.

! Hapus akun default (jika ada)
Router(config)<span class="hljs-comment"># no username cisco</span>

! Tambahkan akun admin dan monitor
Router(config)<span class="hljs-comment"># username admin privilege 15 secret StrongP@ssw0rd</span>
Router(config)<span class="hljs-comment"># username monitor privilege 5 secret ViewOnly123</span>

! Aktifkan enkripsi password
Router(config)<span class="hljs-comment"># service password-encryption</span>

! Batasi login untuk cegah brute-force
Router(config)<span class="hljs-comment"># login block-for 120 attempts 3 within 60</span>

! Atur timeout idle untuk sesi VTY
Router(config)<span class="hljs-comment"># line vty 0 4</span>
Router(config-line)<span class="hljs-comment"># exec-timeout 5 0</span>
Router(config-line)<span class="hljs-comment"># login local</span>
Router(config-line)<span class="hljs-comment"># transport input ssh</span>
Router(config-line)<span class="hljs-comment"># exit</span>

! Selesai konfigurasi
Router(config)<span class="hljs-comment"># end</span>
Router<span class="hljs-comment"># write memory</span>
</code></pre>
<hr />
<h3 id="heading-verifikasi">🔍 Verifikasi:</h3>
<pre><code class="lang-bash">Router<span class="hljs-comment"># show running-config | include username</span>
Router<span class="hljs-comment"># show running-config | include privilege</span>
Router<span class="hljs-comment"># show login</span>
Router<span class="hljs-comment"># show users</span>
Router<span class="hljs-comment"># show logging</span>
</code></pre>
]]></content:encoded></item><item><title><![CDATA[09. Backup dan Restore Konfigurasi Router]]></title><description><![CDATA[📄 Studi Kasus:
Administrator jaringan perlu melakukan pemeliharaan sistem yang mengharuskan perangkat router di-reboot. Untuk menghindari kehilangan konfigurasi penting saat proses tersebut, Anda diminta untuk membackup konfigurasi ke server TFTP, k...]]></description><link>https://blog.hasanamin.my.id/09-backup-dan-restore-konfigurasi-router</link><guid isPermaLink="true">https://blog.hasanamin.my.id/09-backup-dan-restore-konfigurasi-router</guid><category><![CDATA[Cisco Packet Tracer]]></category><category><![CDATA[ujikom]]></category><category><![CDATA[networking for beginners]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Sun, 13 Apr 2025 02:48:26 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-studi-kasus">📄 Studi Kasus:</h3>
<p>Administrator jaringan perlu melakukan pemeliharaan sistem yang mengharuskan perangkat router di-reboot. Untuk menghindari kehilangan konfigurasi penting saat proses tersebut, Anda diminta untuk membackup konfigurasi ke server TFTP, kemudian mengembalikannya (restore) untuk memastikan konfigurasi tetap tersedia dan sistem berjalan normal kembali.</p>
<hr />
<h3 id="heading-tugas">🎯 Tugas:</h3>
<ol>
<li><p>Lakukan <strong>backup konfigurasi startup</strong> router ke <strong>TFTP Server</strong>.</p>
</li>
<li><p>Simulasikan kehilangan konfigurasi dengan menghapus isi konfigurasi.</p>
</li>
<li><p>Lakukan <strong>restore konfigurasi</strong> dari TFTP server ke router.</p>
</li>
<li><p>Verifikasi bahwa router kembali memiliki konfigurasi awal dan jaringan berjalan normal.</p>
</li>
</ol>
<hr />
<h3 id="heading-dokumentasi-yang-harus-dikumpulkan">📸 Dokumentasi yang harus dikumpulkan:</h3>
<p>✔ Screenshot proses backup dan restore<br />✔ Output verifikasi konfigurasi setelah restore (<code>show running-config</code>, <code>ping</code>)</p>
<hr />
<h2 id="heading-kunci-jawaban-soal-training-no-8">✅ <strong>Kunci Jawaban Soal Training No. 8</strong></h2>
<h3 id="heading-langkah-1-pastikan-router-terhubung-ke-tftp-server">🧩 Langkah 1: Pastikan Router Terhubung ke TFTP Server</h3>
<pre><code class="lang-bash">Router<span class="hljs-comment"># ping 192.168.1.100</span>
</code></pre>
<hr />
<h3 id="heading-langkah-2-backup-konfigurasi-ke-tftp">🧩 Langkah 2: Backup Konfigurasi ke TFTP</h3>
<pre><code class="lang-bash">Router<span class="hljs-comment"># copy startup-config tftp:</span>
Address or name of remote host []? 192.168.1.100
Destination filename [startup-config]? R1-backup.cfg
</code></pre>
<blockquote>
<p>✔️ File <code>R1-backup.cfg</code> akan tersimpan di direktori TFTP Server</p>
</blockquote>
<hr />
<h3 id="heading-langkah-3-ubah-beberapa-konfigurasi-router">🧩 Langkah 3: Ubah Beberapa Konfigurasi Router</h3>
<p>Untuk uji coba restore konfigurasi, kita akan lakukan perubahan sederhana contohnya IP pada interface Serial0/1/0 yang menghubungkan dengan Router2 melalui OSPF</p>
<pre><code class="lang-bash">Router<span class="hljs-comment"># interface Serial0/1/0</span>
Router<span class="hljs-comment"># configure terminal</span>
Router(config)<span class="hljs-comment"># ip address 10.10.10.1 255.255.255.252</span>
Router(config-if)<span class="hljs-comment"># no shutdown</span>
Router(config-if)<span class="hljs-comment"># end</span>
Router<span class="hljs-comment"># write memory</span>
</code></pre>
<p>Setelah itu maka router tidak akan bisa terhubung melalui OSPF</p>
<hr />
<h3 id="heading-langkah-4-restore-konfigurasi-dari-tftp">🧩 Langkah 4: Restore Konfigurasi dari TFTP</h3>
<p>Setelah reload:</p>
<pre><code class="lang-bash">Router&gt; <span class="hljs-built_in">enable</span>
Router<span class="hljs-comment"># copy tftp: startup-config</span>
Address or name of remote host []? 192.168.1.100
Source filename []? R1-backup.cfg
Destination filename [startup-config]? [ENTER]
</code></pre>
<p>Kemudian lakukan reload ulang:</p>
<pre><code class="lang-bash">Router<span class="hljs-comment"># reload</span>
</code></pre>
<hr />
<h3 id="heading-verifikasi">🧪 Verifikasi:</h3>
<pre><code class="lang-bash">Router<span class="hljs-comment"># show running-config</span>
Router<span class="hljs-comment"># ping 192.168.1.1</span>
</code></pre>
<hr />
<h3 id="heading-laporan-singkat">📝 Laporan Singkat:</h3>
<blockquote>
<p><strong>Masalah:</strong><br />Konfigurasi router perlu diamankan sebelum proses reboot/pemeliharaan.</p>
<p><strong>Solusi:</strong><br />Konfigurasi disimpan ke TFTP, lalu diuji dengan menghapus dan me-restore ulang.</p>
<p><strong>Hasil:</strong><br />Konfigurasi berhasil dikembalikan, jaringan kembali normal.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[08. Mengoptimalkan Kinerja Sistem Jaringan]]></title><description><![CDATA[📄 Studi Kasus:
Lalu lintas data umum yang padat menyebabkan keterlambatan (latensi) pada layanan VoIP di jaringan perusahaan. Administrator diminta untuk mengoptimalkan kinerja jaringan dengan menerapkan Quality of Service (QoS) agar trafik VoIP men...]]></description><link>https://blog.hasanamin.my.id/08-mengoptimalkan-kinerja-sistem-jaringan</link><guid isPermaLink="true">https://blog.hasanamin.my.id/08-mengoptimalkan-kinerja-sistem-jaringan</guid><category><![CDATA[Cisco Packet Tracer]]></category><category><![CDATA[networking for beginners]]></category><category><![CDATA[ujikom]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Sun, 13 Apr 2025 02:38:31 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-studi-kasus">📄 Studi Kasus:</h3>
<p>Lalu lintas data umum yang padat menyebabkan keterlambatan (latensi) pada layanan VoIP di jaringan perusahaan. Administrator diminta untuk mengoptimalkan kinerja jaringan dengan menerapkan <strong>Quality of Service (QoS)</strong> agar trafik VoIP mendapatkan prioritas bandwidth tertinggi.</p>
<hr />
<h3 id="heading-tugas">🎯 Tugas:</h3>
<ol>
<li><p>Buat konfigurasi <strong>QoS</strong> untuk memberikan <strong>prioritas tertinggi</strong> pada trafik VoIP (misalnya berdasarkan port UDP 5060 atau DSCP value).</p>
</li>
<li><p>Terapkan kebijakan QoS tersebut pada <strong>interface keluar</strong> (egress interface) yang menangani trafik VoIP.</p>
</li>
<li><p>Uji efektivitas konfigurasi QoS dengan membandingkan kondisi sebelum dan sesudah (misalnya menggunakan <code>show policy-map</code>).</p>
</li>
</ol>
<hr />
<h3 id="heading-dokumentasi-yang-harus-dikumpulkan">📸 Dokumentasi yang harus dikumpulkan:</h3>
<p>✔ Screenshot hasil konfigurasi QoS<br />✔ Screenshot hasil pengujian penggunaan bandwidth sebelum dan sesudah QoS diterapkan</p>
<hr />
<h2 id="heading-kunci-jawaban-soal-training-no-7">✅ <strong>Kunci Jawaban Soal Training No. 7</strong></h2>
<h3 id="heading-langkah-1-buat-class-map-untuk-trafik-voip">🧩 Langkah 1: Buat Class-map untuk Trafik VoIP</h3>
<pre><code class="lang-bash">Router(config)<span class="hljs-comment"># class-map match-any VOIP-TRAFFIC</span>
Router(config-cmap)<span class="hljs-comment"># match protocol rtp</span>
Router(config-cmap)<span class="hljs-comment"># match access-group 101</span>
</code></pre>
<p>Atau gunakan access list:</p>
<pre><code class="lang-bash">Router(config)<span class="hljs-comment"># access-list 101 permit udp any any eq 5060</span>
</code></pre>
<hr />
<h3 id="heading-langkah-2-buat-policy-map-untuk-qos">🧩 Langkah 2: Buat Policy-map untuk QoS</h3>
<pre><code class="lang-bash">Router(config)<span class="hljs-comment"># policy-map PRIORITIZE-VOIP</span>
Router(config-pmap)<span class="hljs-comment"># class VOIP-TRAFFIC</span>
Router(config-pmap-c)<span class="hljs-comment"># priority percent 70</span>
Router(config-pmap-c)<span class="hljs-comment"># exit</span>
Router(config-pmap)<span class="hljs-comment"># class class-default</span>
Router(config-pmap-c)<span class="hljs-comment"># fair-queue</span>
</code></pre>
<hr />
<h3 id="heading-langkah-3-terapkan-policy-qos-ke-interface">🧩 Langkah 3: Terapkan Policy QoS ke Interface</h3>
<p>Misal interface ke arah pengguna:</p>
<pre><code class="lang-bash">Router(config)<span class="hljs-comment"># interface GigabitEthernet0/0/0</span>
Router(config-if)<span class="hljs-comment"># service-policy output PRIORITIZE-VOIP</span>
</code></pre>
<hr />
<h3 id="heading-langkah-4-verifikasi-konfigurasi-qos">🧪 Langkah 4: Verifikasi Konfigurasi QoS</h3>
<pre><code class="lang-bash">Router<span class="hljs-comment"># show policy-map interface GigabitEthernet0/0/0</span>
</code></pre>
<p>Output akan menampilkan statistik penggunaan bandwidth dan apakah trafik VoIP mendapatkan prioritas.</p>
<hr />
<h3 id="heading-laporan-singkat">📝 Laporan Singkat:</h3>
<blockquote>
<p><strong>Masalah:</strong><br />Trafik VoIP mengalami latensi tinggi karena bandwidth digunakan oleh data umum.</p>
<p><strong>Solusi:</strong><br />Diterapkan QoS dengan memberikan prioritas 70% bandwidth untuk trafik VoIP (port 5060).</p>
<p><strong>Hasil:</strong><br />Setelah QoS aktif, penggunaan bandwidth lebih stabil dan trafik VoIP tidak mengalami keterlambatan.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[07. Memperbaiki Konfigurasi Jaringan]]></title><description><![CDATA[📄 Studi Kasus:
Ditemukan bahwa salah satu router di jaringan memiliki konfigurasi subnet mask yang tidak sesuai. Akibatnya, perangkat dari subnet lain tidak dapat terhubung dan komunikasi jaringan terganggu. Sebagai administrator, Anda diminta mempe...]]></description><link>https://blog.hasanamin.my.id/07-memperbaiki-konfigurasi-jaringan</link><guid isPermaLink="true">https://blog.hasanamin.my.id/07-memperbaiki-konfigurasi-jaringan</guid><category><![CDATA[Cisco Packet Tracer]]></category><category><![CDATA[ujikom]]></category><category><![CDATA[networking for beginners]]></category><category><![CDATA[troubleshooting]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Sun, 13 Apr 2025 02:34:02 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-studi-kasus">📄 Studi Kasus:</h3>
<p>Ditemukan bahwa salah satu router di jaringan memiliki konfigurasi subnet mask yang tidak sesuai. Akibatnya, perangkat dari subnet lain tidak dapat terhubung dan komunikasi jaringan terganggu. Sebagai administrator, Anda diminta memperbaiki kesalahan konfigurasi tersebut agar jaringan dapat berfungsi normal kembali.</p>
<hr />
<h3 id="heading-tugas">🎯 Tugas:</h3>
<ol>
<li><p>Identifikasi konfigurasi IP dan subnet mask yang salah pada salah satu router.</p>
</li>
<li><p>Perbaiki subnet mask agar sesuai dengan topologi jaringan (gunakan /24 atau 255.255.255.0).</p>
</li>
<li><p>Uji konektivitas jaringan setelah perbaikan untuk memastikan komunikasi antar perangkat berhasil.</p>
</li>
</ol>
<hr />
<h3 id="heading-dokumentasi-yang-harus-dikumpulkan">📸 Dokumentasi yang harus dikumpulkan:</h3>
<p>✔ Screenshot konfigurasi IP sebelum dan sesudah perbaikan<br />✔ Screenshot hasil uji koneksi antar perangkat setelah perbaikan</p>
<hr />
<h2 id="heading-kunci-jawaban-soal-training-no-6">✅ <strong>Kunci Jawaban Soal Training No. 6</strong></h2>
<h3 id="heading-langkah-1-identifikasi">🔍 Langkah 1: Identifikasi</h3>
<p>Masuk ke router yang diduga bermasalah, lalu periksa konfigurasi IP-nya:</p>
<pre><code class="lang-bash">Router&gt; <span class="hljs-built_in">enable</span>
Router<span class="hljs-comment"># show ip interface brief</span>
</code></pre>
<p>Hasil:</p>
<pre><code class="lang-bash">Interface         IP-Address     OK? Method Status     Protocol
FastEthernet0/0   192.168.2.1    YES manual up         up
</code></pre>
<p>Lalu periksa konfigurasi lengkap:</p>
<pre><code class="lang-bash">Router<span class="hljs-comment"># show running-config</span>
</code></pre>
<p>Ditemukan subnet mask salah, misalnya:</p>
<pre><code class="lang-bash">interface FastEthernet0/0
 ip address 192.168.2.1 255.255.0.0
</code></pre>
<p>Padahal seharusnya <code>255.255.255.0</code> (untuk jaringan 192.168.2.0/24).</p>
<hr />
<h3 id="heading-langkah-2-perbaikan">🛠️ Langkah 2: Perbaikan</h3>
<p>Masuk ke mode konfigurasi dan ubah subnet mask:</p>
<pre><code class="lang-bash">Router<span class="hljs-comment"># configure terminal</span>
Router(config)<span class="hljs-comment"># interface FastEthernet0/0</span>
Router(config-if)<span class="hljs-comment"># ip address 192.168.2.1 255.255.255.0</span>
Router(config-if)<span class="hljs-comment"># no shutdown</span>
</code></pre>
<p>Simpan konfigurasi:</p>
<pre><code class="lang-bash">Router<span class="hljs-comment"># write memory</span>
</code></pre>
<hr />
<h3 id="heading-langkah-3-verifikasi">🔎 Langkah 3: Verifikasi</h3>
<p>Lakukan <code>ping</code> dari PC di jaringan lain ke router yang diperbaiki:</p>
<pre><code class="lang-bash">PC&gt; ping 192.168.2.1
</code></pre>
<p>Jika reply diterima, maka konfigurasi berhasil.</p>
<hr />
<h3 id="heading-ringkasan-laporan">📝 Ringkasan Laporan:</h3>
<blockquote>
<p><strong>Masalah:</strong><br />Router menggunakan subnet mask yang salah (<code>255.255.0.0</code>), menyebabkan gangguan komunikasi.</p>
<p><strong>Solusi:</strong><br />Mengganti subnet mask menjadi <code>255.255.255.0</code> sesuai topologi.</p>
<p><strong>Hasil:</strong><br />Setelah konfigurasi diperbaiki, perangkat dari jaringan lain dapat kembali berkomunikasi.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[06 – Mengidentifikasi Sumber Gangguan Jaringan]]></title><description><![CDATA[📚 Studi Kasus:
Seorang karyawan dari Kantor 2 (192.168.2.0/24) melaporkan bahwa dia tidak bisa membuka website internal yang ada di server pusat Kantor 1 (192.168.1.10). Sebelumnya tidak ada masalah.
Sebagai administrator jaringan, kamu harus:

Mene...]]></description><link>https://blog.hasanamin.my.id/05-mengidentifikasi-sumber-gangguan-jaringan</link><guid isPermaLink="true">https://blog.hasanamin.my.id/05-mengidentifikasi-sumber-gangguan-jaringan</guid><category><![CDATA[Cisco Packet Tracer]]></category><category><![CDATA[ujikom]]></category><category><![CDATA[networking for beginners]]></category><category><![CDATA[troubleshooting]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Sun, 13 Apr 2025 02:08:45 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-studi-kasus">📚 <strong>Studi Kasus:</strong></h3>
<p>Seorang karyawan dari <strong>Kantor 2 (192.168.2.0/24)</strong> melaporkan bahwa dia tidak bisa membuka website internal yang ada di server pusat Kantor 1 (192.168.1.10). Sebelumnya tidak ada masalah.</p>
<p>Sebagai administrator jaringan, kamu harus:</p>
<ol>
<li><p><strong>Menelusuri jalur koneksi</strong> dari PC di Kantor 2 ke server di Kantor 1.</p>
</li>
<li><p><strong>Mengidentifikasi penyebab</strong> gangguan koneksi.</p>
</li>
<li><p><strong>Memperbaiki konfigurasi</strong> jika ditemukan masalah.</p>
</li>
</ol>
<hr />
<h3 id="heading-tugas">🎯 <strong>Tugas:</strong></h3>
<ol>
<li><p>Jalankan perintah troubleshooting seperti <code>ping</code>, <code>tracert</code>, dan <code>ipconfig</code> untuk menelusuri koneksi.</p>
</li>
<li><p>Cek konfigurasi IP, gateway, dan routing pada router.</p>
</li>
<li><p>Perbaiki masalah jika ditemukan.</p>
</li>
<li><p>Pastikan PC di Kantor 2 bisa mengakses server di Kantor 1 setelah perbaikan.</p>
</li>
</ol>
<hr />
<h3 id="heading-dokumentasi-yang-harus-dikumpulkan">📸 <strong>Dokumentasi yang harus dikumpulkan:</strong></h3>
<p>✔ Screenshot hasil perintah troubleshooting (ping, tracert, ipconfig)<br />✔ Laporan singkat penyebab masalah dan langkah penyelesaiannya</p>
<hr />
<h2 id="heading-kunci-jawaban-soal-training-no-5-versi-topologi-sebelumnya">✅ <strong>Kunci Jawaban Soal Training No. 5 – Versi Topologi Sebelumnya</strong></h2>
<h3 id="heading-langkah-troubleshooting">🛠️ <strong>Langkah Troubleshooting:</strong></h3>
<p>Di PC Kantor 2 (192.168.2.x):</p>
<pre><code class="lang-bash">C:\&gt; ipconfig
</code></pre>
<p>Cek apakah:</p>
<ul>
<li><p>IP dan subnet benar (misalnya <code>192.168.2.10 /24</code>)</p>
</li>
<li><p>Gateway adalah <code>192.168.2.1</code></p>
</li>
</ul>
<p>Lalu:</p>
<pre><code class="lang-bash">C:\&gt; ping 192.168.2.1         :: cek gateway lokal
C:\&gt; ping 192.168.1.10        :: cek server di kantor 1
C:\&gt; tracert 192.168.1.10     :: lihat jalur routing
</code></pre>
<hr />
<h3 id="heading-masalah-yang-mungkin-ditemukan">⚠️ <strong>Masalah yang Mungkin Ditemukan:</strong></h3>
<ul>
<li><p>Gateway PC salah → misalnya <code>192.168.2.5</code>, padahal seharusnya <code>192.168.2.1</code></p>
</li>
<li><p>Tidak ada route di router antar kantor → routing OSPF belum mengiklankan subnet tertentu</p>
</li>
<li><p>Ada access list yang memblokir traffic antar kantor</p>
</li>
</ul>
<hr />
<h3 id="heading-solusi-yang-diberikan">🧰 <strong>Solusi yang Diberikan:</strong></h3>
<p>Misalnya ditemukan gateway salah:</p>
<pre><code class="lang-bash">&gt; Perbaiki konfigurasi IP di PC
Gateway → ubah ke: 192.168.2.1
</code></pre>
<p>Jika masalah routing:</p>
<pre><code class="lang-bash">Router(config)<span class="hljs-comment"># router ospf 1</span>
Router(config-router)<span class="hljs-comment"># network 192.168.2.0 0.0.0.255 area 0</span>
</code></pre>
<hr />
<h3 id="heading-contoh-laporan-jawaban">📝 <strong>Contoh Laporan Jawaban:</strong></h3>
<blockquote>
<p><strong>Masalah:</strong><br />Gateway pada PC di Kantor 2 salah dikonfigurasi (<code>192.168.2.5</code>) sehingga tidak bisa melewati router menuju Kantor 1.</p>
<p><strong>Solusi:</strong><br />Gateway diubah menjadi <code>192.168.2.1</code> dan koneksi ke server pusat <code>192.168.1.10</code> berhasil dilakukan setelahnya.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[05. Mengatasi Serangan pada Jaringan]]></title><description><![CDATA[📚 Studi Kasus:
PT Aman Jaya mengelola jaringan kantor pusat dengan sistem distribusi IP otomatis menggunakan DHCP. Baru-baru ini, tim IT menemukan adanya serangan DHCP Starvation dari perangkat tidak dikenal yang mengirimkan banyak permintaan DHCP s...]]></description><link>https://blog.hasanamin.my.id/05-mengatasi-serangan-pada-jaringan-versi-training</link><guid isPermaLink="true">https://blog.hasanamin.my.id/05-mengatasi-serangan-pada-jaringan-versi-training</guid><category><![CDATA[cyber security]]></category><category><![CDATA[Cisco Packet Tracer]]></category><category><![CDATA[ujikom]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Sun, 13 Apr 2025 01:30:41 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-studi-kasus">📚 <strong>Studi Kasus:</strong></h3>
<p>PT Aman Jaya mengelola jaringan kantor pusat dengan sistem distribusi IP otomatis menggunakan DHCP. Baru-baru ini, tim IT menemukan adanya serangan <strong>DHCP Starvation</strong> dari perangkat tidak dikenal yang mengirimkan banyak permintaan DHCP secara terus-menerus. Akibatnya, perangkat sah tidak mendapatkan alamat IP.</p>
<p>Administrator jaringan diminta untuk mengamankan jaringan dengan fitur <strong>DHCP Snooping</strong>, agar hanya perangkat yang terpercaya yang dapat mengirim permintaan DHCP.</p>
<hr />
<h3 id="heading-tugas">🧑‍💻 <strong>Tugas:</strong></h3>
<ol>
<li><p>Aktifkan fitur <strong>DHCP Snooping</strong> pada switch utama.</p>
</li>
<li><p>Tentukan port yang dipercaya (trusted port) yaitu port yang mengarah ke DHCP server.</p>
</li>
<li><p>Tandai port-port yang terhubung ke pengguna sebagai <strong>untrusted</strong>.</p>
</li>
<li><p>Uji apakah serangan DHCP Starvation berhasil dicegah setelah konfigurasi.</p>
</li>
</ol>
<hr />
<h3 id="heading-dokumentasi-yang-harus-dikumpulkan">📸 <strong>Dokumentasi yang harus dikumpulkan:</strong></h3>
<p>✔ Screenshot konfigurasi DHCP Snooping<br />✔ Output hasil uji coba (misalnya: <code>show ip dhcp snooping binding</code>, atau hasil gagalnya request DHCP dari penyerang)</p>
<hr />
<h2 id="heading-kunci-jawaban-soal-training-no-4-dhcp-snooping">✅ <strong>Kunci Jawaban Soal Training No. 4 – DHCP Snooping</strong></h2>
<h3 id="heading-asumsi-topologi-sederhana">🔧 <strong>Asumsi Topologi Sederhana:</strong></h3>
<ul>
<li><p><strong>Switch SW1</strong> (switch utama)</p>
</li>
<li><p>Port <strong>Fa0/1</strong>: Terhubung ke <strong>DHCP Server</strong> → <strong>trusted</strong></p>
</li>
<li><p>Port <strong>Fa0/2 - Fa0/24</strong>: Terhubung ke pengguna atau PC → <strong>untrusted</strong></p>
</li>
<li><p>DHCP attacker menggunakan Fa0/3</p>
</li>
</ul>
<hr />
<h3 id="heading-langkah-konfigurasi-di-sw1">⚙️ <strong>Langkah Konfigurasi di SW1:</strong></h3>
<pre><code class="lang-bash">SW1&gt; <span class="hljs-built_in">enable</span>
SW1<span class="hljs-comment"># configure terminal</span>
SW1(config)<span class="hljs-comment"># ip dhcp snooping</span>
SW1(config)<span class="hljs-comment"># ip dhcp snooping vlan 10</span>
</code></pre>
<p>➡️ Menandai port trusted (ke DHCP Server di Fa0/1):</p>
<pre><code class="lang-bash">SW1(config)<span class="hljs-comment"># interface FastEthernet0/1</span>
SW1(config-if)<span class="hljs-comment"># ip dhcp snooping trust</span>
SW1(config-if)<span class="hljs-comment"># exit</span>
</code></pre>
<p>➡️ Menonaktifkan trust untuk port pengguna (default: untrusted), tapi bisa eksplisit juga:</p>
<pre><code class="lang-bash">SW1(config)<span class="hljs-comment"># interface range FastEthernet3/1</span>
SW1(config-if-range)<span class="hljs-comment"># no ip dhcp snooping trust</span>
SW1(config-if-range)<span class="hljs-comment"># exit</span>
</code></pre>
<hr />
<h3 id="heading-verifikasi-dan-pengujian">✅ <strong>Verifikasi dan Pengujian:</strong></h3>
<pre><code class="lang-bash">SW1<span class="hljs-comment"># show ip dhcp snooping</span>
SW1<span class="hljs-comment"># show ip dhcp snooping binding</span>
</code></pre>
<p>➡️ Jika attacker tetap mencoba flooding, maka:</p>
<ul>
<li><p>Tidak akan dapat lease IP.</p>
</li>
<li><p>Traffic DHCP dari FastEthernet3/1 akan <strong>diblock</strong> oleh switch karena berasal dari untrusted port.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[03. Routing Antar Autonomous System (Analogi Perusahaan)]]></title><description><![CDATA[📚 Studi Kasus:
PT Nusantara Digital adalah sebuah perusahaan besar yang memiliki beberapa divisi internal, seperti Divisi Riset dan Divisi Produksi. Untuk komunikasi antar divisi, mereka menggunakan protokol routing internal OSPF dalam AS 65100.
Di ...]]></description><link>https://blog.hasanamin.my.id/03-routing-antar-autonomous-system-analogi-perusahaan</link><guid isPermaLink="true">https://blog.hasanamin.my.id/03-routing-antar-autonomous-system-analogi-perusahaan</guid><category><![CDATA[ujikom]]></category><category><![CDATA[Cisco Packet Tracer]]></category><category><![CDATA[Routing Protocol]]></category><category><![CDATA[#RIP  #OSPF #BGP #PROTOCOL]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Sun, 13 Apr 2025 01:25:30 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-studi-kasus">📚 <strong>Studi Kasus:</strong></h3>
<p>PT Nusantara Digital adalah sebuah perusahaan besar yang memiliki beberapa divisi internal, seperti Divisi Riset dan Divisi Produksi. Untuk komunikasi antar divisi, mereka menggunakan protokol routing internal <strong>OSPF</strong> dalam <strong>AS 65100</strong>.</p>
<p>Di sisi lain, PT Nusantara Digital bekerja sama dengan perusahaan partner yaitu <strong>PT Mitra Solusi</strong>, yang memiliki jaringan sendiri dan menggunakan <strong>BGP</strong> dalam <strong>AS 65200</strong>.</p>
<p>Agar komunikasi antara jaringan internal dan partner bisnis tetap lancar dan aman, administrator jaringan diminta untuk mengonfigurasi routing antar Autonomous System.</p>
<hr />
<h3 id="heading-tugas">🧑‍💻 <strong>Tugas:</strong></h3>
<ol>
<li><p>Konfigurasikan OSPF untuk komunikasi antar divisi dalam AS 65100 (PT Nusantara Digital).</p>
</li>
<li><p>Konfigurasikan BGP untuk komunikasi eksternal antara PT Nusantara Digital (AS 65100) dan PT Mitra Solusi (AS 65200).</p>
</li>
<li><p>Pastikan komunikasi antar divisi internal dan partner eksternal berjalan dengan baik.</p>
</li>
</ol>
<hr />
<h3 id="heading-dokumentasi-yang-harus-dikumpulkan">📸 <strong>Dokumentasi yang harus dikumpulkan:</strong></h3>
<p>✔ Screenshot konfigurasi OSPF dan BGP<br />✔ Output dari:<br /> <code>show ip route</code><br /> <code>show ip bgp summary</code></p>
<hr />
<h2 id="heading-kunci-jawaban-soal-training-no-3-versi-perusahaan">✅ <strong>Kunci Jawaban Soal Training No. 3 – Versi Perusahaan</strong></h2>
<h3 id="heading-topologi-sederhana-simulasi">⚙️ <strong>Topologi Sederhana (Simulasi):</strong></h3>
<ul>
<li><p>Router R2 = PT Nusantara Digital (AS 65100)</p>
</li>
<li><p>Router R3 = PT Mitra Solusi (AS 65200)</p>
</li>
<li><p>Koneksi antar router = <code>192.168.100.1 &lt;--&gt; 192.168.100.2</code></p>
</li>
<li><p>Network internal R1 = <code>10.10.10.0/24</code></p>
</li>
<li><p>Network internal R2 = <code>172.16.20.0/24</code></p>
</li>
</ul>
<hr />
<h3 id="heading-konfigurasi-router-r2-as-65100-ospf-amp-bgp">🔧 <strong>Konfigurasi Router R2 (AS 65100 - OSPF &amp; BGP)</strong></h3>
<pre><code class="lang-bash">R2&gt; <span class="hljs-built_in">enable</span>
R2<span class="hljs-comment"># configure terminal</span>
R2(config)<span class="hljs-comment">#interface GigabitEthernet0/0/1</span>
R2(config-if)<span class="hljs-comment"># ip address 192.168.100.1 255.255.255.0</span>
R2(config-if)<span class="hljs-comment"># no shutdown</span>
R2(config-if)<span class="hljs-comment"># exit</span>

R2(config)<span class="hljs-comment"># router ospf 1</span>
R2(config-router)<span class="hljs-comment"># network 192.168.2.0 0.0.0.255 area 0</span>
R2(config-router)<span class="hljs-comment"># exit</span>

R2(config)<span class="hljs-comment"># router bgp 65100</span>
R2(config-router)<span class="hljs-comment"># neighbor 192.168.100.2 remote-as 65200</span>
R2(config-router)<span class="hljs-comment"># network 192.168.2.0 mask 255.255.255.0</span>
R2(config-router)<span class="hljs-comment"># exit</span>
R2(config)<span class="hljs-comment"># exit</span>
</code></pre>
<hr />
<h3 id="heading-konfigurasi-router-r3-as-65200-bgp">🔧 <strong>Konfigurasi Router R3 (AS 65200 - BGP)</strong></h3>
<pre><code class="lang-bash">R3&gt; <span class="hljs-built_in">enable</span>
R3<span class="hljs-comment"># configure terminal</span>
R3(config)<span class="hljs-comment">#interface GigabitEthernet0/0/0</span>
R3(config-if)<span class="hljs-comment"># ip address 192.168.100.2 255.255.255.0</span>
R3(config-if)<span class="hljs-comment"># no shutdown</span>
R3(config-if)<span class="hljs-comment"># exit</span>

R3(config)<span class="hljs-comment">#interface GigabitEthernet0/0/1</span>
R3(config-if)<span class="hljs-comment"># ip address 172.16.20.1 255.255.255.0</span>
R3(config-if)<span class="hljs-comment"># no shutdown</span>
R3(config-if)<span class="hljs-comment"># exit</span>

R3(config)<span class="hljs-comment"># ip dhcp excluded-address 172.16.20.1 172.16.20.9</span>
R3(config)<span class="hljs-comment"># ip dhcp pool Untirta</span>
R3(dhcp-config)<span class="hljs-comment"># network 172.16.20.0 255.255.255.0</span>
R3(dhcp-config)<span class="hljs-comment"># default-router 172.16.20.1</span>
R3(dhcp-config)<span class="hljs-comment"># dns-server 8.8.8.8</span>
R3(dhcp-config)<span class="hljs-comment"># exit</span>

R3(config)<span class="hljs-comment"># router bgp 65200</span>
R3(config-router)<span class="hljs-comment"># neighbor 192.168.100.1 remote-as 65100</span>
R3(config-router)<span class="hljs-comment"># network 172.16.20.0 mask 255.255.255.0</span>
R3(config-router)<span class="hljs-comment"># exit</span>
R3(config)<span class="hljs-comment"># exit</span>
</code></pre>
<hr />
<h3 id="heading-verifikasi-routing">✅ <strong>Verifikasi Routing:</strong></h3>
<h4 id="heading-di-r1">Di R1:</h4>
<pre><code class="lang-bash">R2<span class="hljs-comment"># show ip route</span>
</code></pre>
<p>(Harus terlihat rute ke <code>172.16.20.0/24</code> via BGP)</p>
<pre><code class="lang-bash">R2<span class="hljs-comment"># show ip bgp summary</span>
</code></pre>
<p>(Harus terlihat BGP state <em>Established</em> dengan <code>192.168.100.2</code>)</p>
]]></content:encoded></item><item><title><![CDATA[02. Merancang Keamanan Jaringan]]></title><description><![CDATA[📚 Studi Kasus Baru:
Administrator jaringan mendapati bahwa beberapa teknisi lapangan masih menggunakan Telnet untuk mengakses router cabang, padahal hal ini sangat rentan terhadap penyadapan. Atas permintaan manajer IT, Anda diminta untuk:

Meningka...]]></description><link>https://blog.hasanamin.my.id/02-merancang-keamanan-jaringan</link><guid isPermaLink="true">https://blog.hasanamin.my.id/02-merancang-keamanan-jaringan</guid><category><![CDATA[Cisco Packet Tracer]]></category><category><![CDATA[networking for beginners]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Sat, 12 Apr 2025 04:41:08 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-studi-kasus-baru">📚 <strong>Studi Kasus Baru:</strong></h3>
<p>Administrator jaringan mendapati bahwa beberapa teknisi lapangan masih menggunakan Telnet untuk mengakses router cabang, padahal hal ini sangat rentan terhadap penyadapan. Atas permintaan manajer IT, Anda diminta untuk:</p>
<ul>
<li><p>Meningkatkan keamanan manajemen perangkat dengan mengaktifkan SSH.</p>
</li>
<li><p>Menonaktifkan akses Telnet.</p>
</li>
<li><p>Memberikan izin akses SSH hanya dari subnet kantor teknisi pusat (192.168.1.0/24).</p>
</li>
</ul>
<h3 id="heading-tugas">🧑‍💻 <strong>Tugas:</strong></h3>
<ol>
<li><p>Konfigurasikan akses remote menggunakan SSH pada router cabang.</p>
</li>
<li><p>Nonaktifkan Telnet.</p>
</li>
<li><p>Batasi akses SSH hanya dari subnet 192.168.1.0/24.</p>
</li>
<li><p>Verifikasi bahwa akses remote hanya dapat dilakukan dari subnet yang diizinkan.</p>
</li>
</ol>
<h3 id="heading-dokumentasi-yang-harus-dikumpulkan">📸 <strong>Dokumentasi yang harus dikumpulkan:</strong></h3>
<ul>
<li><p>Screenshot konfigurasi keamanan di router.</p>
</li>
<li><p>Hasil verifikasi remote SSH dari subnet yang diizinkan dan yang tidak diizinkan.</p>
</li>
</ul>
<hr />
<h2 id="heading-kunci-jawaban-soal-training">✅ <strong>Kunci Jawaban Soal Training:</strong></h2>
<h3 id="heading-konfigurasi-ssh-di-router1">💻 <strong>Konfigurasi SSH di Router1:</strong></h3>
<pre><code class="lang-bash">Router&gt; <span class="hljs-built_in">enable</span>
Router<span class="hljs-comment"># configure terminal</span>
Enter configuration commands, one per line.  End with CNTL/Z.

Router(config)<span class="hljs-comment"># hostname R1</span>
R1(config)<span class="hljs-comment"># ip domain-name training.lab</span>
R1(config)<span class="hljs-comment"># username cisco privilege 15 password cisco123</span>

R1(config)<span class="hljs-comment"># crypto key generate rsa</span>
The name <span class="hljs-keyword">for</span> the keys will be: R1.training.lab
Choose the size of the key modulus <span class="hljs-keyword">in</span> the range of 360 to 2048 <span class="hljs-keyword">for</span> your
  General Purpose Keys. Choosing a key modulus greater than 512 may take
  a few minutes.

How many bits <span class="hljs-keyword">in</span> the modulus [512]: 1024
% Generating 1024 bit RSA keys, keys will be non-exportable...[OK]

R1(config)<span class="hljs-comment"># ip ssh version 2</span>

R1(config)<span class="hljs-comment"># access-list 10 permit 192.168.1.0 0.0.0.255</span>

R1(config)<span class="hljs-comment"># line vty 0 4</span>
R1(config-line)<span class="hljs-comment"># login local</span>
R1(config-line)<span class="hljs-comment"># transport input ssh</span>
R1(config-line)<span class="hljs-comment"># access-class 10 in</span>
R1(config-line)<span class="hljs-comment"># exit</span>

R1(config)<span class="hljs-comment"># exit</span>
R1<span class="hljs-comment">#write memory</span>
</code></pre>
<hr />
<h3 id="heading-verifikasi-konfigurasi">🧪 <strong>Verifikasi Konfigurasi:</strong></h3>
<ol>
<li><strong>Verifikasi SSH aktif dan Telnet dinonaktifkan:</strong></li>
</ol>
<pre><code class="lang-bash">R1<span class="hljs-comment"># show run | include ssh</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744434234030/9adce093-a9ae-4ee1-8320-ed1307fc8ee5.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li><strong>Verifikasi ACL akses SSH:</strong></li>
</ol>
<pre><code class="lang-bash">R1<span class="hljs-comment"># show access-lists</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744434271741/0505f387-8313-4f39-8fd5-57d4e9c9a188.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li><strong>Uji koneksi SSH dari PC di subnet 192.168.10.0/24:</strong></li>
</ol>
<pre><code class="lang-bash">PC&gt; ssh -l cisco 192.168.1.1
Password: cisco123
R1&gt;
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1744434386037/c9c48eb7-e939-4dae-b7a3-71e61737288f.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li><strong>Uji dari subnet lain (misal 192.168.2.0/24) harus gagal:</strong></li>
</ol>
<pre><code class="lang-bash">PC&gt; ssh -l cisco 192.168.1.1
<span class="hljs-comment"># Hasil: Connection refused / access denied</span>
</code></pre>
<hr />
<h3 id="heading-screenshot-yang-dikumpulkan">📸 <strong>Screenshot yang dikumpulkan:</strong></h3>
<ul>
<li><p>Konfigurasi SSH (<code>show run | section line vty</code>)</p>
</li>
<li><p><code>show access-lists</code> ACL SSH</p>
</li>
<li><p>Terminal SSH dari subnet yang diizinkan (berhasil)</p>
</li>
<li><p>Terminal SSH dari subnet yang tidak diizinkan (gagal)</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[🔗 Praktikum Interkoneksi Jaringan Antar Kelompok Menggunakan Tailscale (Full Windows)]]></title><description><![CDATA[📘 Pendahuluan
Pada praktikum ini, mahasiswa akan belajar bagaimana menghubungkan banyak jaringan berbeda yang tersebar dalam subnet masing-masing (karena setiap kelompok menggunakan hotspot HP yang berbeda), sehingga dapat berkomunikasi antar jaring...]]></description><link>https://blog.hasanamin.my.id/praktikum-interkoneksi-jaringan-antar-kelompok-menggunakan-tailscale-full-windows</link><guid isPermaLink="true">https://blog.hasanamin.my.id/praktikum-interkoneksi-jaringan-antar-kelompok-menggunakan-tailscale-full-windows</guid><category><![CDATA[tailscale]]></category><category><![CDATA[vpn]]></category><category><![CDATA[networking for beginners]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Fri, 11 Apr 2025 04:18:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1744344895785/73766a0f-7e2c-41ae-8249-fbd411fbcfe1.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-pendahuluan">📘 Pendahuluan</h2>
<p>Pada praktikum ini, mahasiswa akan belajar bagaimana menghubungkan <strong>banyak jaringan berbeda</strong> yang tersebar dalam subnet masing-masing (karena setiap kelompok menggunakan hotspot HP yang berbeda), sehingga dapat <strong>berkomunikasi antar jaringan seperti layaknya berada di satu LAN</strong>.</p>
<p>Solusi yang digunakan adalah <strong>Tailscale</strong>, VPN modern berbasis WireGuard yang memungkinkan komunikasi antar perangkat meskipun berada di jaringan NAT, hotspot, atau jaringan publik yang berbeda-beda.</p>
<hr />
<h2 id="heading-tujuan-praktikum">🎯 Tujuan Praktikum</h2>
<ul>
<li><p>Menghubungkan 10 kelompok yang berada di jaringan berbeda dalam satu jaringan virtual</p>
</li>
<li><p>Mengakses layanan antar perangkat (file sharing, web service)</p>
</li>
<li><p>Membangun komunikasi peer-to-peer antar kelompok</p>
</li>
<li><p>Memahami konsep routing dan virtual LAN</p>
</li>
</ul>
<hr />
<h2 id="heading-struktur-kelompok">🧑‍🤝‍🧑 Struktur Kelompok</h2>
<ul>
<li><p>Total: <strong>10 Kelompok</strong></p>
</li>
<li><p>Tiap kelompok terdiri dari <strong>3 orang</strong></p>
</li>
<li><p>Setiap kelompok terkoneksi ke internet melalui <strong>hotspot HP</strong> masing-masing (berbeda subnet)</p>
</li>
<li><p>Salah satu laptop tiap kelompok akan menjadi <strong>perangkat utama</strong> (host Tailscale)</p>
</li>
</ul>
<hr />
<h2 id="heading-persiapan-sebelum-praktikum">📦 Persiapan Sebelum Praktikum</h2>
<h3 id="heading-untuk-dosen">Untuk Dosen:</h3>
<ol>
<li><p>Buat akun di <a target="_blank" href="https://tailscale.com">https://tailscale.com</a></p>
</li>
<li><p>Masuk ke dashboard admin:<br /> https://login.tailscale.com/admin/machines</p>
</li>
<li><p>Buat tim organisasi</p>
</li>
<li><p>Buatkan <strong>invite link</strong>:</p>
<pre><code class="lang-bash"> https://login.tailscale.com/admin/invite
</code></pre>
</li>
<li><p>Bagikan link ini ke tiap kelompok untuk login ke jaringan virtual yang sama</p>
</li>
</ol>
<hr />
<h2 id="heading-langkah-langkah-praktikum-tiap-kelompok">🛠️ Langkah-Langkah Praktikum Tiap Kelompok</h2>
<h3 id="heading-a-instalasi-tailscale-di-windows">📌 A. Instalasi Tailscale di Windows</h3>
<ol>
<li><p>Download installer dari:<br /> 👉 https://tailscale.com/download</p>
</li>
<li><p>Jalankan installer, ikuti petunjuk instalasi</p>
</li>
<li><p>Setelah selesai, login menggunakan akun Google/Microsoft melalui link invite dari dosen</p>
</li>
<li><p>Pastikan aplikasi Tailscale berjalan di system tray dan statusnya <strong>Connected</strong></p>
</li>
</ol>
<hr />
<h3 id="heading-b-struktur-perangkat-tiap-kelompok">📌 B. Struktur Perangkat Tiap Kelompok</h3>
<ul>
<li><p>Laptop A: Menjadi <strong>host utama</strong> (terinstall Tailscale)</p>
</li>
<li><p>Laptop B dan C: Terhubung ke jaringan lokal yang sama (via hotspot)</p>
</li>
</ul>
<p>👉 <strong>Catatan</strong>: Semua laptop bisa diinstal Tailscale jika ingin komunikasi langsung. Tapi cukup 1 laptop per kelompok juga cukup untuk gateway komunikasi.</p>
<hr />
<h3 id="heading-c-akses-antar-kelompok">📌 C. Akses Antar Kelompok</h3>
<ol>
<li><p>Klik kanan ikon Tailscale (system tray) → “<strong>Show Tailscale IP</strong>”</p>
</li>
<li><p>Catat IP <code>100.x.x.x</code> dari tiap kelompok</p>
</li>
<li><p>Tes koneksi dengan <strong>Command Prompt</strong>:</p>
<pre><code class="lang-bash"> ping 100.x.x.x
</code></pre>
</li>
<li><p>Jika ping berhasil, artinya koneksi antar jaringan berhasil.</p>
</li>
</ol>
<hr />
<h2 id="heading-challenge-antar-kelompok-tiap-sesi">💥 Challenge Antar Kelompok (Tiap Sesi)</h2>
<h3 id="heading-challenge-1-hosting-web-server-sederhana">💡 Challenge 1: Hosting Web Server Sederhana</h3>
<p>Kelompok A membuat web server Python di Windows:</p>
<ol>
<li><p>Pastikan Python sudah terinstal</p>
</li>
<li><p>Jalankan web server:</p>
<pre><code class="lang-python"> python -m http.server <span class="hljs-number">8000</span>
</code></pre>
</li>
<li><p>Kelompok B mengakses:</p>
<pre><code class="lang-python"> http://<span class="hljs-number">100.</span>x.x.x:<span class="hljs-number">8000</span>
</code></pre>
</li>
</ol>
<hr />
<h3 id="heading-challenge-2-file-sharing-via-windows-share">💡 Challenge 2: File Sharing via Windows Share</h3>
<ol>
<li><p>Kelompok A:</p>
<ul>
<li><p>Klik kanan folder → Properties → Sharing → Advanced Sharing</p>
</li>
<li><p>Centang “Share this folder”</p>
</li>
<li><p>Beri nama share, contoh: <code>shared-data</code></p>
</li>
<li><p>Atur permission ke “Everyone: Read/Write”</p>
</li>
</ul>
</li>
<li><p>Kelompok B:</p>
<ul>
<li><p>Tekan <code>Win + R</code> → ketik:</p>
<pre><code class="lang-bash">  \\100.x.x.x\shared-data
</code></pre>
</li>
<li><p>Jika diminta login, masukkan username dan password Laptop A</p>
</li>
</ul>
</li>
</ol>
<hr />
<h3 id="heading-challenge-3-kirim-pesan-via-simple-chat">💡 Challenge 3: Kirim Pesan via Simple Chat</h3>
<p>Buat program sederhana untuk simulasi pengiriman data atau pesan.</p>
<p><strong>Server (Kelompok A):</strong></p>
<pre><code class="lang-python"><span class="hljs-comment"># save as server.py</span>
<span class="hljs-keyword">import</span> socket
s = socket.socket()
s.bind((<span class="hljs-string">''</span>, <span class="hljs-number">12345</span>))
s.listen(<span class="hljs-number">1</span>)
print(<span class="hljs-string">"Menunggu koneksi..."</span>)
conn, addr = s.accept()
print(<span class="hljs-string">"Terkoneksi dengan:"</span>, addr)
print(<span class="hljs-string">"Pesan:"</span>, conn.recv(<span class="hljs-number">1024</span>).decode())
conn.close()
</code></pre>
<p><strong>Client (Kelompok B):</strong></p>
<pre><code class="lang-python"><span class="hljs-comment"># save as client.py</span>
<span class="hljs-keyword">import</span> socket
s = socket.socket()
s.connect((<span class="hljs-string">"100.x.x.x"</span>, <span class="hljs-number">12345</span>))  <span class="hljs-comment"># Ganti dengan IP kelompok A</span>
s.send(<span class="hljs-string">b"Halo dari kelompok B"</span>)
s.close()
</code></pre>
<hr />
<h2 id="heading-evaluasi-praktikum">🧪 Evaluasi Praktikum</h2>
<p><strong>Tugas Tiap Kelompok:</strong></p>
<ol>
<li><p>Laporan:</p>
<ul>
<li><p>IP Tailscale masing-masing</p>
</li>
<li><p>Log ping atau traceroute</p>
</li>
<li><p>Service yang diakses dari kelompok lain</p>
</li>
</ul>
</li>
<li><p>Screenshot:</p>
<ul>
<li><p>Koneksi berhasil</p>
</li>
<li><p>Akses folder</p>
</li>
<li><p>Web service tampil</p>
</li>
</ul>
</li>
<li><p>Jawaban:</p>
<ul>
<li><p>Apa keuntungan Tailscale dibandingkan VPN biasa?</p>
</li>
<li><p>Apa tantangan dalam mengakses device di jaringan berbeda?</p>
</li>
</ul>
</li>
</ol>
<hr />
<h2 id="heading-kesimpulan">🧠 Kesimpulan</h2>
<p>Melalui praktikum ini, mahasiswa dapat:</p>
<ul>
<li><p>Menghubungkan perangkat dari jaringan yang berbeda seolah berada di LAN yang sama</p>
</li>
<li><p>Menjalankan file sharing, web hosting, dan komunikasi data antar kelompok</p>
</li>
<li><p>Mengenal konsep VPN, IP routing, dan network traversal menggunakan teknologi modern seperti Tailscale</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[🌐 Remote Akses Jaringan LAN dengan Tailscale — Simulasi via Hotspot HP]]></title><description><![CDATA[Pernah ingin mengakses device di jaringan LAN dari jarak jauh tanpa harus ribet setup VPN manual, port forwarding, atau TeamViewer? Tailscale adalah solusi mudah untuk itu. Di artikel ini, kita akan bahas studi kasus remote akses ke laptop di jaringa...]]></description><link>https://blog.hasanamin.my.id/remote-akses-jaringan-lan-dengan-tailscale-simulasi-via-hotspot-hp</link><guid isPermaLink="true">https://blog.hasanamin.my.id/remote-akses-jaringan-lan-dengan-tailscale-simulasi-via-hotspot-hp</guid><category><![CDATA[tailscale]]></category><category><![CDATA[vpn]]></category><dc:creator><![CDATA[Hasan Amin]]></dc:creator><pubDate>Thu, 10 Apr 2025 12:10:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1744288028861/83176e66-92b9-4f11-a0b2-788f882f6e52.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Pernah ingin mengakses device di jaringan LAN dari jarak jauh tanpa harus ribet setup VPN manual, port forwarding, atau TeamViewer? Tailscale adalah solusi mudah untuk itu. Di artikel ini, kita akan bahas studi kasus <strong>remote akses ke laptop di jaringan LAN lokal via Tailscale</strong> dengan setup simpel menggunakan hotspot HP.</p>
<hr />
<p>🧪 Studi Kasus</p>
<p>Bayangkan kamu punya 3 perangkat:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Perangkat</td><td>Sistem Operasi</td><td>Koneksi</td><td>Peran</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Laptop A</strong></td><td>Ubuntu</td><td>Hotspot HP</td><td>Gateway ke jaringan LAN (Tailscale router)</td></tr>
<tr>
<td><strong>Laptop B</strong></td><td>Windows</td><td>Hotspot HP</td><td>Target device (hosting file/web)</td></tr>
<tr>
<td><strong>Laptop C</strong></td><td>Windows</td><td>Modem (Internet)</td><td>Device remote dari lokasi berbeda</td></tr>
</tbody>
</table>
</div><p>Tujuan kita: <strong>Laptop C (di luar jaringan) bisa mengakses Laptop B (yang berada di LAN hotspot) dengan bantuan Laptop A sebagai gateway.</strong></p>
<h2 id="heading-solusi-subnet-routing-dengan-tailscale">🧠 Solusi: Subnet Routing dengan Tailscale</h2>
<p>Kita akan:</p>
<ul>
<li><p>Install Tailscale di <strong>Laptop A dan Laptop C</strong></p>
</li>
<li><p>Set <strong>Laptop A sebagai subnet router</strong> untuk LAN tempat <strong>Laptop B</strong> berada</p>
</li>
<li><p><strong>Akses Laptop B langsung dari Laptop C</strong>, lewat VPN yang ditangani oleh Tailscale</p>
</li>
</ul>
<hr />
<h2 id="heading-step-by-step-instalasi-amp-setup">🛠️ Step-by-Step Instalasi &amp; Setup</h2>
<h3 id="heading-1-install-tailscale-di-laptop-a-ubuntu">✅ 1. Install Tailscale di Laptop A (Ubuntu)</h3>
<p>Buka terminal dan jalankan:</p>
<pre><code class="lang-basic">curl -fsSL https://tailscale.<span class="hljs-keyword">com</span>/install.sh | sh
sudo tailscale up
</code></pre>
<p>Kamu akan diminta login ke akun Google, Microsoft, atau GitHub. Gunakan akun yang sama untuk semua perangkat</p>
<hr />
<h3 id="heading-2-cek-ip-laptop-b">✅ 2. Cek IP Laptop B</h3>
<p>Pastikan <strong>Laptop A dan B</strong> terhubung di jaringan yang sama (hotspot dari HP).<br />Dari Laptop A, pastikan bisa ping Laptop B:</p>
<pre><code class="lang-bash">ping 192.168.43.X   <span class="hljs-comment"># Ganti dengan IP dari Laptop B</span>
</code></pre>
<p>Jika kamu ingin akses web service di Laptop B:</p>
<pre><code class="lang-bash">curl http://192.168.43.X:8080
</code></pre>
<hr />
<h3 id="heading-3-aktifkan-subnet-routing">✅ 3. Aktifkan Subnet Routing</h3>
<p>Masih di Laptop A, aktifkan routing untuk jaringan LAN hotspot:</p>
<pre><code class="lang-bash">sudo tailscale up --advertise-routes=192.168.43.0/24
</code></pre>
<p>Ganti <code>192.168.43.0/24</code> dengan subnet hotspot HP kamu.</p>
<hr />
<h3 id="heading-4-aktifkan-routing-di-dashboard-tailscale">✅ 4. Aktifkan Routing di Dashboard Tailscale</h3>
<ul>
<li><p>Buka: https://login.tailscale.com/admin/machines</p>
</li>
<li><p>Klik pada nama <strong>Laptop A</strong></p>
</li>
<li><p>Klik tombol <code>Enable subnet routes</code></p>
</li>
<li><p>Selesai!</p>
</li>
</ul>
<hr />
<h3 id="heading-5-install-tailscale-di-laptop-c-windows">✅ 5. Install Tailscale di Laptop C (Windows)</h3>
<ul>
<li><p>Download Tailscale untuk Windows dari https://tailscale.com/download</p>
</li>
<li><p>Install, lalu login dengan akun yang sama</p>
</li>
<li><p>Tailscale akan otomatis tersambung ke jaringan privat</p>
</li>
</ul>
<hr />
<h3 id="heading-6-akses-laptop-b-dari-laptop-c">✅ 6. Akses Laptop B dari Laptop C</h3>
<p>Sekarang kamu dari Laptop C bisa langsung akses Laptop B melalui IP-nya:</p>
<pre><code class="lang-bash">ping 192.168.43.X
curl http://192.168.43.X:8080
</code></pre>
<p>Jika Laptop B punya folder sharing, kamu bisa akses dari Windows Explorer:</p>
<pre><code class="lang-bash">\\192.168.43.X\SharedFolder
</code></pre>
<hr />
<h2 id="heading-apa-yang-terjadi-di-balik-layar">💡 Apa yang Terjadi di Balik Layar?</h2>
<ul>
<li><p>Laptop A menjadi <strong>router virtual</strong> untuk subnet <code>192.168.43.0/24</code></p>
</li>
<li><p>Laptop C mengakses jaringan VPN yang mencakup semua subnet tersebut</p>
</li>
<li><p>Tanpa perlu port forwarding, public IP, atau akses router</p>
</li>
<li><p>Semua terkoneksi <strong>peer-to-peer</strong> secara aman menggunakan <strong>WireGuard + NAT traversal</strong></p>
</li>
</ul>
<hr />
<h2 id="heading-tips-tambahan">📌 Tips Tambahan</h2>
<ul>
<li><p>Aktifkan MagicDNS agar tidak perlu hafal IP</p>
</li>
<li><p>Gunakan <code>--accept-routes</code> saat <code>tailsca``le up</code> di Laptop C jika perlu otomatis routing</p>
</li>
<li><p>Aktifkan <strong>ACL</strong> jika ingin membatasi akses antar device</p>
</li>
</ul>
<hr />
<h2 id="heading-kesimpulan">✅ Kesimpulan</h2>
<p>Dengan Tailscale, kamu bisa:</p>
<ul>
<li><p>Remote ke jaringan lokal dari mana saja</p>
</li>
<li><p>Tidak perlu konfigurasi VPN manual</p>
</li>
<li><p>Tidak butuh IP publik atau port forwarding</p>
</li>
<li><p>Akses device di LAN seperti berada di lokasi yang sama</p>
</li>
</ul>
<p>Jika kamu suka artikel seperti ini dan ingin lebih banyak tutorial praktis seputar jaringan dan remote access, follow blog ini atau tinggalkan komentar ya!</p>
<blockquote>
<p>💬 Punya kasus serupa di proyek nyata? Ceritakan di kolom komentar — kita bisa eksplorasi bareng!</p>
</blockquote>
]]></content:encoded></item></channel></rss>