13 min read

Seleksi ITNSA SMKN 2 Depok Sleman

Seleksi ITNSA SMKN 2 Depok Sleman
Photo by Denny Bú / Unsplash
Topologi Jaringan
Topologi Jaringan
Services
Services
Address
Pembagian IP address

ROUTER-GW

Ganti password admin dengan Skills39

password

Ganti hostname router

/system identity set name=ROUTER-GW

Renew license

/system license generate-new-id
/system license renew

Aktifkan DHCP client pada ether1 (opsional)

/ip dhcp-client add interface=ether1 disabled=no

Tambahkan firewall NAT

/ip firewall nat add chain=srcnat action=masquerade out-interface=ether1

Tambahkan ip pada ether2

 /ip address add interface=ether2 address=172.16.18.41/29

LNX

Konfigurasi IP statis

sudo nano /etc/network/interfaces

Ganti enp0s3 menggunakan IP statis

# The primary network interface
allow-hotplug enp0s3
iface enp0s3 inet static
      address 172.16.18.43/29
      gateway 172.16.18.41
      dns-nameservers 1.1.1.1

/etc/network/interfaces

Ganti Hostname

sudo hostnamectl hostname LNX

edit file /etc/hosts

127.0.0.1      localhost
172.16.18.41   LNX

/etc/hosts

Edit file /etc/ssh/sshd_config

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/usr/bin:/bin:/usr/games

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Include /etc/ssh/sshd_config.d/*.conf

Port 22
#AddressFamily any
ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile	.ssh/authorized_keys .ssh/authorized_keys2

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
#PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
KbdInteractiveAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the KbdInteractiveAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via KbdInteractiveAuthentication may bypass
# the setting of "PermitRootLogin prohibit-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and KbdInteractiveAuthentication to 'no'.
UsePAM yes

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# override default of no subsystems
Subsystem	sftp	/usr/lib/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#	X11Forwarding no
#	AllowTcpForwarding no
#	PermitTTY no
#	ForceCommand cvs server

/etc/ssh/sshd_config

FTP (vsftpd)

Install vsftpd

sudo apt update
sudo apt install ftp vsftpd

Backup file konfigurasi

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup

Buat user competitor (jika belum ada)

sudo adduser competitor

Tambahkan user competitor ke userlist

sudo echo "competitor" | tee -a /etc/vsftpd.userlist

Buat directory FTP

sudo mkdir /home/competitor/share
sudo chown competitor:competitor /home/competitor/share

Konfigurasi FTP

sudo nano /etc/vsftpd.conf

Ubah beberapa baris berikut

listen=YES
listen_ipv6=NO
write_enable=YES
chroot_local_user=YES

# tambahkan dibawah chroot_local_user=YES
allow_writeable_chroot=YES

/etc/vsftpd.conf

Tambahkan di akhir

# User sub token
user_sub_token=$USER
local_root=/home/$USER/share

# FTP user list
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

/etc/vsftpd.conf

Restart service vsftpd

sudo systemctl restart vsftpd.service

Referensi: https://www.digitalocean.com/community/tutorials/how-to-set-up-vsftpd-for-a-user-s-directory-on-debian-10


DNS Server (Bind9)

Install bind9

sudo apt update
sudo apt install -y bind9

Konfigurasi bind9

sudo cd /etc/bind
sudo cp db.local db.stembayo.id
sudo cp db.127 db.172.16.1x

Edit file db.stembayo.id

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     stembayo.id. root.stembayo.id. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      stembayo.id.
@       IN      A       172.16.11.43 
lnx     IN      A       172.16.11.43
mail    IN      A       172.16.11.43
basic-auth      IN      A       172.16.11.43
wordpress       IN      A       172.16.11.43
www.wordpress   IN      A       172.16.11.43

db.stembayo.id

Edit file db.172.16.11

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     stembayo.id. root.stembayo.id. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      stembayo.id.
43      IN      PTR     stembayo.id.

db.172.16.11

Edit file named.conf.local

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "stembayo.id" {
        type master;
        file "/etc/bind/db.stembayo.id";
};

zone "11.16.172.in-addr.arpa" {
        type master;
        file "/etc/bind/db.172.16.11";
};

named.conf.local

Edit file named.conf.options

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        forwarders {
                1.1.1.1;
        };

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation no;

        listen-on-v6 { any; };
};

named.conf.options

Restart bind9

sudo systemctl restart bind9

Referensi: https://zonabiner.com/tutorial/debian/konfigurasi-dns


Certificate Authority & Wildcard SSL

Install easy-rsa

sudo apt update
sudo apt install easy-rsa

Persiapan

mkdir /ssl
mkdir newcerts crl
cd /ssl
touch index.txt
echo 00 > serial

Buat file openssl.cnf

#
# OpenSSL example configuration file.
# See doc/man5/config.pod for more info.
#
# This is mostly being used for generation of certificate requests,
# but may be used for auto loading of providers

# Note that you can include other files from the main configuration
# file using the .include directive.
#.include filename

# This definition stops the following lines choking if HOME isn't
# defined.
HOME                    = .

 # Use this in order to automatically load providers.
openssl_conf = openssl_init

# Comment out the next line to ignore configuration errors
config_diagnostics = 1

# Extra OBJECT IDENTIFIER info:
# oid_file       = $ENV::HOME/.oid
oid_section = new_oids

# To use this configuration file with the "-extfile" option of the
# "openssl x509" utility, name here the section containing the
# X.509v3 extensions to use:
# extensions            =
# (Alternatively, use a configuration file that has only
# X.509v3 extensions in its main [= default] section.)

[ new_oids ]
# We can add new OIDs in here for use by 'ca', 'req' and 'ts'.
# Add a simple OID like this:
# testoid1=1.2.3.4
# Or use config file substitution like this:
# testoid2=${testoid1}.5.6

# Policies used by the TSA examples.
tsa_policy1 = 1.2.3.4.1
tsa_policy2 = 1.2.3.4.5.6
tsa_policy3 = 1.2.3.4.5.7

# For FIPS
# Optionally include a file that is generated by the OpenSSL fipsinstall
# application. This file contains configuration data required by the OpenSSL
# fips provider. It contains a named section e.g. [fips_sect] which is
# referenced from the [provider_sect] below.
# Refer to the OpenSSL security policy for more information.
# .include fipsmodule.cnf

[openssl_init]
# providers = provider_sect

# List of providers to load
# [provider_sect]
# default = default_sect
# The fips section name should match the section name inside the
# included fipsmodule.cnf.
# fips = fips_sect

# If no providers are activated explicitly, the default one is activated implicitly.
# See man 7 OSSL_PROVIDER-default for more details.
#
# If you add a section explicitly activating any other provider(s), you most
# probably need to explicitly activate the default provider, otherwise it
# becomes unavailable in openssl.  As a consequence applications depending on
# OpenSSL may not work correctly which could lead to significant system
# problems including inability to remotely access the system.
# [default_sect]
# activate = 1


####################################################################
[ ca ]
default_ca      = CA_default            # The default ca section

####################################################################
[ CA_default ]

dir             = /ssl                  # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several certs with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = $dir/ca.crt           # The CA certificate
serial          = $dir/serial           # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/ca.key           # The private key

x509_extensions = usr_cert              # The extensions to add to the cert

# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt        = ca_default            # Subject Name options
cert_opt        = ca_default            # Certificate field options

# Extension copying option: use with caution.
# copy_extensions = copy

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions        = crl_ext

default_days    = 365                   # how long to certify for
default_crl_days= 30                    # how long before next CRL
default_md      = sha256                # use public key default MD
preserve        = no                    # keep passed DN ordering

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy          = policy_anything

# For the CA policy
[ policy_match ]
countryName             = match
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

# For the 'anything' policy
# At this point in time, you must list all acceptable 'object'
# types.
[ policy_anything ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

####################################################################
[ req ]
default_bits            = 2048
default_keyfile         = privkey.pem
distinguished_name      = req_distinguished_name
attributes              = req_attributes
x509_extensions         = v3_ca # The extensions to add to the self signed cert

# Passwords for private keys if not present they will be prompted for
# input_password = secret
# output_password = secret

# This sets a mask for permitted string types. There are several options.
# default: PrintableString, T61String, BMPString.
# pkix   : PrintableString, BMPString (PKIX recommendation before 2004)
# utf8only: only UTF8Strings (PKIX recommendation after 2004).
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
# MASK:XXXX a literal mask value.
# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings.
string_mask = utf8only

req_extensions = v3_req # The extensions to add to a certificate request

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = ID
countryName_min                 = 2
countryName_max                 = 2

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Daerah Istimewa Yogyakarta

localityName                    = Locality Name (eg, city)
localityName_default            = Sleman

0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = SMKN 2 Depok Sleman

# we can do this but it is not needed normally :-)
#1.organizationName             = Second Organization Name (eg, company)
#1.organizationName_default     = World Wide Web Pty Ltd

organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = SMKN 2 Depok Sleman

commonName                      = Common Name (e.g. server FQDN or YOUR name)
commonName_max                  = 64

emailAddress                    = Email Address
emailAddress_default            = fauzan@zxn.my.id
emailAddress_max                = 64

# SET-ex3                       = SET extension number 3

[ req_attributes ]
challengePassword               = A challenge password
challengePassword_min           = 4
challengePassword_max           = 20

unstructuredName                = An optional company name

[ usr_cert ]

# These extensions are added when 'ca' signs a request.

# This goes against PKIX guidelines but some CAs do it and some software
# requires this to avoid interpreting an end user certificate as a CA.

basicConstraints=CA:FALSE

# This is typical in keyUsage for a client certificate.
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment

# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer

# This stuff is for subjectAltName and issuerAltname.
# Import the email address.
# subjectAltName=email:copy
# An alternative to produce certificates that aren't
# deprecated according to PKIX.
# subjectAltName=email:move

# Copy subject details
# issuerAltName=issuer:copy

# This is required for TSA certificates.
# extendedKeyUsage = critical,timeStamping

[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

subjectAltName = DNS:stembayo.id,DNS:*.stembayo.id

# [ alt_names ]
# DNS.1 = stembayo.id
# DNS.2 = *.stembayo.id

[ v3_ca ]


# Extensions for a typical CA


# PKIX recommendation.

subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid:always,issuer

basicConstraints = critical,CA:true

# Key usage: this is typical for a CA certificate. However since it will
# prevent it being used as an test self-signed certificate it is best
# left out by default.
# keyUsage = cRLSign, keyCertSign

# Include email address in subject alt name: another PKIX recommendation
# subjectAltName=email:copy
# Copy issuer details
# issuerAltName=issuer:copy

# DER hex encoding of an extension: beware experts only!
# obj=DER:02:03
# Where 'obj' is a standard or added object
# You can even override a supported extension:
# basicConstraints= critical, DER:30:03:01:01:FF

[ crl_ext ]

# CRL extensions.
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.

# issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always

[ proxy_cert_ext ]
# These extensions should be added when creating a proxy certificate

# This goes against PKIX guidelines but some CAs do it and some software
# requires this to avoid interpreting an end user certificate as a CA.

basicConstraints=CA:FALSE

# This is typical in keyUsage for a client certificate.
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment

# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer

# This stuff is for subjectAltName and issuerAltname.
# Import the email address.
# subjectAltName=email:copy
# An alternative to produce certificates that aren't
# deprecated according to PKIX.
# subjectAltName=email:move

# Copy subject details
# issuerAltName=issuer:copy

# This really needs to be in place for it to be a proxy certificate.
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo

####################################################################
[ tsa ]

default_tsa = tsa_config1       # the default TSA section

[ tsa_config1 ]

# These are used by the TSA reply generation only.
dir             = ./demoCA              # TSA root directory
serial          = $dir/tsaserial        # The current serial number (mandatory)
crypto_device   = builtin               # OpenSSL engine to use for signing
signer_cert     = $dir/tsacert.pem      # The TSA signing certificate
                                        # (optional)
certs           = $dir/cacert.pem       # Certificate chain to include in reply
                                        # (optional)
signer_key      = $dir/private/tsakey.pem # The TSA private key (optional)
signer_digest  = sha256                 # Signing digest to use. (Optional)
default_policy  = tsa_policy1           # Policy if request did not specify it
                                        # (optional)
other_policies  = tsa_policy2, tsa_policy3      # acceptable policies (optional)
digests     = sha1, sha256, sha384, sha512  # Acceptable message digests (mandatory)
accuracy        = secs:1, millisecs:500, microsecs:100  # (optional)
clock_precision_digits  = 0     # number of digits after dot. (optional)
ordering                = yes   # Is ordering defined for timestamps?
                                # (optional, default: no)
tsa_name                = yes   # Must the TSA name be included in the reply?
                                # (optional, default: no)
ess_cert_id_chain       = no    # Must the ESS cert id chain be included?
                                # (optional, default: no)
ess_cert_id_alg         = sha1  # algorithm to compute certificate
                                # identifier (optional, default: sha1)

[insta] # CMP using Insta Demo CA
# Message transfer
server = pki.certificate.fi:8700
# proxy = # set this as far as needed, e.g., http://192.168.1.1:8080
# tls_use = 0
path = pkix/

# Server authentication
recipient = "/C=FI/O=Insta Demo/CN=Insta Demo CA" # or set srvcert or issuer
ignore_keyusage = 1 # potentially needed quirk
unprotected_errors = 1 # potentially needed quirk
extracertsout = insta.extracerts.pem

# Client authentication
ref = 3078 # user identification
secret = pass:insta # can be used for both client and server side

# Generic message options
cmd = ir # default operation, can be overridden on cmd line with, e.g., kur

# Certificate enrollment
subject = "/CN=openssl-cmp-test"
newkey = insta.priv.pem
out_trusted = apps/insta.ca.crt # does not include keyUsage digitalSignature
certout = insta.cert.pem

[pbm] # Password-based protection for Insta CA
# Server and client authentication
ref = $insta::ref # 3078
secret = $insta::secret # pass:insta

[signature] # Signature-based protection for Insta CA
# Server authentication
trusted = $insta::out_trusted # apps/insta.ca.crt

# Client authentication
secret = # disable PBM
key = $insta::newkey # insta.priv.pem
cert = $insta::certout # insta.cert.pem

[ir]
cmd = ir

[cr]
cmd = cr

[kur]
# Certificate update
cmd = kur
oldcert = $insta::certout # insta.cert.pem

[rr]
# Certificate revocation
cmd = rr
oldcert = $insta::certout # insta.cert.pem

openssl.cnf

Buat root ca.key

openssl genrsa -out ca.key 4096

Buat root ca.crt

openssl req -new -key ca.key -out ca.crt -config openssl.cnf -x509 -days 365

Buat sub CA key stembayo.id

 openssl genrsa -out stembayo.id.key 4096

Buat sub CA CSR stembayo.id

openssl req -new -key stembayo.id.key -out stembayo.id.csr -config openssl.cnf -extfile openssl.cnf -extensions v3_req

TTD sub CA

openssl ca -config openssl.cnf -in stembayo.id.csr 

Database (MariaDB)

Install mariadb

sudo apt update
sudo apt install -y mariadb

Secure setup mariadb
gunakan Skills39 sebagai password root

sudo mysql_secure_installation

Web Server (Nginx)

Instalasi

sudo apt update
sudo apt install -y nginx

Edit /etc/nginx/nginx.conf

# Aktifkan baris ini
server_names_hash_bucket_size 64;

/etc/nginx/nginx.conf

Virtual Host (lnx.stembayo.id)

Buat directory

 sudo mkdir -p /var/www/lnx.stembayo.id/
 sudo chown -R $USER:$USER /var/www/lnx.stembayo.id/
 sudo chmod -R 755 /var/www/lnx.stembayo.id/

Buat file index.html

 nano /var/www/lnx.stembayo.id/index.html
<html>
    <head>
        <title>LNX</title>
    </head>
    <body>
        <h1>Hello :)</h1>
    </body>
</html>

/var/www/lnx.stembayo.id/index.html

Buat virtual host

 sudo nano /etc/nginx/sites-available/lnx.stembayo.id
server {
        listen 80;
        server_name lnx.stembayo.id;

        return 301 https://$host$request_uri;
}

server {
        listen 443 ssl;
        server_name lnx.stembayo.id;
        ssl_certificate /ssl/stembayo.id/stembayo.id.pem;
        ssl_certificate_key /ssl/stembayo.id/stembayo.id.key;

        root /var/www/lnx.stembayo.id;
        index index.html;

        location / {
                try_files $uri $uri/ =404;
        }
}

/etc/nginx/sites-available/lnx.stembayo.id

Aktifkan virtual host

sudo ln -s /etc/nginx/sites-available/lnx.stembayo.id /etc/nginx/sites-enabled/

Cek konfigurasi

sudo nginx -t

Restart nginx

sudo systemctl restart nginx

Basic Auth

Install apache2-utils

sudo apt update
sudo apt install apache2-utils

Buat user baru
nama: competitor
pass: Skills39

sudo htpasswd -c /etc/nginx/.htpasswd user

Note: -c hanya digunakan saat pertama kali

Buat directory

 sudo mkdir -p /var/www/basic-auth.stembayo.id/
 sudo chown -R $USER:$USER /var/www/basic-auth.stembayo.id/
 sudo chmod -R 755 /var/www/basic-auth.stembayo.id/

Buat file index.html

 nano /var/www/basic-auth.stembayo.id/index.html
<html>
    <head>
        <title>Basic Auth</title>
    </head>
    <body>
        <h1>Basic Auth</h1>
    </body>
</html>

/var/www/basic-auth.stembayo.id/index.html

Buat virtual host (basic-auth.stembayo.id)

 sudo nano /etc/nginx/sites-available/basic-auth.stembayo.id
server {
        listen 80;
        server_name basic-auth.stembayo.id;

        return 301 https://$host$request_uri;
}

server {
        listen 443 ssl;
        server_name basic-auth.stembayo.id;
        ssl_certificate /ssl/stembayo.id/stembayo.id.pem;
        ssl_certificate_key /ssl/stembayo.id/stembayo.id.key;

        root /var/www/basic-auth.stembayo.id;
        index index.html;

        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;

        location / {
                try_files $uri $uri/ =404;
        }
}

/etc/nginx/sites-available/basic-auth.stembayo.id

Aktifkan virtual host

sudo ln -s /etc/nginx/sites-available/basic-auth.stembayo.id /etc/nginx/sites-enabled/

Cek konfigurasi

sudo nginx -t

Restart nginx

sudo systemctll restart nginx

Referensi: https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-22-04


Wordpress

...


Mail Server (Dovecot)

...


Web Mail (Roundcube)

...