Съдържание:

Защитна стена на Raspberry Pi4: 12 стъпки
Защитна стена на Raspberry Pi4: 12 стъпки

Видео: Защитна стена на Raspberry Pi4: 12 стъпки

Видео: Защитна стена на Raspberry Pi4: 12 стъпки
Видео: Raspberry Pi - Какие трудности ждут? Где можно запороться? Прокатит ли на Изи? 2024, Юни
Anonim
Защитна стена на Raspberry Pi4
Защитна стена на Raspberry Pi4

С току-що пуснатия нов Raspbery Pi 4 (RPi4) реших да си направя защитна стена за домашна употреба. След като се спънах из интернет, намерих страхотна статия по темата от Гийом Кадуш (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). Статията е невероятна и трябва да я прочетете, преди да продължите напред-това ще улесни описания тук процес. Работата е там, че тази статия е написана през 2012 г. и се основава на дистрибуцията ArchLinux. Нищо против ArchLinux, но исках да направя това с помощта на по -разпространената конструкция на Raspbian. RPi4 може да се справи с изискванията за обработка. Така че, благодаря, Гийом, за вдъхновението !! Тази инструкция ще се позовава на първоначалната публикация на Гийом ("GK" за кратко), вероятно ще искате да имате отворени и двете страници в браузъра си.

Няколко ключови неща за моята защитна стена:

  • Имам вградения Ethernet жак (eth0) към LAN
  • ISP рутерът е на адаптера TRENDnet (eth1)
  • Деактивирах безжичния адаптер (wlan0)
  • Това не е гарантирано, че ще ви отведе 100%… надявам се поне 99%:) така че, моля, изпратете отзиви/коментари
  • Това е първата ми инструкция. Съжалявам за всичко, което не спазва съответните инструкционни норми.

Сега нека се забавляваме…

Консумативи

  • Малина Пи 4

    • Използвах версията с 4 GB, не се колебайте да опитате друга версия
    • Калъф (харесвам FLIRC, но това е твоят призив)
    • Захранващ адаптер
  • MicroSD карта, 32GB или по -голяма (използвах 64GB карта)
  • TRENDnet USB3.0 Gigabit Ethernet Dongle (Модел: TU3-ETG)
  • Няколко мрежови кабела RJ45
  • USB клавиатура и мишка
  • Кабел Micro-HDMI към HDMI (включен в HDMI монитор)

Тази клавиатура, видео и мишка могат да бъдат премахнати, след като успеете да стартирате SSH и VNC.

Стъпка 1: Първоначална настройка на RPi

Първоначална настройка на RPi
Първоначална настройка на RPi

Първото нещо, което трябва да направите, е да стартирате вашия RPi4 като нова система. Изтеглете и инсталирайте пълната дистрибуция на Raspbian (Raspbian Buster с десктоп и препоръчителен софтуер). Ще трябва да рестартирате няколко пъти, за да може да се разшири и да се възползва от пълната MicroSD карта.

Докато се зарежда, ще трябва да отговорите на въпроси относно местоположението, мрежата, клавиатурата и мишката. Свържете се с мрежа и я оставете да се актуализира.

Нека също така потвърдим, че всичко е актуализирано правилно и ще получим няколко помощни програми, които могат да помогнат за отстраняване на грешки по -късно:

$ sudo apt-get update

$ sudo apt-get dist-upgrade $ sudo apt-get install htop $ sudo apt-get install tcpdump

НЕ инсталирах vim, нито някоя от стъпка 8 на GK (конфигуриране на vim). Току -що използвах редактора vi, тъй като така или иначе има повечето от тези функции. Това също спести известно време и усилия.

След като това приключи, нека настроим RPi4 така, че да можем да включим монитора с гореща връзка. Целта ми беше да го накарам да работи без глава, но ако трябва да включа монитор, той ще бъде разпознат.

$ sudo vi /boot/config.txt

В този файл:

разкоментирайте (премахнете предния #-символ): hdmi_force_hotplug = 1

разкоментирайте: hdmi_drive = 2

по желание добавете: enable_hdmi_sound

Стъпка 2: Работа в мрежа

Работа в мрежа
Работа в мрежа
Работа в мрежа
Работа в мрежа

Ако следвате сайта на GK, това е стъпка 3. Но имайте предвид, че не следвах много от първите му стъпки в точен ред.

Когато за първи път стартирах това, свързах RPi директно към моя ISP рутер („до съществуващата ми мрежа“). Това ми позволи да играя с конфигурацията, без да засягам мрежата. Свържете вградения RPi4 RJ45 към вашия рутер (или безжичен, ако искате). С Raspbian най -лесният начин да направите това е да използвате GUI. От работния плот щракнете върху Raspberry Icon> Preferences> Raspberry Pi Configuration. Не забравяйте да активирате SSH и VNC. Това ще инсталира клиента на сървъра Real-VNC. Открих, че ако се опитате да се свържете с клиента Tight VNC, това ще доведе до припадъци и ще изисква допълнителна конфигурация. Така че, в този момент инсталирайте клиента Real-VNC на основния си работен плот/лаптоп (не на вашия RPi4).

SSH няма да работи извън кутията (стъпка 7 на GK). Трябва да променим някои конфигурации. Първо, нека променим конфигурационния файл ssh. Ето промените, които направих. Имайте предвид, че тук не съм изучавал въздействието на всяка промяна. Направих това, което предложи сайтът на GK. Някои от тези промени може НЕ да са необходими.

$ sudo vi/etc/ssh/sshd_config

В този файл разкомментирайте следните редове:

HostKey/etc/ssh/ssh_host_rsa_keyHostKey/etc/ssh/ssh_host_ecdsa_keySyslogFacility AUTHLogLevel INFOStrictModes yesPubkeyAuthentication yesHostBasedAuthentication не

Игнорирай Rhosts да

PrintMotd noPrintLastLog даTCPKeepAlive да

И добавете следните редове:

Протокол 2UsePrivilegeSeparation yesKeyRegenerationInterval 3600ServerKeyBits 768RSAAuthentcation yesRhostsRSAAuthentication не

И променете следните редове:

Порт 15507LoginGraceTime 60PermitRootLogin no

Нека бързо поговорим за тази първа промяна … порт 15507. SSH обикновено работи на порт 22. GK го премести на 15507-не знам защо. Можете да го промените така или иначе … Ако решите да го промените, ще трябва да добавите „-p 15507“към всяка SSH команда, с която се опитвате да се свържете. Ако решите да го пропуснете, внимавайте за другите места, които 15507 е споменат в тези инструкции, и ги игнорирайте, особено правилата на защитната стена!

И накрая за тази стъпка, нека да получим IP адреса на RPi4, за да знаем към какво да се свържем:

$ ipconfig -a

Намерете активната мрежова връзка (вероятно на eth0 или wlan0) и запишете този IP адрес. Сега имате всичко необходимо за дистанционно свързване към RPi4. Нека рестартираме, преди да продължим:

$ sudo рестартиране

Стъпка 3: Друг потребител

Друг потребител
Друг потребител

Най -добре е да не използвате потребителското потребителско име по подразбиране (pi) и със сигурност трябва да промените паролата. За да бъдем сигурни, нека добавим друг потребителски акаунт, който можете да използвате за дистанционно свързване и продължаване с него (стъпка 6 на GK). Обратно на RPi, нека добавим нов потребител и зададем разрешения за потребителя към SSH и издадем командата sudo:

$ sudo useradd -m -g потребители -G sudo, netdev -s /bin /bash [USERNAME]

$ sudo passwd [USERNAME]

Чувствайте се свободни да излезете или да рестартирате и да използвате този новосъздаден акаунт занапред.

Стъпка 4: Syctl файл

Syctl файл
Syctl файл

Следващата стъпка е да промените файла /etc/sysctl.conf (стъпка 9 на GK). Този файл се използва за промяна на няколко настройки на ядрото. Ще направим точно това, което GK казва да прави. Ето опростен набор от стъпки.

$ sudo vi /etc/sysctl.conf

В този файл разкомментирайте следните редове:

net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.all.rp_filter = 1net.ipv4.tcp_syncookies = 1

net.ipv4.ip_forward = 1

net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.all.accept_source_route = 0net.ipv4.conf.all.log_martians = 1

И добавете следните редове:

net.ipv4.icmp_echo_ignore_broadcasts = 1net.ipv4.icmp_ignore_bogus_error_responses = 1net.ipv4.conf.eth0.accept_redirects = 0vm.min_free_kbytes = 8192

Рестартирайте услугата с тези нови настройки и рестартирайте:

$ sudo sysctl -p

$ sudo рестартиране

Стъпка 5: DHCP и DNS (част 1)

DHCP и DNS (част 1)
DHCP и DNS (част 1)

За мен имаше две болезнени части в този процес … Настройване на DHCP и DNS и настройка на правилата на защитната стена. И така, започваме с първата част. Ако следвате сайта на GK, ние сме на стъпка 10.

За да направите това, ще ви трябват няколко части от вашия ISP рутер (или текуща защитна стена):

  • Вътрешният IP адрес на рутера
  • IP адрес, който можете да използвате за интерфейса на RPi4 към рутера
  • IP адресите за сървър на имена (или два)
  • Името на интерфейса за LAN връзка (напр. Eth0 или eth1)
  • Името на интерфейса за ISP връзката (например каквото и да не сте използвали за LAN)

Може също да се наложи да промените настройките на рутера, за да дадете на RPi4 статичен IP адрес (точка 2, по -горе). Поне аз така направих.

Първо, нека променим файла dhcpcd.conf …

$ sudo vi /etc/dhcpcd.conf

Декомментирайте тези редове:

persistentoption quick_commitoption сървъри на име_на_домейн, име на домейн, търсене на домейн, име_на_хост опция интерфейс_mtu

За всеки мрежов интерфейс трябва да зададете подробности за мрежата. Те трябва да изглеждат така:

# Статично за интерфейса към ISP

интерфейс eth1 static ip_address = 192.168.1.static routers = 192.168.1.254 static domain_name_servers = 8.8.8.8 8.8.4.4 metric 100 # Статично за интерфейса към LAN интерфейса eth0 static ip_address = 10.210.212.static routers = 10.210.212.1 static domain_name_servers = 8.8.8.8 8.8.4.4 #interface wlan0 #static ip_address = 10.210.212. #static routers = 10.210.212.1 #static domain_name_servers = 8.8.8.8 #Декомментирайте този раздел, ако искате да принудите IP адрес на устройство. Името след „хост“#е безсмислено за системата. Въведете MAC адреса на устройството, както и желания #IP адрес. Уверете се, че е извън диапазона dhcp. Повторете, ако е необходимо. # хост [НИЩО] { # хардуерен Ethernet xx: xx: xx: xx: xx: xx; # фиксиран адрес 10.210.212.250; #}

Не забравяйте да използвате номера, които работят за вас. Горните IP адреси са за моята мрежа, с изключение на сървърите за имена, които са Google. Забележете, че също така зададох показателя за ISP на 100, за да принудя това да бъде първият опит по подразбиране за мрежовия трафик. Също така не направих нищо с безжичния си адаптер (wlan0). Възнамерявам напълно да изключа този интерфейс, така че за мен имаше смисъл.

Също така, ако искате да принудите IP адрес на устройство (като NAS), използвайте тази долна секция. Дайте на хоста име, което има значение за вас, но знайте, че никога не се използва от нищо. Не забравяйте точките и запетаите.

Стъпка 6: DHCP и DNS (част 2)

DHCP и DNS (част 2)
DHCP и DNS (част 2)

Следващата стъпка е да промените файла dnsmasq.conf …

$ sudo vi /etc/dnsmasq.conf

Трябва да декомментираме няколко реда и да редактираме няколко реда. Също така ще трябва да копирате няколко настройки от файла dhcpcd.conf. Два други въпроса, на които трябва да отговорите сами са:

Нуждае ли се вътрешната LAN (напр. Eth0) от DHCP и DNS? Какъв DHCP диапазон искате за вашата LAN и колко дълго трябва да бъде всеки лизинг?

Започнете, като декомментирате няколко реда:

фалшив-privno-dhcp-интерфейс = wlan0bind-интерфейси dhcp-име-съвпадение = набор: wpad-ignore, wpaddhcp-ignore-names = tag: wpad-ignore

Задайте вашия сървър за имена. Потърсете реда, който започва „server =“и го направете нещо като „server = 8.8.8.8“.

Задайте своя DHCP диапазон. Има много начини да направите това. Избрах да предоставя двата IP адреса на крайната точка, маската и продължителността на лизинга. Обхватът ми беше 10.210.212.20-10.210.212.240, с маска на мрежата 255.255.255.0 и време за наем от 12 часа. Препоръчвам ви да оставите някои IP адреси в горната и долната част на диапазона си, в случай че някога се наложи да дадете на нещо статичен IP адрес.

Задайте интерфейса, който ще получава DNS и DHCP (LAN), като промените реда „interface =“да бъде нещо като „interface = eth0). Забележете, че специално съм му казал да НЕ присвоява DHCP IP адрес на безжичната си мрежа. Отново възнамерявам да изключа напълно този интерфейс, така че за мен имаше смисъл.

Стъпка 7: DHCP и DNS (част 3)

DHCP и DNS (част 3)
DHCP и DNS (част 3)

Отклонение от инструкциите на GK за тази последна стъпка …

Когато отидох да рестартирам моя RPi в този момент, процесът dnsmasq не беше активен. Порових се малко и открих, че мрежовите ми интерфейси eth0 и eth1 не са били активни преди стартирането на dnsmasq, така че dnsmasq ще се провали при стартиране. Ще трябва да свържа клавиатура и мишка към RPi и ръчно да рестартирам dnsmasq. Това не е идеално с безглавна настройка. Прочетох куп публикации, в които се казва, че се правят различни промени в настройките (например деактивиране на интерфейса за свързване) и други неща. Нищо от това не работи. В крайна сметка реших просто да напиша скрипт на черупка, който да се изпълнява на всеки 2 минути и да проверя състоянието на dnsmasq. Ако не работи, стартирайте го. Предполагам, че тази ситуация не е уникална само за мен. И така, ето какво трябва да направите:

Направете следния код във файл, наречен 'dns_masq_keepalive.sh' на вашия RPi.

#!/bin/bash

# Файл: dns_masq_keepalive.sh # август 2019 г. # Използвайте това с crontab -e (*/2 * * * * /etc/dns_masq_keepalive.sh), за да се уверите, че dnsmasq работи. Услугата ще спре сама, ако # всички интерфейси, споменати в dhcpcd.conf, не са активирани преди да започне. Това решава проблема. # Този следващ ред ще върне всички активни работни места с думата „dnsmasq“в тях. Така че, не включвайте „dnsmasq“в името на този # файл, в противен случай той ще го връща всеки път и никога няма да имате рестартиране. dns_running = $ (ps -e | grep dnsmasq) echo $ dns_running if [-z "$ dns_running"] след това #echo Няма DNSMasq sudo /etc/init.d/dnsmasq рестартиране #else #echo DNSMasq Изпълнение на fi

Изрежете го и го поставете, ако е необходимо. Каквото и да правите, не включвайте „dnsmasq“в името. Скриптът търси думата „dnsmasq“и ако скриптът я има в името, ще приеме, че услугата работи. Също така преименувайте файла, така че да завършва с '.sh'. Ненарушимите не ми позволяват да кача '.sh' файл-което е добре. Останалите инструкции предполагат, че файлът съществува на адрес: /etc/dns_masq_keepalive.sh.

Второ, задайте разрешения за файла, така че да може да се изпълнява:

$ sudo chmod u+x /etc/dns_masq_keepalive.sh

Сега ще използваме системата crontab, за да накараме програмата да се изпълнява на всеки 2 минути всеки ден. Стартирайте crontab:

$ sudo crontab -e

Трябва да ви подкани да редактирате с помощта на vi или нещо друго. Всеки ще работи. След като можете да го редактирате, добавете следното в края на файла:

*/2 * * * * sudo /etc/dns_masq_keepalive.sh

Няма интервали в „*/2“, но интервали между звездичките. Запазете и излезте. Трябва да ви каже, че работата е насрочена или нещо подобно.

Стъпка 8: Защитната стена

Защитната стена
Защитната стена

Следващият болезнен процес е защитната стена (стъпка 11 на GK). Raspbian използва добре известната система iptables. Блогът на GK предоставя три файла, които да ви помогнат да стигнете до там … firewall.simple, firewall.advanced и firewall.flows. С уважение към GK, но улеснете себе си и просто отидете с firewall.simple. Прекарах много време в опити да разбера системата и правилата на iptables. Радвам се, че го направих, но беше болезнено. И така, давам ви приложените два файла, които да ви помогнат … firewall.simple и firewall.clear. Копирайте двата файла в папката си /etc и променете разрешенията, за да ги направите изпълними:

$ sudo chmod u+x /etc/firewall.simple

$ sudo chmod u+x /etc/firewall.clear

Преди да настроите правила за защитна стена, включете настолен компютър/лаптоп към вашия RPi eth0 порт и потвърдете, че получава IP адрес и работи DNS. Най -лесният начин да направите това е да опитате да пингвате общ сайт и след това известен IP адрес. Също така пинг вашия RPi и ISP рутер. Ако получите резултати, тогава всичко е наред и всички мрежови проблеми, с които се сблъсквате, вероятно ще са резултат от проблеми със защитната стена.

Първият предоставен файл първоначално започна като firewall.simple файл на GK (благодаря отново, GK!). Направих куп промени, за да работи за тази система. Той трябва да позволява поне HTTP, HTTPS, DNS, DHCP, пинг, вътрешен SSH, вътрешен VNC и плекс. Plex може да няма всички отворени портове за всяко възможно устройство, но има куп публикации, които да го поправят. В горната част на файла има стойности, които ще трябва да промените в мрежовата си конфигурация.

Вторият файл, firewall.clear, е предназначен да се използва, докато тествате правилата си за защитна стена. Когато стартирате „sudo /etc/firewall.clear“, всички правила на защитната стена ще бъдат изчистени и системата трябва да бъде напълно свързана с интернет. Така че, ако не можете да накарате мрежова услуга (като dns) да работи с firewall.simple правила, но тя започва да работи, след като стартирате firewall.clear, знаете, че имате проблем с правилото. Това наистина ще бъде критично само при тестване на вашите правила.

И така, имаме правила за защитната стена там, трябва да ги накараме да стартират, когато RPi стартира. За да направим това, ще редактираме файла /etc/rc.local:

$ sudo vi /etc/rc.local

След като влезете, добавете следното в края на файла:

ехо „Зареждане на правила за iptables“/etc/firewall.simple >>/dev/null

Ако решите да добавите системата за откриване на проникване на хъркане, ще трябва да редактирате този файл отново. Засега просто го запазете и рестартирайте.

$ sudo рестартиране

Стъпка 9: Syslog

Syslog
Syslog

Остават две стъпки…

Това е лесно. Ако все още сте там и следвате заедно с блога на GK, това е стъпка 12. Трябва да направите точно това, което той казва по отношение на файла syslog. Ето съкратените стъпки:

Съхранявайте данните от syslog на стойност 2 месеца…

$ sudo vi /etc/logrotate.conf

Трябва да му кажем да използва „една седмица“като измерване и след това да запазим 12 от тях. Имате нужда от следните два реда в този файл. Вярвам, че ще трябва да промените съществуващите линии.

седмично въртене 12

Запази го.

Стъпка 10: Откриване на проникване със смъркане

Откриване на проникване със смъркане
Откриване на проникване със смъркане

Последното нещо, което GK конфигурира, е системата за смъркане. Препоръчвам и това. Можете да следвате неговите правила и няма да копирам всички тук, с няколко малки промени. Неговите инструкции са за дистрибуцията ArchLinux. Ето няколко промени за Raspbian дистрибуцията, която използваме тук. Останалите инструкции работят добре.

Първо, не използвайте sudo pacman -S snort за изтегляне и инсталиране на snort. Направете следното:

$ sudo apt-get install snort

Второ, не можете да проверите хъркането с sudo snort -version. Проверете инсталацията с:

$ sudo хъркане -V

И накрая, за да го стартирате при стартиране, не променяйте файла rc.conf, редактирайте файла rc.local (отново) …

$ sudo vi /etc/rc.local

Добавете следните редове в края на файла:

ехо „Зареждане на хъркане“

#/usr/sbin/snort -D -u snort -g snort -c /etc/snort/snort.conf -i eth0 -l/var/log/snort

Сега рестартирайте и всичко трябва да работи магически.

$ sudo рестартиране

Стъпка 11: Насладете се

Наслади се
Наслади се

Това трябва да е!

Първо, не мога да благодаря достатъчно на Гийом Кадуш! Той вдъхнови това.

Второ, ако все още не сте изключили клавиатурата, видеото и мишката, можете. Използвайте SSH и VNC, за да се върнете, когато е необходимо.

В крайна сметка това може да не е 100% перфектно. Моля, публикувайте с промени/предложения/препоръки. Моята цел би била това да бъде началото на дискусията и много хора да се насладят!

Благодаря!!

PS … Картината е RPi4 вътре в алуминиев корпус FLIRC със стар вентилатор на Intel, леко модифициран и завързан с цип отгоре. Под вентилатора има и термо паста, само в случай, че се чудите. Намерих нещо подобно в интернет (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) и реших да опитам сам.

Стъпка 12: Дневник на промените

Тъй като се правят промени в тази инструкция, ще ги документирам тук. В случай, че имате проблем, проверете тук, за да видите дали сте взели стари инструкции или файлове.

25 септември 2019 г.:

  • Фиксирани DHCP правила в firewall.simple
  • Фиксиран DHCP диапазон в инструкциите (файловете бяха правилни)
  • Добавени са задания с фиксиран IP към DHCP инструкциите

13 октомври 2019 г.

  • Фиксирани множество правописни грешки
  • Създадох второ пи, така че ще имам тестова SD карта за смяна, ако е необходимо

Препоръчано: