Praktikum Jaringan Komputer Modul 5 Tahun 2023
Nama | NRP | Github |
---|---|---|
Dimas Fadilah Akbar | 5025211010 | https://github.com/dimss113 |
Kevin Nathanael Halim | 5025211140 | https://github.com/zetsux |
Tugas pertama, buatlah peta wilayah sesuai berikut ini:
Keterangan: Richter adalah DNS Server, Revolte adalah DHCP Server, Sein dan Stark adalah Web Server, Jumlah Host pada SchwerMountain adalah 64, Jumlah Host pada LaubHills adalah 255, Jumlah Host pada TurkRegion adalah 1022, Jumlah Host pada GrobeForest adalah 512
- Aura
auto eth0
iface eth0 inet dhcp
up /sbin/iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source $(/sbin/ip -4 a show eth0 | /bin/grep -Po 'inet \K[0-9.]*')
auto eth1
iface eth1 inet static
address 192.172.0.1
netmask 255.255.255.252
auto eth2
iface eth2 inet static
address 192.172.0.5
netmask 255.255.255.252
- Heiter
auto eth0
iface eth0 inet static
address 192.172.0.2
netmask 255.255.255.252
up echo nameserver 192.168.122.1 > /etc/resolv.conf
auto eth1
iface eth1 inet static
address 192.172.8.1
netmask 255.255.248.0
auto eth2
iface eth2 inet static
address 192.172.4.1
netmask 255.255.252.0
- Client (TurkRegion, GrobeForest, LaubHilss, SchwerMountain)
auto eth0
iface eth0 inet dhcp
- Stark
auto eth0
iface eth0 inet static
address 192.172.4.2
gateway 192.172.4.1
netmask 255.255.252.0
up echo nameserver 192.168.122.1 > /etc/resolv.conf
- Frieren
auto eth0
iface eth0 inet static
address 192.172.0.6
netmask 255.255.255.252
up echo nameserver 192.168.122.1 > /etc/resolv.conf
auto eth1
iface eth1 inet static
address 192.172.0.9
netmask 255.255.255.252
auto eth2
iface eth2 inet static
address 192.172.0.13
netmask 255.255.255.252
- Stark
auto eth0
iface eth0 inet static
address 192.172.0.10
gateway 192.172.0.9
netmask 255.255.255.252
up echo nameserver 192.168.122.1 > /etc/resolv.conf
- Himmel
auto eth0
iface eth0 inet static
address 192.172.0.14
netmask 255.255.255.252
up echo nameserver 192.168.122.1 > /etc/resolv.conf
auto eth1
iface eth1 inet static
address 192.172.2.1
netmask 255.255.254.0
auto eth2
iface eth2 inet static
address 192.172.0.129
netmask 255.255.255.128
- Fern
auto eth0
iface eth0 inet static
address 192.172.0.130
netmask 255.255.255.128
up echo nameserver 192.168.122.1 > /etc/resolv.conf
auto eth1
iface eth1 inet static
address 192.172.0.17
netmask 255.255.255.252
auto eth2
iface eth2 inet static
address 192.172.0.21
netmask 255.255.255.252
- Ritcher
auto eth0
iface eth0 inet static
address 192.172.0.18
gateway 192.172.0.17
netmask 255.255.255.252
- Revolte
auto eth0
iface eth0 inet static
address 192.172.0.22
gateway 192.172.0.21
netmask 255.255.255.252
up echo nameserver 192.168.122.1 > /etc/resolv.conf
- Subnetting Process
- Classless method untuk menentukan length netmask yang akan digunakan
- Untuk menghitung rute-rute yang diperlukan, gunakan perhitungan dengan metode VLSM. Buat juga pohonnya, dan lingkari subnet yang dilewati.
- Pembagian IP hasil dari VLSM TREE
Kemudian buatlah rute sesuai dengan pembagian IP yang kalian lakukan.
- Routing di Aura
# Routing Ke Frieren
# route add -net <NID subnet> netmask <netmask> gw <IP gateway>
# A5
route add -net 192.172.0.8 netmask 255.255.255.252 gw 192.172.0.6
# A6
route add -net 192.172.0.12 netmask 255.255.255.252 gw 192.172.0.6
# A7
route add -net 192.172.2.0 netmask 255.255.254.0 gw 192.172.0.6
# A8
route add -net 192.172.0.128 netmask 255.255.255.128 gw 192.172.0.6
# A9
route add -net 192.172.0.16 netmask 255.255.255.252 gw 192.172.0.6
# A10
route add -net 192.172.0.20 netmask 255.255.255.252 gw 192.172.0.6
# Routing ke Heiter
# A2
route add -net 192.172.8.0 netmask 255.255.248.0 gw 192.172.0.2
# A3
route add -net 192.172.4.0 netmask 255.255.252.0 gw 192.172.0.2
- Routing di Fern
# Backrouting
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.172.0.129
- Routing di Frieren
# Ke Himmel
# Backrouting
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.172.0.5
# A7
route add -net 192.172.2.0 netmask 255.255.254.0 gw 192.172.0.14
# A8
route add -net 192.172.0.128 netmask 255.255.255.128 gw 192.172.0.14
# A9
route add -net 192.172.0.16 netmask 255.255.255.252 gw 192.172.0.14
# A10
route add -net 192.172.0.20 netmask 255.255.255.252 gw 192.172.0.14
- Routing di Heiter
# Backrouting
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.172.0.1
- Routing di Himmel
# Backrouting
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.172.0.13
# A9
route add -net 192.172.0.16 netmask 255.255.255.252 gw 192.172.0.130
# A10
route add -net 192.172.0.20 netmask 255.255.255.252 gw 192.172.0.130
- Test ping hasil Routing (Dari Fern ke Heiter)
Tugas berikutnya adalah memberikan ip pada subnet SchwerMountain, LaubHills, TurkRegion, dan GrobeForest menggunakan bantuan DHCP.
- Configure DHCP Server di Revolte
apt-get update -y
apt-get install isc-dhcp-server -y
echo "
INTERFACES=\"eth0\"
" > /etc/default/isc-dhcp-server
echo "
default-lease-time 28800;
max-lease-time 57600;
ddns-update-style none;
subnet 192.172.0.20 netmask 255.255.255.252 {
option routers 192.172.0.21;
option broadcast-address 192.172.0.23;
option domain-name-servers 192.168.122.1;
}
# Turk Region
subnet 192.172.8.0 netmask 255.255.248.0 {
range 192.172.8.0 192.172.15.254;
option routers 192.172.8.1;
option broadcast-address 192.172.15.255;
option domain-name-servers 192.168.122.1;
}
# Grobe Forest
subnet 192.172.4.0 netmask 255.255.252.0 {
range 192.172.4.1 192.172.7.254;
option routers 192.172.4.1;
option broadcast-address 192.172.7.255;
option domain-name-servers 192.168.122.1;
}
# LaubHilss
subnet 192.172.2.0 netmask 255.255.254.0 {
range 192.172.2.0 192.172.3.254;
option routers 192.172.2.1;
option broadcast-address 192.172.3.255;
option domain-name-servers 192.168.122.1;
}
# SchwerMountain
subnet 192.172.0.128 netmask 255.255.255.128 {
range 192.172.0.129 192.172.0.254;
option routers 192.172.0.129;
option broadcast-address 192.172.0.255;
option domain-name-servers 192.168.122.1;
}
" > /etc/dhcp/dhcpd.conf
rm /var/run/dhcpd.pid
service isc-dhcp-server restart
service isc-dhcp-server status
- Configure DHCP Relay di Himmel dan Heiter
apt-get update
apt-get install isc-dhcp-relay -y
echo '
SERVERS="192.172.0.22"
INTERFACES="eth0 eth1 eth2"
OPTIONS=""
' > /etc/default/isc-dhcp-relay
echo '
net.ipv4.ip_forward=1
' > /etc/sysctl.conf
service isc-dhcp-relay restart
- DHPC Result LaubHilss
- DHCP Result SchwerMountain
- DHCP Result Turk Region
- DHCP Result GrobeForest
Agar topologi yang kalian buat dapat mengakses keluar, kalian diminta untuk mengkonfigurasi Aura menggunakan iptables, tetapi tidak ingin menggunakan MASQUERADE.
- Tambahkan iptables berikut pada Aura
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source $(/sbin/ip -4 a show eth0 | /bin/grep -Po 'inet \K[0-9.]*')
Tujuan dari iptables berikut yaitu untuk mengganti IP dari source packet yang akan keluar melalui interface eth0 Aura menuju keluar NAT. command $(/sbin/ip -4 a show eth0 | /bin/grep -Po 'inet \K[0-9.]*')
digunakan untuk mendapatkan IP eth0 dari router Aura.
- Test ping dengan google
Kalian diminta untuk melakukan drop semua TCP dan UDP kecuali port 8080 pada TCP.
- Configure iptables berikut pada client
iptables -F
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -j DROP
iptables -A INPUTΒ -pΒ udpΒ -jΒ DROP
- Test TCP connection menggunakan telnet dengan port selain 8080
- Test TCP connection menggunakan telnet dengan port 8080
- Test UDP connection using nc
Kepala Suku North Area meminta kalian untuk membatasi DHCP dan DNS Server hanya dapat dilakukan ping oleh maksimal 3 device secara bersamaan, selebihnya akan di drop.
- Tambahkan iptables berikut pada DHCP server dan DNS server
#No 3
iptables -F
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 3/second -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
maka hanya akan bisa di ping tiap detiknya oleh maksimal 3 node.
Lakukan pembatasan sehingga koneksi SSH pada Web Server hanya dapat dilakukan oleh masyarakat yang berada pada GrobeForest.
-
Range IP dari subnet warga GrobeForest adalah 192.172.4.1 - 192.172.7.254
-
Buat sebuah file .sh di kedua web server (Sein & Stark), sebut saja
iptables.sh
yang menyimpan script untuk menambahkan iptables rules sebagai berikut,iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.172.4.1-192.172.7.254 -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -m iprange --dst-range 192.172.4.1-192.172.7.254 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP iptables -A OUTPUT -p tcp --sport 22 -j DROP
- Yang dilakukan oleh baris ke-3 dan ke-4 adalah melakukan DROP terhadap semua request INPUT yang diarahkan ke port 22 (TCP) dan OUTPUT yang berasal dari port 22 (TCP), yaitu port default SSH
- Kemudian ditambahkan rules pada baris ke-1 dan ke-2 untuk menerima request serupa hanya bila range ip tujuan merupakan bagian dari subnet warga GrobeForest untuk INPUT dan range ip asal merupakan bagian dari subnet warga GrobeForest untuk OUTPUT
-
Setelah melakukan run pada script di atas, maka dapat dilakukan pembuktian dengan melakukan SSH dari GrobeForest ke web server sebagai berikut,
-
Note : Didapatkan response "Connection refused" dikarenakan belum terdapat service ssh yang di-enable. Untuk sekedar testing apakah ssh berhasil atau tidak sebenarnya cukup sekian, tetapi bila ingin melakukan SSH yang sebenarnya maka dapat dilakukan install terhadap
openssh-server
dan diikutiservice ssh start
.
-
Bila dilakukan dari warga dari subnet client lain, maka akan sebagai berikut
Selain itu, akses menuju WebServer hanya diperbolehkan saat jam kerja yaitu Senin-Jumat pada pukul 08.00-16.00.
Pada iptables.sh
di kedua web server (Sein & Stark), tambahkan script untuk menambahkan iptables rules di atas script untuk no. 4 sebagai berikut,
iptables -A INPUT -m time --weekdays Sat,Sun -j DROP
iptables -A INPUT -p all -m time --timestart 16:00 --timestop 23:59:59 -j DROP
iptables -A INPUT -p all -m time --timestart 00:00 --timestop 08:00 -j DROP
- Baris ke-2 dan ke-3 melakukan DROP terhadap semua request INPUT di luar dari range waktu yang diinginkan (08:00 - 16:00), yakni sebelum jam 8 pagi (00:00 - 08:00) dan sesudah jam 4 sore (16:00 - 23:59:59)
- Baris ke-1 melakukan DROP terhadap semua request INPUT di luar hari kerja (Senin - Jumat), yakni pada hari Sabtu dan Minggu
-
Sebelum itu perlu dipastikan waktu terkini dengan command
date
, hasilnya sebagai berikut,
-
Karena waktu masih masuk di hari kerja dan jam kerja, maka waktu harus diatur terlebih dahulu ke hari lain. Untuk membuktikan di hari weekend maka waktu diset ke hari Minggu pukul 10:00 menggunakan command
date -s "17 dec 2023 10:00"
. Bila dilakukan tes dengan ping pada Sein diperoleh hasil sebagai berikut, -
Untuk pembuktian jam kerja, maka waktu diatur ke hari kerja dengan jam di luar jam kerja dengan command
date -s "18 dec 2023 20:00"
. Bila dilakukan tes dengan ping pada Stark diperoleh hasil sebagai berikut,
Lalu, karena ternyata terdapat beberapa waktu di mana network administrator dari WebServer tidak bisa stand by, sehingga perlu ditambahkan rule bahwa akses pada hari Senin - Kamis pada jam 12.00 - 13.00 dilarang (istirahat maksi cuy) dan akses di hari Jumat pada jam 11.00 - 13.00 juga dilarang (maklum, Jumatan rek).
Pada iptables.sh
di kedua web server (Sein & Stark), tambahkan script untuk menambahkan iptables rules di atas script untuk no. 5 sebagai berikut,
iptables -A INPUT -m time --timestart 12:00 --timestop 13:00 --weekdays Mon,Tue,Wed,Thu -j DROP
iptables -A INPUT -m time --timestart 11:00 --timestop 13:00 --weekdays Fri -j DROP
- Baris ke-1 melakukan DROP terhadap semua request INPUT di hari Senin - Kamis pada jam makan siang (12:00 - 13:00)
- Baris ke-2 melakukan DROP terhadap semua request INPUT di hari Jumat pada jam jumatan (11:00 - 13:00)
-
Untuk pembuktian di jam makan siang, maka waktu diset ke hari Senin pukul 12:30 menggunakan command
date -s "18 dec 2023 12:30"
. Bila dilakukan tes dengan ping pada Sein diperoleh hasil sebagai berikut, -
Untuk pembuktian di jam jumatan, maka waktu diatur ke hari Jumat pada jam 12:30 dengan command
date -s "15 dec 2023 12:30"
. Bila dilakukan tes dengan ping pada Stark diperoleh hasil sebagai berikut,
Karena terdapat 2 WebServer, kalian diminta agar setiap client yang mengakses Sein dengan Port 80 akan didistribusikan secara bergantian pada Sein dan Stark secara berurutan dan request dari client yang mengakses Stark dengan port 443 akan didistribusikan secara bergantian pada Sein dan Stark secara berurutan.
Pada iptables.sh
di router-router yang berkaitan dengan client (Heiter & Himmel), tambahkan script untuk menambahkan iptables rules sebagai berikut,
iptables -A PREROUTING -t nat -p tcp --dport 80 -d 192.172.4.2 -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 192.172.0.10:80
iptables -A PREROUTING -t nat -p tcp --dport 443 -d 192.172.0.10 -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 192.172.4.2:443
- Baris ke-1 melakukan pengalihan request yang diarahkan ke IP Sein (192.172.4.2) pada port 80 agar secara bergantian diarahkan kesana dan juga ke Stark (192.172.0.10) pada port yang sama
- Baris ke-2 melakukan pengalihan request yang diarahkan ke IP Stark (192.172.0.10) pada port 443 agar secara bergantian diarahkan kesana dan juga ke Sein (192.172.4.2) pada port yang sama
-
Sebelum pembuktian lakukan instalasi
netcat
pada semua web server dan client -
Untuk pembuktian di port 80, kita bisa jalankan script
while true; do nc -l -p 80 -c 'echo "stark"'; done
pada Stark dan scriptwhile true; do nc -l -p 80 -c 'echo "sein"'; done
pada Sein. Bila dilakukan tes dengannc 192.172.4.2 80
pada client (sebagai contoh digunakan LaubHills, TurkRegion, dan SchwerMountain) dan akan diperoleh hasil sebagai berikut, -
Untuk pembuktian di port 443, kita bisa jalankan script
while true; do nc -l -p 443 -c 'echo "stark"'; done
pada Stark dan scriptwhile true; do nc -l -p 443 -c 'echo "sein"'; done
pada Sein. Bila dilakukan tes dengannc 192.172.0.10 443
pada client (sebagai contoh digunakan LaubHills dan TurkRegion) dan akan diperoleh hasil sebagai berikut,
Karena berbeda koalisi politik, maka subnet dengan masyarakat yang berada pada Revolte dilarang keras mengakses WebServer hingga masa pencoblosan pemilu kepala suku 2024 berakhir. Masa pemilu (hingga pemungutan dan penghitungan suara selesai) kepala suku bersamaan dengan masa pemilu Presiden dan Wakil Presiden Indonesia 2024.
Pada iptables.sh
di kedua web server (Sein & Stark), tambahkan script untuk menambahkan iptables rules di atas script untuk no. 6 sebagai berikut,
iptables -A INPUT -m time --datestart "2023-10-19T00:00:00" --datestop "2024-6-28T00:00:00" -m iprange --src-range 192.172.0.21-192.172.0.24 -j DROP
- Melakukan DROP terhadap semua request INPUT selama masa pemilu yakni diawali dari tanggal 19 November 2023 pukul 00:00 hingga tanggal 28 Juni 2024 pukul 00:00 (tanggal selesai perhitungan suara putaran kedua) untuk IP yang adalah bagian dari subnet Revolte yakni di antara 192.172.0.21 - 192.172.0.24
-
Untuk pembuktian, maka waktu diset ke hari Jumat, 15 Desember 2023 pada pukul 10:00 menggunakan command `date -s "15 dec 2023 10:00" Bila dilakukan tes dengan ping dari Revolte pada Stark & Sein diperoleh hasil sebagai berikut,
Sadar akan adanya potensial saling serang antar kubu politik, maka WebServer harus dapat secara otomatis memblokir alamat IP yang melakukan scanning port dalam jumlah banyak (maksimal 20 scan port) di dalam selang waktu 10 menit. (clue: test dengan nmap)
Pada iptables.sh
di kedua web server (Sein & Stark), tambahkan script untuk menambahkan iptables rules di antara script no. 4 dan 5 sebagai berikut,
iptables -N PORTSCAN
iptables -A INPUT -m recent --name portscan --update --seconds 600 --hitcount 20 -j DROP
iptables -A FORWARD -m recent --name portscan --update --seconds 600 --hitcount 20 -j DROP
iptables -A INPUT -m recent --name portscan --set -j ACCEPT
iptables -A FORWARD -m recent --name portscan --set -j ACCEPT
- Melakukan DROP terhadap IP yang melakukan portscan / request INPUT maupun FORWARD lebih dari 20x hit dalam waktu 10 menit
-
Untuk pembuktian, sebenarnya dapat dilakukan dengan
nmap
. Akan tetapi, akan lebih cepat bila menggunakan ping seperti biasa dan dilihat apakah setelah 20x ping masih dapat berjalan atau tidak. Contohnya dilakukan dari GrobeForest sebagai berikut,
Karena kepala suku ingin tau paket apa saja yang di-drop, maka di setiap node server dan router ditambahkan logging paket yang di-drop dengan standard syslog level.
Pada iptables.sh
di semua router dan server, tambahkan script untuk menambahkan iptables rules di atas script untuk no. 6 sebagai berikut,
service rsyslog restart
iptables -A INPUT -j LOG --log-prefix "Dropped: " --log-level debug -m limit --limit 1/second
- Baris ke-2 melakukan logging setiap kali terdapat input dengan prefix Dropped yang menggunakan log level debug dengan limit 1 per detik
- Baris ke-1 menyalakan service rsyslog yang diperlukan untuk proses logging pada
/var/log/syslog