Skip to content
10 changes: 6 additions & 4 deletions projects/bash_networking_security/SOLUTION
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
Local DNS Server IP
-------------------
<ip-here>
127.0.0.53



Default gateway IP
-------------------
<ip-here>
10.0.0.1



DHCP IP allocation sys-logs
-------------------
<logs-here>

Jun 16 10:33:39 ip-10-0-0-70 dhclient[339]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0xc72e421b)
Jun 16 10:33:39 ip-10-0-0-70 dhclient[339]: DHCPOFFER of 10.0.0.70 from 10.0.0.1
Jun 16 10:33:39 ip-10-0-0-70 dhclient[339]: DHCPREQUEST for 10.0.0.70 on eth0 to 255.255.255.255 port 67 (xid=0x1b422ec7)
Jun 16 10:33:39 ip-10-0-0-70 dhclient[339]: DHCPACK of 10.0.0.70 from 10.0.0.1 (xid=0xc72e421b)
21 changes: 20 additions & 1 deletion projects/bash_networking_security/bastion_connect.sh
Original file line number Diff line number Diff line change
@@ -1 +1,20 @@
#!/bin/bash
if [[ -z "$KEY_PATH" ]]; then
echo "KEY_PATH environment variable is not set!"
exit 5
fi

if [[ $# -lt 1 ]]; then
echo "KEY_PATH env var is expected"
echo "Please provide Public Instance (Bastion) IP address"
exit 5
fi

public_ip=$1
private_ip=$2
command="${@:3}"

if [[ -n "$private_ip" ]]; then
ssh -t -i "$KEY_PATH" ubuntu@"$public_ip" ssh -i "new_key" ubuntu@"$private_ip" "$command"
else
ssh -i "$KEY_PATH" ubuntu@"$public_ip" "$command"
fi
50 changes: 50 additions & 0 deletions projects/bash_networking_security/tlsHandshake.sh
Original file line number Diff line number Diff line change
@@ -1 +1,51 @@
#!/bin/bash

IPADDRESS=54.177.20.188 || $PUBLIC_EC2_IP || $1
# Step 1: Client Hello
client_hello=$(curl -s -X POST -H "Content-Type: application/json" -d '{
"version": "1.3",
"ciphersSuites": [
"TLS_AES_128_GCM_SHA256",
"TLS_CHACHA20_POLY1305_SHA256"
],
"message": "Client Hello"
}' http://$IPADDRESS:8080/clienthello)

# Step 2: Server Hello
version=$(echo "$client_hello" | jq -r '.version')
cipher_suite=$(echo "$client_hello" | jq -r '.cipherSuite')
session_id=$(echo "$client_hello" | jq -r '.sessionID')
server_cert=$(echo "$client_hello" | jq -r '.serverCert')

# Step 3: Server Certificate Verification
wget -q https://devops-feb23.s3.eu-north-1.amazonaws.com/cert-ca-aws.pem
openssl verify -CAfile cert-ca-aws.pem <<< "$server_cert"
verification_result=$?

if [ $verification_result -ne 0 ]; then
echo "Server Certificate is invalid."
exit 5
fi

# Step 4: Client-Server master-key exchange
master_key=$(openssl rand -base64 32)
encrypted_master_key=$(echo "$master_key" | openssl smime -encrypt -aes-256-cbc -binary -outform DER cert.pem | base64 -w 0)

# Step 5: Server verification message
server_verification_msg=$(curl -s -X POST -H "Content-Type: application/json" -d '{
"sessionID": "'"$session_id"'",
"masterKey": "'"$encrypted_master_key"'",
"sampleMessage": "Hi server, please encrypt me and send to client!"
}' http://$IPADDRESS:8080/keyexchange)

encrypted_sample_msg=$(echo "$server_verification_msg" | jq -r '.encryptedSampleMessage')

# Step 6: Client verification message
decrypted_sample_msg=$(echo "$encrypted_sample_msg" | base64 -d | openssl enc -d -aes-256-cbc -pbkdf2 -pass pass:"$master_key" -md sha256)

if [ "$decrypted_sample_msg" != "Hi server, please encrypt me and send to client!" ]; then
echo "Server symmetric encryption using the exchanged master-key has failed."
exit 6
fi

echo "Client-Server TLS handshake has been completed successfully"
8 changes: 4 additions & 4 deletions projects/bash_networking_security/vpc.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
REGION=""
VPC_ID=""
PUBLIC_INSTANCE_ID=""
PRIVATE_INSTANCE_ID=""
REGION="us-west-1"
VPC_ID="vpc-0c91212efdc6acbb2"
PUBLIC_INSTANCE_ID="i-0944d11fa7dcc79dd"
PRIVATE_INSTANCE_ID="i-0af45a43d1bcdaf7d"