{"id":5594,"date":"2025-08-12T07:56:40","date_gmt":"2025-08-12T00:56:40","guid":{"rendered":"http:\/\/materi.smkn43jkt.sch.id\/?p=5594"},"modified":"2025-08-12T14:56:24","modified_gmt":"2025-08-12T07:56:24","slug":"membuat-virtualhost","status":"publish","type":"post","link":"http:\/\/materi.smkn43jkt.sch.id\/?p=5594","title":{"rendered":"Membuat Virtualhost Pada Apache (studi kasus)"},"content":{"rendered":"<div id=\"model-response-message-contentr_90989f0852c15b47\" class=\"markdown markdown-main-panel enable-updated-hr-color\" dir=\"ltr\">\n<p>Membuat virtual host pada Apache di Debian 12 untuk dua domain, yaitu <b>mediatkj.web.id<\/b> dan <b>tkj.my.id<\/b>, keduanya mengarah ke IP <code>192.168.10.10<\/code>.<\/p>\n<h3>Langkah 1: Instalasi Apache<\/h3>\n<p>Jika Apache belum terinstal di server Debian 12 Anda, jalankan perintah berikut:<\/p>\n<div class=\"code-block ng-tns-c3986087506-152 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-152\">\n<div class=\"animated-opacity ng-tns-c3986087506-152\">\n<pre class=\"ng-tns-c3986087506-152\"><code class=\"code-container formatted ng-tns-c3986087506-152\" role=\"text\" data-test-id=\"code-content\">apt update\r\napt install apache2\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h3>Langkah 2: Membuat Direktori untuk Masing-Masing Website<\/h3>\n<p>Setiap virtual host memerlukan direktori sendiri untuk menyimpan file website. Kita akan membuat direktori untuk kedua domain di bawah <code>\/var\/www\/<\/code>.<\/p>\n<div class=\"code-block ng-tns-c3986087506-153 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-153\">\n<div class=\"animated-opacity ng-tns-c3986087506-153\">\n<pre class=\"ng-tns-c3986087506-153\"><code class=\"code-container formatted ng-tns-c3986087506-153\" role=\"text\" data-test-id=\"code-content\">mkdir -p \/var\/www\/mediatkj.web.id\/public_html\r\nmkdir -p \/var\/www\/tkj.my.id\/public_html\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Selanjutnya, ubah kepemilikan direktori agar Apache (pengguna <code>www-data<\/code>) dapat mengaksesnya.<\/p>\n<div class=\"code-block ng-tns-c3986087506-154 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-154\">\n<div class=\"animated-opacity ng-tns-c3986087506-154\">\n<pre class=\"ng-tns-c3986087506-154\"><code class=\"code-container formatted ng-tns-c3986087506-154\" role=\"text\" data-test-id=\"code-content\">chown -R www-data:www-data \/var\/www\/mediatkj.web.id\r\nchown -R www-data:www-data \/var\/www\/tkj.my.id\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h3>Langkah 3: Membuat Halaman Indeks Sederhana<\/h3>\n<p>Untuk menguji apakah virtual host berfungsi, buat file <code>index.html<\/code> sederhana di masing-masing direktori.<\/p>\n<p>Untuk <code>mediatkj.web.id<\/code>:<\/p>\n<div class=\"code-block ng-tns-c3986087506-155 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-155\">\n<div class=\"animated-opacity ng-tns-c3986087506-155\">\n<pre class=\"ng-tns-c3986087506-155\"><code class=\"code-container formatted ng-tns-c3986087506-155\" role=\"text\" data-test-id=\"code-content\">nano \/var\/www\/mediatkj.web.id\/public_html\/index.html\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Isi file dengan kode berikut:<\/p>\n<div class=\"code-block ng-tns-c3986087506-156 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-156\">\n<div class=\"animated-opacity ng-tns-c3986087506-156\">\n<pre class=\"ng-tns-c3986087506-156\"><code class=\"code-container formatted ng-tns-c3986087506-156\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-meta\">&lt;!DOCTYPE <span class=\"hljs-meta-keyword\">html<\/span>&gt;<\/span>\r\n<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>\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">head<\/span>&gt;<\/span>\r\n    <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>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">title<\/span>&gt;<\/span>mediatkj.web.id<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">title<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">head<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">body<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h1<\/span>&gt;<\/span>Selamat datang di mediatkj.web.id!<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h1<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">body<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">html<\/span>&gt;<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Untuk <code>tkj.my.id<\/code>:<\/p>\n<div class=\"code-block ng-tns-c3986087506-157 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-157\">\n<div class=\"animated-opacity ng-tns-c3986087506-157\">\n<pre class=\"ng-tns-c3986087506-157\"><code class=\"code-container formatted ng-tns-c3986087506-157\" role=\"text\" data-test-id=\"code-content\">nano \/var\/www\/tkj.my.id\/public_html\/index.html\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Isi file dengan kode berikut:<\/p>\n<div class=\"code-block ng-tns-c3986087506-158 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-158\">\n<div class=\"animated-opacity ng-tns-c3986087506-158\">\n<pre class=\"ng-tns-c3986087506-158\"><code class=\"code-container formatted ng-tns-c3986087506-158\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-meta\">&lt;!DOCTYPE <span class=\"hljs-meta-keyword\">html<\/span>&gt;<\/span>\r\n<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>\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">head<\/span>&gt;<\/span>\r\n    <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>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">title<\/span>&gt;<\/span>tkj.my.id<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">title<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">head<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">body<\/span>&gt;<\/span>\r\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h1<\/span>&gt;<\/span>Selamat datang di tkj.my.id!<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h1<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">body<\/span>&gt;<\/span>\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">html<\/span>&gt;<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h3>Langkah 4: Membuat File Virtual Host<\/h3>\n<p>Apache menggunakan file konfigurasi terpisah untuk setiap virtual host. File-file ini disimpan di <code>\/etc\/apache2\/sites-available\/<\/code>.<\/p>\n<h4>Konfigurasi untuk <code>mediatkj.web.id<\/code><\/h4>\n<p>Buat file baru:<\/p>\n<div class=\"code-block ng-tns-c3986087506-159 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-159\">\n<div class=\"animated-opacity ng-tns-c3986087506-159\">\n<pre class=\"ng-tns-c3986087506-159\"><code class=\"code-container formatted ng-tns-c3986087506-159\" role=\"text\" data-test-id=\"code-content\">nano \/etc\/apache2\/sites-available\/mediatkj.web.id.conf\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Tambahkan konfigurasi berikut ke dalam file:<\/p>\n<div class=\"code-block ng-tns-c3986087506-160 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-160\">\n<div class=\"animated-opacity ng-tns-c3986087506-160\">\n<pre class=\"ng-tns-c3986087506-160\"><code class=\"code-container formatted ng-tns-c3986087506-160\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-section\">&lt;VirtualHost <span class=\"hljs-number\">192.168.10.10:80<\/span>&gt;<\/span>\r\n    <span class=\"hljs-attribute\">ServerAdmin<\/span> webmaster@mediatkj.web.id\r\n    <span class=\"hljs-attribute\"><span class=\"hljs-nomarkup\">ServerName<\/span><\/span> mediatkj.web.id\r\n    <span class=\"hljs-attribute\">ServerAlias<\/span> www.mediatkj.web.id\r\n    <span class=\"hljs-attribute\"><span class=\"hljs-nomarkup\">DocumentRoot<\/span><\/span> \/var\/www\/mediatkj.web.id\/public_html\r\n\r\n    <span class=\"hljs-attribute\">ErrorLog<\/span> <span class=\"hljs-variable\">${APACHE_LOG_DIR}<\/span>\/mediatkj_error.log\r\n    <span class=\"hljs-attribute\">CustomLog<\/span> <span class=\"hljs-variable\">${APACHE_LOG_DIR}<\/span>\/mediatkj_access.log combined\r\n<span class=\"hljs-section\">&lt;\/VirtualHost&gt;<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h4>Konfigurasi untuk <code>tkj.my.id<\/code><\/h4>\n<p>Buat file baru:<\/p>\n<div class=\"code-block ng-tns-c3986087506-161 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-161\">\n<div class=\"animated-opacity ng-tns-c3986087506-161\">\n<pre class=\"ng-tns-c3986087506-161\"><code class=\"code-container formatted ng-tns-c3986087506-161\" role=\"text\" data-test-id=\"code-content\">nano \/etc\/apache2\/sites-available\/tkj.my.id.conf\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Tambahkan konfigurasi berikut ke dalam file:<\/p>\n<div class=\"code-block ng-tns-c3986087506-162 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-162\">\n<div class=\"animated-opacity ng-tns-c3986087506-162\">\n<pre class=\"ng-tns-c3986087506-162\"><code class=\"code-container formatted ng-tns-c3986087506-162\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-section\">&lt;VirtualHost <span class=\"hljs-number\">192.168.10.10:80<\/span>&gt;<\/span>\r\n    <span class=\"hljs-attribute\">ServerAdmin<\/span> webmaster@tkj.my.id\r\n    <span class=\"hljs-attribute\"><span class=\"hljs-nomarkup\">ServerName<\/span><\/span> tkj.my.id\r\n    <span class=\"hljs-attribute\">ServerAlias<\/span> www.tkj.my.id\r\n    <span class=\"hljs-attribute\"><span class=\"hljs-nomarkup\">DocumentRoot<\/span><\/span> \/var\/www\/tkj.my.id\/public_html\r\n\r\n    <span class=\"hljs-attribute\">ErrorLog<\/span> <span class=\"hljs-variable\">${APACHE_LOG_DIR}<\/span>\/tkj_error.log\r\n    <span class=\"hljs-attribute\">CustomLog<\/span> <span class=\"hljs-variable\">${APACHE_LOG_DIR}<\/span>\/tkj_access.log combined\r\n<span class=\"hljs-section\">&lt;\/VirtualHost&gt;<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h3>Langkah 5: Mengaktifkan Virtual Host<\/h3>\n<p>Setelah file konfigurasi dibuat, Anda harus mengaktifkannya dengan perintah <code>a2ensite<\/code>, lalu me-<code>restart<\/code> Apache.<\/p>\n<div class=\"code-block ng-tns-c3986087506-163 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-163\">\n<div class=\"animated-opacity ng-tns-c3986087506-163\">\n<pre class=\"ng-tns-c3986087506-163\"><code class=\"code-container formatted ng-tns-c3986087506-163\" role=\"text\" data-test-id=\"code-content\">a2ensite mediatkj.web.id.conf\r\na2ensite tkj.my.id.conf\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Sekarang, nonaktifkan konfigurasi default Apache untuk menghindari konflik:<\/p>\n<div class=\"code-block ng-tns-c3986087506-164 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-164\">\n<div class=\"animated-opacity ng-tns-c3986087506-164\">\n<pre class=\"ng-tns-c3986087506-164\"><code class=\"code-container formatted ng-tns-c3986087506-164\" role=\"text\" data-test-id=\"code-content\">a2dissite 000-default.conf\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Terakhir, <i>restart<\/i> Apache untuk menerapkan semua perubahan:<\/p>\n<div class=\"code-block ng-tns-c3986087506-165 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-165\">\n<div class=\"animated-opacity ng-tns-c3986087506-165\">\n<pre class=\"ng-tns-c3986087506-165\"><code class=\"code-container formatted ng-tns-c3986087506-165\" role=\"text\" data-test-id=\"code-content\">systemctl restart apache2\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h3>Langkah 6: Konfigurasi DNS (File <code>\/etc\/hosts<\/code>)<\/h3>\n<p>Untuk menguji virtual host dari komputer lokal Anda (bukan dari server itu sendiri), Anda perlu mengarahkan domain ke IP server. Karena ini adalah IP lokal (<code>192.168.10.10<\/code>), kita akan mengedit file <code>\/etc\/hosts<\/code> di komputer Anda (misalnya Windows, Linux, atau macOS).<\/p>\n<p>Tambahkan baris berikut ke file <code>\/etc\/hosts<\/code> di komputer Anda:<\/p>\n<div class=\"code-block ng-tns-c3986087506-166 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-166\">\n<div class=\"animated-opacity ng-tns-c3986087506-166\">\n<pre class=\"ng-tns-c3986087506-166\"><code class=\"code-container formatted ng-tns-c3986087506-166\" role=\"text\" data-test-id=\"code-content\">192.168.10.10   mediatkj.web.id www.mediatkj.web.id\r\n192.168.10.10   tkj.my.id www.tkj.my.id\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Sekarang, buka browser dan ketik <code>mediatkj.web.id<\/code> atau <code>tkj.my.id<\/code>. Seharusnya Anda akan melihat halaman indeks yang berbeda untuk masing-masing domain, membuktikan bahwa virtual host Anda telah berhasil dikonfigurasi.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h3>Konfigurasi File DNS<\/h3>\n<div id=\"model-response-message-contentr_137efdcd6514618d\" class=\"markdown markdown-main-panel enable-updated-hr-color\" dir=\"ltr\">\n<p>Langkah-langkah konfigurasi DNS server di Debian 12 menggunakan BIND9 untuk domain <b>mediatkj.web.id<\/b> dan <b>tkj.my.id<\/b> dengan alamat IP <b>192.168.10.10<\/b>.<\/p>\n<h3>Langkah 1: Instalasi BIND9<\/h3>\n<p>Pertama, instal paket BIND9. BIND (Berkeley Internet Name Domain) adalah perangkat lunak DNS yang paling umum digunakan di Linux.<\/p>\n<div class=\"code-block ng-tns-c3986087506-199 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-199\">\n<div class=\"animated-opacity ng-tns-c3986087506-199\">\n<pre class=\"ng-tns-c3986087506-199\"><code class=\"code-container formatted ng-tns-c3986087506-199\" role=\"text\" data-test-id=\"code-content\">apt update\r\napt install bind9 bind9utils dnsutils\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h3>Langkah 2: Konfigurasi File Utama BIND9<\/h3>\n<p>File konfigurasi utama BIND9 adalah <code>\/etc\/bind\/named.conf.local<\/code>. Kita akan menambahkan zona untuk kedua domain di sini.<\/p>\n<div class=\"code-block ng-tns-c3986087506-200 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-200\">\n<div class=\"animated-opacity ng-tns-c3986087506-200\">\n<pre class=\"ng-tns-c3986087506-200\"><code class=\"code-container formatted ng-tns-c3986087506-200\" role=\"text\" data-test-id=\"code-content\">nano \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/named.conf.local\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Tambahkan baris-baris berikut di akhir file:<\/p>\n<div class=\"code-block ng-tns-c3986087506-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-201\">\n<div class=\"animated-opacity ng-tns-c3986087506-201\">\n<pre class=\"ng-tns-c3986087506-201\"><code class=\"code-container formatted ng-tns-c3986087506-201\" role=\"text\" data-test-id=\"code-content\">\/\/ <span class=\"hljs-attribute\">Zona<\/span> untuk mediatkj.web.id\r\n<span class=\"hljs-attribute\">zone<\/span> <span class=\"hljs-string\">\"mediatkj.web.id\"<\/span> {\r\n    <span class=\"hljs-attribute\">type<\/span> master;\r\n    <span class=\"hljs-attribute\">file<\/span> <span class=\"hljs-string\">\"\/etc\/bind\/db.mediatkj.web.id\"<\/span>;\r\n};\r\n\r\n\/\/ <span class=\"hljs-attribute\">Zona<\/span> untuk tkj.my.id\r\n<span class=\"hljs-attribute\">zone<\/span> <span class=\"hljs-string\">\"tkj.my.id\"<\/span> {\r\n    <span class=\"hljs-attribute\">type<\/span> master;\r\n    <span class=\"hljs-attribute\">file<\/span> <span class=\"hljs-string\">\"\/etc\/bind\/db.tkj.my.id\"<\/span>;\r\n};\r\n\r\n\/\/ <span class=\"hljs-attribute\">Zona<\/span> untuk reverse lookup\r\n<span class=\"hljs-attribute\">zone<\/span> <span class=\"hljs-string\">\"10.168.192.in-addr.arpa\"<\/span> {\r\n    <span class=\"hljs-attribute\">type<\/span> master;\r\n    <span class=\"hljs-attribute\">file<\/span> <span class=\"hljs-string\">\"\/etc\/bind\/db.192\"<\/span>;\r\n};\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<ul>\n<li><code>db.mediatkj.web.id<\/code> dan <code>db.tkj.my.id<\/code> adalah file-file yang akan berisi catatan DNS (A, CNAME, dll.) untuk masing-masing domain.<\/li>\n<li><code>db.192<\/code> adalah file untuk <i>reverse lookup<\/i> (mencari nama domain dari alamat IP).<\/li>\n<\/ul>\n<h3>Langkah 3: Membuat File Zona (db.mediatkj.web.id)<\/h3>\n<p>Sekarang, buat file zona untuk <code>mediatkj.web.id<\/code>. Anda bisa menyalin file template bawaan BIND9 sebagai dasar.<\/p>\n<div class=\"code-block ng-tns-c3986087506-202 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-202\">\n<div class=\"animated-opacity ng-tns-c3986087506-202\">\n<pre class=\"ng-tns-c3986087506-202\"><code class=\"code-container formatted ng-tns-c3986087506-202\" role=\"text\" data-test-id=\"code-content\">cp \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/db.local \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/db.mediatkj.web.id\r\nnano \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/db.mediatkj.web.id\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Edit file tersebut agar sesuai dengan domain Anda:<\/p>\n<div class=\"code-block ng-tns-c3986087506-203 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-203\">\n<div class=\"animated-opacity ng-tns-c3986087506-203\">\n<pre class=\"ng-tns-c3986087506-203\"><code class=\"code-container formatted ng-tns-c3986087506-203\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-meta\">$TTL<\/span>    <span class=\"hljs-number\">604800<\/span>\r\n@       <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">SOA<\/span>     ns1.mediatkj.web.id. root.mediatkj.web.id. (\r\n                              <span class=\"hljs-number\">3<\/span>         <span class=\"hljs-comment\">; Serial<\/span>\r\n                         <span class=\"hljs-number\">604800<\/span>         <span class=\"hljs-comment\">; Refresh<\/span>\r\n                          <span class=\"hljs-number\">86400<\/span>         <span class=\"hljs-comment\">; Retry<\/span>\r\n                        <span class=\"hljs-number\">2419200<\/span>         <span class=\"hljs-comment\">; Expire<\/span>\r\n                         <span class=\"hljs-number\">604800<\/span> )       <span class=\"hljs-comment\">; Negative Cache TTL<\/span>\r\n<span class=\"hljs-comment\">;<\/span>\r\n@       <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">NS<\/span>      ns1.mediatkj.web.id.\r\n@       <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">A<\/span>       <span class=\"hljs-number\">192.168.10.10<\/span>\r\nns1     <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">A<\/span>       <span class=\"hljs-number\">192.168.10.10<\/span>\r\nwww     <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">A<\/span>       <span class=\"hljs-number\">192.168.10.10<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<ul>\n<li><b><code>@ IN SOA ns1.mediatkj.web.id. root.mediatkj.web.id.<\/code><\/b>: Menentukan <i>name server<\/i> utama dan alamat email admin.<\/li>\n<li><b><code>@ IN NS ns1.mediatkj.web.id.<\/code><\/b>: Menentukan <i>name server<\/i> untuk zona ini.<\/li>\n<li><b><code>@ IN A 192.168.10.10<\/code><\/b>: Mengarahkan domain utama <code>mediatkj.web.id<\/code> ke IP <code>192.168.10.10<\/code>.<\/li>\n<li><b><code>ns1 IN A 192.168.10.10<\/code><\/b>: Mencatat alamat IP untuk <i>name server<\/i>.<\/li>\n<li><b><code>www IN A 192.168.10.10<\/code><\/b>: Mengarahkan subdomain <code>www<\/code> ke IP yang sama.<\/li>\n<\/ul>\n<h3>Langkah 4: Membuat File Zona (db.tkj.my.id)<\/h3>\n<p>Ulangi proses yang sama untuk domain <code>tkj.my.id<\/code>.<\/p>\n<div class=\"code-block ng-tns-c3986087506-204 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-204\">\n<div class=\"animated-opacity ng-tns-c3986087506-204\">\n<pre class=\"ng-tns-c3986087506-204\"><code class=\"code-container formatted ng-tns-c3986087506-204\" role=\"text\" data-test-id=\"code-content\">cp \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/db.local \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/db.tkj.my.id\r\nnano \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/db.tkj.my.id\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Isi file tersebut dengan konfigurasi berikut:<\/p>\n<div class=\"code-block ng-tns-c3986087506-205 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-205\">\n<div class=\"animated-opacity ng-tns-c3986087506-205\">\n<pre class=\"ng-tns-c3986087506-205\"><code class=\"code-container formatted ng-tns-c3986087506-205\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-meta\">$TTL<\/span>    <span class=\"hljs-number\">604800<\/span>\r\n@       <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">SOA<\/span>     ns1.tkj.my.id. root.tkj.my.id. (\r\n                              <span class=\"hljs-number\">3<\/span>         <span class=\"hljs-comment\">; Serial<\/span>\r\n                         <span class=\"hljs-number\">604800<\/span>         <span class=\"hljs-comment\">; Refresh<\/span>\r\n                          <span class=\"hljs-number\">86400<\/span>         <span class=\"hljs-comment\">; Retry<\/span>\r\n                        <span class=\"hljs-number\">2419200<\/span>         <span class=\"hljs-comment\">; Expire<\/span>\r\n                         <span class=\"hljs-number\">604800<\/span> )       <span class=\"hljs-comment\">; Negative Cache TTL<\/span>\r\n<span class=\"hljs-comment\">;<\/span>\r\n@       <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">NS<\/span>      ns1.tkj.my.id.\r\n@       <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">A<\/span>       <span class=\"hljs-number\">192.168.10.10<\/span>\r\nns1     <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">A<\/span>       <span class=\"hljs-number\">192.168.10.10<\/span>\r\nwww     <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">A<\/span>       <span class=\"hljs-number\">192.168.10.10<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h3>Langkah 5: Membuat File Zona untuk Reverse Lookup (db.192)<\/h3>\n<p>File ini penting untuk <i>reverse lookup<\/i>, di mana server bisa mencocokkan IP kembali ke nama domain.<\/p>\n<div class=\"code-block ng-tns-c3986087506-206 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-206\">\n<div class=\"animated-opacity ng-tns-c3986087506-206\">\n<pre class=\"ng-tns-c3986087506-206\"><code class=\"code-container formatted ng-tns-c3986087506-206\" role=\"text\" data-test-id=\"code-content\">cp \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/db.127 \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/db.192\r\nnano \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/db.192\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Edit file tersebut:<\/p>\n<div class=\"code-block ng-tns-c3986087506-207 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-207\">\n<div class=\"animated-opacity ng-tns-c3986087506-207\">\n<pre class=\"ng-tns-c3986087506-207\"><code class=\"code-container formatted ng-tns-c3986087506-207\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-meta\">$TTL<\/span>    <span class=\"hljs-number\">604800<\/span>\r\n@       <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">SOA<\/span>     ns1.mediatkj.web.id. root.mediatkj.web.id. (\r\n                              <span class=\"hljs-number\">3<\/span>         <span class=\"hljs-comment\">; Serial<\/span>\r\n                         <span class=\"hljs-number\">604800<\/span>         <span class=\"hljs-comment\">; Refresh<\/span>\r\n                          <span class=\"hljs-number\">86400<\/span>         <span class=\"hljs-comment\">; Retry<\/span>\r\n                        <span class=\"hljs-number\">2419200<\/span>         <span class=\"hljs-comment\">; Expire<\/span>\r\n                         <span class=\"hljs-number\">604800<\/span> )       <span class=\"hljs-comment\">; Negative Cache TTL<\/span>\r\n<span class=\"hljs-comment\">;<\/span>\r\n@       <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">NS<\/span>      ns1.mediatkj.web.id.\r\n@       <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">NS<\/span>      ns1.tkj.my.id.\r\n<span class=\"hljs-number\">10<\/span>      <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">PTR<\/span>     mediatkj.web.id.\r\n<span class=\"hljs-number\">10<\/span>      <span class=\"hljs-keyword\">IN<\/span>      <span class=\"hljs-keyword\">PTR<\/span>     tkj.my.id.\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<ul>\n<li><b><code>@ IN NS ns1.tkj.my.id.<\/code><\/b>: Tambahkan <i>name server<\/i> kedua domain.<\/li>\n<li><b><code>10 IN PTR mediatkj.web.id.<\/code><\/b>: Angka <code>10<\/code> adalah bagian terakhir dari IP <code>192.168.10.10<\/code>. Ini mengarahkan IP tersebut ke nama domain.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>Langkah 6: Validasi dan Restart BIND9<\/h3>\n<p>Setelah semua file dibuat, validasi konfigurasi Anda untuk memastikan tidak ada kesalahan sintaksis:<\/p>\n<div class=\"code-block ng-tns-c3986087506-208 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-208\">\n<div class=\"animated-opacity ng-tns-c3986087506-208\">\n<pre class=\"ng-tns-c3986087506-208\"><code class=\"code-container formatted ng-tns-c3986087506-208\" role=\"text\" data-test-id=\"code-content\">named-checkconf\r\nnamed-checkzone mediatkj.web.id \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/db.mediatkj.web.id\r\nnamed-checkzone tkj.my.id \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/db.tkj.my.id\r\nnamed-checkzone 10.168.192.in-addr.arpa \/etc\/<span class=\"hljs-built_in\">bind<\/span>\/db.192\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Jika tidak ada pesan kesalahan, <i>restart<\/i> layanan BIND9 untuk menerapkan perubahan:<\/p>\n<div class=\"code-block ng-tns-c3986087506-209 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-209\">\n<div class=\"animated-opacity ng-tns-c3986087506-209\">\n<pre class=\"ng-tns-c3986087506-209\"><code class=\"code-container formatted ng-tns-c3986087506-209\" role=\"text\" data-test-id=\"code-content\">systemctl restart bind9\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<h3>Langkah 7: Mengatur Resolver DNS Klien<\/h3>\n<p>Terakhir, agar komputer klien di jaringan Anda menggunakan DNS server ini, Anda perlu mengarahkan <code>nameserver<\/code> mereka ke IP <code>192.168.10.10<\/code>.<\/p>\n<p>Pada komputer klien, edit file <code>\/etc\/resolv.conf<\/code> (untuk Linux) atau konfigurasi DNS di pengaturan jaringan.<\/p>\n<div class=\"code-block ng-tns-c3986087506-210 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-210\">\n<div class=\"animated-opacity ng-tns-c3986087506-210\">\n<pre class=\"ng-tns-c3986087506-210\"><code class=\"code-container formatted ng-tns-c3986087506-210\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-comment\"># File \/etc\/resolv.conf<\/span>\r\nnameserver 192.168.10.10\r\nnameserver 8.8.8.8 <span class=\"hljs-comment\"># Tambahkan DNS publik sebagai cadangan<\/span><\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Sekarang, Anda bisa menguji konfigurasi DNS dengan perintah <code>dig<\/code> atau <code>nslookup<\/code>.<\/p>\n<div class=\"code-block ng-tns-c3986087506-211 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-211\">\n<div class=\"animated-opacity ng-tns-c3986087506-211\">\n<pre class=\"ng-tns-c3986087506-211\"><code class=\"code-container formatted ng-tns-c3986087506-211\" role=\"text\" data-test-id=\"code-content\">dig mediatkj.web.id\r\ndig tkj.my.id\r\ndig -x 192.168.10.10\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Hasilnya akan menunjukkan bahwa domain-domain tersebut berhasil diterjemahkan ke IP <code>192.168.10.10<\/code>.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h3>FTP Server<\/h3>\n<div id=\"model-response-message-contentr_0f0b4c4374ab6fc6\" class=\"markdown markdown-main-panel enable-updated-hr-color\" dir=\"ltr\">\n<p>Konfigurasi FTP server di Debian 12 menggunakan <b>ProFTPD<\/b> untuk domain <b>mediatkj.web.id<\/b> (pengguna <code>dania<\/code>) dan <b>tkj.my.id<\/b> (pengguna <code>danang<\/code>), di mana setiap pengguna hanya dapat mengakses direktori utama mereka sendiri.<\/p>\n<p>Kita akan menggunakan ProFTPD karena fleksibilitasnya dalam mengkonfigurasi akses per pengguna dan direktori.<\/p>\n<h3>Langkah 1: Instalasi ProFTPD<\/h3>\n<p>Jika ProFTPD belum terinstal, jalankan perintah berikut:<\/p>\n<div class=\"code-block ng-tns-c3986087506-475 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-475\">\n<div class=\"animated-opacity ng-tns-c3986087506-475\">\n<pre class=\"ng-tns-c3986087506-475\"><code class=\"code-container formatted ng-tns-c3986087506-475\" role=\"text\" data-test-id=\"code-content\">apt update\r\napt install proftpd-basic\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Saat instalasi, pilih mode <b>standalone<\/b> ketika diminta. Layanan akan otomatis berjalan setelah instalasi selesai.<\/p>\n<hr \/>\n<h3>Langkah 2: Membuat Pengguna dan Direktori FTP<\/h3>\n<p>Kita perlu membuat dua pengguna Linux, <code>dania<\/code> dan <code>danang<\/code>, yang akan digunakan khusus untuk login FTP. Kita akan mengatur <i>shell<\/i> mereka ke <code>\/usr\/sbin\/nologin<\/code> agar mereka tidak bisa login langsung ke terminal server, meningkatkan keamanan.<\/p>\n<ol start=\"1\">\n<li><b>Buat pengguna <code>dania<\/code>:<\/b>\n<div class=\"code-block ng-tns-c3986087506-476 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-476\">\n<div class=\"animated-opacity ng-tns-c3986087506-476\">\n<pre class=\"ng-tns-c3986087506-476\"><code class=\"code-container formatted ng-tns-c3986087506-476\" role=\"text\" data-test-id=\"code-content\">useradd -m -s \/usr\/sbin\/nologin dania\r\npasswd dania\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Ikuti petunjuk untuk membuat kata sandi. Direktori <i>home<\/i> <code>dania<\/code> akan otomatis dibuat di <code>\/home\/dania<\/code>.<\/li>\n<li><b>Buat pengguna <code>danang<\/code>:<\/b>\n<div class=\"code-block ng-tns-c3986087506-477 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-477\">\n<div class=\"animated-opacity ng-tns-c3986087506-477\">\n<pre class=\"ng-tns-c3986087506-477\"><code class=\"code-container formatted ng-tns-c3986087506-477\" role=\"text\" data-test-id=\"code-content\">useradd -m -s \/usr\/sbin\/nologin danang\r\npasswd danang\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Ikuti petunjuk untuk membuat kata sandi. Direktori <i>home<\/i> <code>danang<\/code> akan otomatis dibuat di <code>\/home\/danang<\/code>.<\/li>\n<\/ol>\n<hr \/>\n<h3>Langkah 3: Konfigurasi ProFTPD<\/h3>\n<p>File konfigurasi utama ProFTPD adalah <code>\/etc\/proftpd\/proftpd.conf<\/code>. Kita akan mengedit file ini untuk menerapkan aturan yang spesifik untuk <code>dania<\/code> dan <code>danang<\/code>.<\/p>\n<ol start=\"1\">\n<li><b>Buat cadangan file konfigurasi:<\/b>\n<div class=\"code-block ng-tns-c3986087506-478 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-478\">\n<div class=\"animated-opacity ng-tns-c3986087506-478\">\n<pre class=\"ng-tns-c3986087506-478\"><code class=\"code-container formatted ng-tns-c3986087506-478\" role=\"text\" data-test-id=\"code-content\">cp \/etc\/proftpd\/proftpd.conf \/etc\/proftpd\/proftpd.conf.bak\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li><b>Edit file konfigurasi:<\/b>\n<div class=\"code-block ng-tns-c3986087506-479 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-479\">\n<div class=\"animated-opacity ng-tns-c3986087506-479\">\n<pre class=\"ng-tns-c3986087506-479\"><code class=\"code-container formatted ng-tns-c3986087506-479\" role=\"text\" data-test-id=\"code-content\">nano \/etc\/proftpd\/proftpd.conf\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Cari dan pastikan baris-baris berikut sudah sesuai:<\/p>\n<ul>\n<li><b>Mengunci pengguna di direktori <i>home<\/i> mereka<\/b>: Pastikan baris ini ada untuk membatasi akses pengguna.\n<div class=\"code-block ng-tns-c3986087506-480 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-480\">\n<div class=\"animated-opacity ng-tns-c3986087506-480\">\n<pre class=\"ng-tns-c3986087506-480\"><code class=\"code-container formatted ng-tns-c3986087506-480\" role=\"text\" data-test-id=\"code-content\">DefaultRoot ~\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li><b>Menonaktifkan login <i>root<\/i><\/b>: Untuk keamanan, pastikan <i>root<\/i> tidak bisa login melalui FTP.\n<div class=\"code-block ng-tns-c3986087506-481 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-481\">\n<div class=\"animated-opacity ng-tns-c3986087506-481\">\n<pre class=\"ng-tns-c3986087506-481\"><code class=\"code-container formatted ng-tns-c3986087506-481\" role=\"text\" data-test-id=\"code-content\">RootLogin off\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<\/li>\n<li>Tambahkan blok konfigurasi untuk setiap pengguna:Di bagian akhir file, tambahkan blok &lt;Directory&gt; untuk membatasi akses lebih lanjut. Ini memastikan setiap pengguna hanya bisa mengakses direktori yang ditentukan.\n<div class=\"code-block ng-tns-c3986087506-482 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-482\">\n<div class=\"animated-opacity ng-tns-c3986087506-482\">\n<pre class=\"ng-tns-c3986087506-482\"><code class=\"code-container formatted ng-tns-c3986087506-482\" role=\"text\" data-test-id=\"code-content\"># Konfigurasi untuk user dania (mediatkj.web.id)\r\n&lt;Directory \/home\/dania&gt;\r\n    User dania\r\n    Group dania\r\n    AllowOverwrite on\r\n    &lt;Limit CWD PWD MKD RMD RNFR RNTO DELE STOR&gt;\r\n        AllowUser dania\r\n        DenyAll\r\n    &lt;\/Limit&gt;\r\n&lt;\/Directory&gt;\r\n\r\n# Konfigurasi untuk user danang (tkj.my.id)\r\n&lt;Directory \/home\/danang&gt;\r\n    User danang\r\n    Group danang\r\n    AllowOverwrite on\r\n    &lt;Limit CWD PWD MKD RMD RNFR RNTO DELE STOR&gt;\r\n        AllowUser danang\r\n        DenyAll\r\n    &lt;\/Limit&gt;\r\n&lt;\/Directory&gt;\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<ul>\n<li><code>DefaultRoot ~<\/code>: Mengunci pengguna di direktori <i>home<\/i> mereka.<\/li>\n<li><code>AllowUser<\/code>: Mengizinkan akses hanya untuk pengguna yang ditentukan di direktori tersebut.<\/li>\n<li><code>AllowOverwrite on<\/code>: Mengizinkan pengguna untuk menimpa file yang sudah ada.<\/li>\n<\/ul>\n<\/li>\n<li><b>Simpan dan keluar dari editor<\/b> (<code>Ctrl+X<\/code>, lalu <code>Y<\/code>, lalu <code>Enter<\/code>).<\/li>\n<\/ol>\n<hr \/>\n<h3>Langkah 4: Menerapkan Perubahan dan Pengujian<\/h3>\n<p>Setelah semua konfigurasi selesai, <i>restart<\/i> layanan ProFTPD agar perubahan diterapkan:<\/p>\n<div class=\"code-block ng-tns-c3986087506-483 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\">\n<div class=\"formatted-code-block-internal-container ng-tns-c3986087506-483\">\n<div class=\"animated-opacity ng-tns-c3986087506-483\">\n<pre class=\"ng-tns-c3986087506-483\"><code class=\"code-container formatted ng-tns-c3986087506-483\" role=\"text\" data-test-id=\"code-content\">systemctl restart proftpd\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>Sekarang Anda bisa menguji koneksi FTP dari klien (seperti FileZilla, WinSCP, atau perintah <code>ftp<\/code>) dengan detail berikut:<\/p>\n<ul>\n<li><b>Host<\/b>: <code>192.168.10.10<\/code><\/li>\n<li><b>User <code>dania<\/code><\/b>:\n<ul>\n<li>Username: <code>dania<\/code><\/li>\n<li>Password: [kata sandi <code>dania<\/code>]<\/li>\n<\/ul>\n<\/li>\n<li><b>User <code>danang<\/code><\/b>:\n<ul>\n<li>Username: <code>danang<\/code><\/li>\n<li>Password: [kata sandi <code>danang<\/code>]<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Ketika <code>dania<\/code> login, ia hanya akan melihat direktori <code>\/home\/dania<\/code> dan tidak bisa keluar dari direktori tersebut. Hal yang sama juga berlaku untuk pengguna <code>danang<\/code>, yang hanya akan melihat <code>\/home\/danang<\/code>.<\/p>\n<p><b>Tips Keamanan Tambahan:<\/b><\/p>\n<ul>\n<li>Sangat disarankan untuk menggunakan <b>SFTP<\/b> (SSH File Transfer Protocol) yang sudah terenkripsi dan jauh lebih aman daripada FTP. Cukup dengan menginstal dan mengkonfigurasi SSH, pengguna bisa langsung login dengan kredensial yang sama tanpa konfigurasi FTP tambahan.<\/li>\n<li>Jika Anda menggunakan firewall (seperti UFW), pastikan Anda mengizinkan lalu lintas pada <b>port 21<\/b> untuk FTP.<\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Membuat virtual host pada Apache di Debian 12 untuk dua domain, yaitu mediatkj.web.id dan tkj.my.id, keduanya mengarah ke IP 192.168.10.10. Langkah 1: Instalasi Apache Jika Apache belum terinstal di server Debian 12 Anda, jalankan perintah berikut: apt update apt install apache2 Langkah 2: Membuat Direktori untuk Masing-Masing Website Setiap virtual host memerlukan direktori sendiri untuk [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,20,72,7],"tags":[],"_links":{"self":[{"href":"http:\/\/materi.smkn43jkt.sch.id\/index.php?rest_route=\/wp\/v2\/posts\/5594"}],"collection":[{"href":"http:\/\/materi.smkn43jkt.sch.id\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/materi.smkn43jkt.sch.id\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/materi.smkn43jkt.sch.id\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/materi.smkn43jkt.sch.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5594"}],"version-history":[{"count":8,"href":"http:\/\/materi.smkn43jkt.sch.id\/index.php?rest_route=\/wp\/v2\/posts\/5594\/revisions"}],"predecessor-version":[{"id":5622,"href":"http:\/\/materi.smkn43jkt.sch.id\/index.php?rest_route=\/wp\/v2\/posts\/5594\/revisions\/5622"}],"wp:attachment":[{"href":"http:\/\/materi.smkn43jkt.sch.id\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/materi.smkn43jkt.sch.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5594"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/materi.smkn43jkt.sch.id\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}