• Вимкніть DHCP на інтерфейсі і налаштуйте IP-адресу вручну за допомогою iproute2. Детально задокументуйте, що саме ви зробили.
sudo sed 's/dhcp4: true/dhcp4: false/' 50-cloud-init.yaml
sudo netplan apply
sudo ip addr add 192.168.130.10/24 dev enp0s8
sudo ip route add default via 192.168.130.1
  • Вимкніть а потім увімкніть назад інтерфейс.
sudo ip link set enp8s0 down
sudo ip link set enp8s0 up
Додамо DNS шоб запрацював інтернет і могли далі встановити network-manager
echo "nameserver 192.168.128.1" | sudo tee -a /etc/resolv.conf
  • Встановіть network-manager. Змініть мережеві налаштування комп’ютера таким чином, щоб могти оперувати вибраним інтерфейсом за допомогою NetworkManager. Подальші дії виконуйте з допомогою nmcli
sudo apt update && sudo apt install network-manager -y
sudo ip addr del 192.168.130.10 dev enp0s8
  • Увімкніть dhcp на інтерфейсі
sudo nmcli dev set enp8s0 managed yes
nmcli dev con enp0s8
sudo systemctl restart NetworkManager
  • Вимкніть і увімкніть назад інтерфейс
nmcli dev dis enp8s0
nmcli dev con enp8s0
  • Встановіть iptables. Поки його не налаштовуйте.
sudo iptables -L #Перевірив, вже встановлено
  • Підготуйте віддалену машину. Вам знадобиться Ubuntu або Debian. Віддалена машина може бути як вашим другим комп’ютером, так і інстансом в AWS. Для цілей цієї роботи принципової різниці немає, аби лише дві машини могли поговорити одна з одною.

  • Згенеруйте на локальній машині ключ ed25519 для доступу до віддаленої по SSH

ssh-keygen -t ed25519 -C "time-to-test"
  • Підключіться до віддаленої машини і додайте щойно згенерований ключ у список дозволених для вашого користувача (вручну). Відключіться від віддаленої машини.
cat ~/.ssh/id_ed25519.pub | ssh user@serv2.local "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
  • Створіть налаштування в ssh_config, щоб автоматично підключатись до віддаленої машини з використанням цього свіжоствореного ключа. Підключіться до віддаленої машини, подальші завдання виконуйте на ній, якщо не вказано інше.
echo -e "\nHost serv2 serv2.local \nHostName serv2.local \nPort 22 \nForwardAgent Yes \nIdentityFile ~/.ssh/id_ed25519.pub \nUser user" >> ~/.ssh/config

Встановіть ufw і налаштуйте його з наступними правилами:

  • Дозвольте доступ до портів 22,80,443,4422,5201 для локальної машини по IP-адресі. (Можете використати curl canhazip.com з локальної машини щоб дізнатись свою публічну адресу)
for port in {22,80,443,4422,5201}; do sudo ufw allow from 192.168.130.2 to any port $port proto tcp; done
  • Дозвольте доступ до портів 80 та 443 звідусюди.
for port in {80,443}; do sudo ufw allow from any to any port $port proto tcp; done
  • Дозвольте вхідні запити по протоколу icmp звідусюди Вхідні icmp запити в ufw за замовчуванням дозволені, навіть при повністю закритому файрволі. В файлі **/etc/ufw/before.rules** можемо заблокувати весь icmp трафік або деякі типи пакетів

img

  • Решту заблокуйте
sudo ufw deny from any to any

img

  • Якщо ваша віддалена машина в AWS, після налаштування ufw встановіть на неї більш поблажливу security group. Оскільки машина вже має налаштований фаєрволл, ми можемо собі дозволити навіть дозволити все звідусюди.

  • Змініть налаштування ssh-сервера:

sudo nano /etc/sshd_config

або черз sed

sudo sed -r 's/\#?PermitRootLogin\s(yes|no)/PermitRootLogin no/' sshd_config
  • Заборона входу як root PermitRootLogin no
  • Заборона парольної автентифікації PasswordAuthentication no
  • Встановіть ліміт спроб входу на 5 MaxAuthTries 5
  • Встановіть час заборони при перевищенні ліміту на годину LoginGraceTime 60m
  • Змініть порт на 4422 Port 4422
  • (не забудьте перезапустити сервіс після зміни налаштувань)
sudo systemctl daemon-reload
sudo systemctl restart ssh 
  • (Локальна машина) Оновіть налаштування в ssh_config з врахуванням змін, які ви зробили на стороні сервера. sudo nano ~/.ssh/config Port 4422
  • (Локальна машина) В iptables створіть правило на вихідні підключення, яке б забороняло підключення до портів tcp 22 віддалених машин. Зробіть це правило постійним.
sudo iptables --append OUTPUT --protocol tcp --dport 22 --jump DROP
sudo iptables-save > /etc/iptables/rules.v4
sudo nano /etc/systemd/system/iptables-restore.service
[Unit]
Description=Restore iptables firewall rules
Before=network.target
Conflicts=shutdown.target
DefaultDependencies=no

[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables/rules.v4

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable iptables-restore.service
sudo systemctl start iptables-restore.service
  • (Локальна машина) Перепідключіться до віддаленої машини з новими налаштуваннями.

  • Встановіть пакет iperf3

sudo apt update && sudo apt install iperf3
  • Запустіть iperf3 в режимі сервера
iperf3 -s
  • Виміряйте швидкість між локальною машиною і віддаленою
iperf3 -c serv2.local -R

img

  • Зробіть ще одне підключення до віддаленої машини з локальної. При запущеному iperf3 перевірте командою ss які сервіси використовують які порти.

    img

  • Встановіть apache2

sudo apt install apach2
  • (Локальна машина) Зробіть трасування маршруту до віддаленої машини. Перші 2-3 рядки можете приховати з міркувань приватності.

![img](attachments/Captures 12.06.2024 20_47_41.png)

[!tip]+ Ping до serv2 проходить, а traceroute без вказання протоколу (-I або T) відкидяється файрволом, так як за замовчуванням він працює по UDP

  • (Локальна машина) За допомогою telnet перегляньте банери OpenSSH та apache на віддаленій машині.

img

img

  • (Локальна машина) Виконайте команду ping до віддаленої машини. Залиште її виконуватись у окремому вікні.
ping serv2.local
  • Засобами фаєрвола зробіть так, щоб машина перестала відповідати на ping. Переконайтесь в успішності налаштувань за допомогою вікна з ping з попереднього завдання.

    sudo nano /etc/ufw/before.rules Міняєм ACCEPT на DROP sudo ufw reload

-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

img

  • Відновіть доступність машини для ping.
    sudo nano /etc/ufw/before.rules Міняєм DROP на ACCEPT sudo ufw reload

Завдання з зірочкою (опціональні)

  • Налаштуйте правило ufw, яке б дозволяло звідусюди лише запити ICMP ECHO і відповіді на них, а інші типи пакетів протоколу ICMP відкидало. Редагуєм файл /etc/ufw/before.rules
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT