Лабораторна робота 3.7
- Вимкніть 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 трафік або деякі типи пакетів

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

Якщо ваша віддалена машина в 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

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

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

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


- (Локальна машина) Виконайте команду 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

- Відновіть доступність машини для 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