Оглавление:
- Запасы
- Шаг 1. Начальная настройка RPi
- Шаг 2: Сеть
- Шаг 3. Другой пользователь
- Шаг 4: файл Syctl
- Шаг 5: DHCP и DNS (часть 1)
- Шаг 6: DHCP и DNS (часть 2)
- Шаг 7: DHCP и DNS (часть 3)
- Шаг 8: брандмауэр
- Шаг 9: системный журнал
- Шаг 10: обнаружение вторжений с помощью Snort
- Шаг 11: наслаждайтесь
- Шаг 12: Журнал изменений
Видео: Межсетевой экран Raspberry Pi4: 12 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
С только что выпущенным новым Raspbery Pi 4 (RPi4) я решил сделать себе межсетевой экран для домашнего использования. Покопавшись в Интернете, я нашел отличную статью на эту тему Гийома Каддача (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). Статья потрясающая, и вы должны прочитать ее, прежде чем двигаться дальше - это упростит описанный здесь процесс. Дело в том, что эта статья написана в 2012 году и основана на дистрибутиве ArchLinux. Ничего против ArchLinux, но я хотел сделать это, используя более распространенную сборку Raspbian. RPi4 может справиться с требованиями обработки. Так что спасибо, Гийом, за вдохновение !! Это руководство будет относиться к исходному сообщению Гийома («GK» для краткости), вы, вероятно, захотите, чтобы обе страницы были открыты в вашем браузере.
Несколько ключевых моментов о моем брандмауэре:
- У меня есть встроенный разъем Ethernet (eth0) для подключения к локальной сети
- Маршрутизатор ISP подключен к адаптеру TRENDnet (eth1)
- Я активно отключил беспроводной адаптер (wlan0)
- Это не гарантирует, что вы попадете на 100% … надеюсь, по крайней мере, на 99%:), поэтому, пожалуйста, оставляйте отзывы / комментарии
- Это моя первая инструкция. Приносим извинения за все, что не соответствует соответствующим инструктивным нормам.
А теперь повеселимся …
Запасы
-
Raspberry Pi 4
- Я использовал версию на 4 ГБ, не стесняйтесь попробовать другую версию
- Кейс (мне нравится FLIRC, но это ваш выбор)
- Адаптер питания
- Карта MicroSD, 32 ГБ или больше (я использовал карту 64 ГБ)
- TRENDnet USB3.0 Gigabit Ethernet Dongle (модель: TU3-ETG)
- Пара сетевых кабелей RJ45
- USB-клавиатура и мышь
- Кабель Micro-HDMI-HDMI (который подключен к монитору HDMI)
Эти клавиатуру, видео и мышь можно удалить, как только вы сможете запустить SSH и VNC.
Шаг 1. Начальная настройка 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 («рядом с моей существующей сетью»). Это позволило мне поиграть с конфигурацией, не затрагивая сеть. Подключите встроенный RJ45 RPi4 к маршрутизатору (или по беспроводной сети, если хотите). С Raspbian самый простой способ сделать это - использовать графический интерфейс. На рабочем столе щелкните значок Raspberry> Настройки> Конфигурация Raspberry Pi. Обязательно включите 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 yes PubkeyAuthentication да HostBasedAuthentication нет
Игнорировать Rhosts да
PrintMotd нетPrintLastLog да TCPKeepAlive да
И добавьте следующие строки:
Протокол 2UsePrivilegeSeparation даKeyRegenerationInterval 3600ServerKeyBits 768RSAAuthentcation даRhostsRSAAuthentication нет
И измените следующие строки:
Порт 15507LoginGraceTime 60PermitRootLogin no
Давайте быстро поговорим об этой первой модификации… порта 15507. SSH обычно работает на порту 22. GK переместил его на 15507 - не знаю почему. Вы можете пойти любым путем, изменить его или нет… Если вы решите изменить его, вам нужно будет добавить «-p 15507» к любой команде SSH, с которой вы пытаетесь подключиться. Если вы решите пропустить его, обратите внимание на другие места, упомянутые в этих инструкциях, и игнорируйте их, особенно правила брандмауэра!
Наконец, на этом этапе давайте получим IP-адрес RPi4, чтобы мы знали, к чему подключаться:
$ ipconfig -a
Найдите активное сетевое соединение (вероятно, на eth0 или wlan0) и запишите этот IP-адрес. Теперь у вас есть все необходимое для удаленного подключения к RPi4. Давайте перезагрузимся, прежде чем продолжить:
$ sudo перезагрузка
Шаг 3. Другой пользователь
Лучше не использовать имя пользователя RPi по умолчанию (pi), и вам, безусловно, следует изменить пароль. Чтобы быть в безопасности, давайте добавим еще одну учетную запись пользователя, которую вы можете использовать для удаленного подключения и продолжения (шаг 6 GK). Вернувшись к RPi, давайте добавим нового пользователя и установим для него права доступа к SSH и выполним команду sudo:
$ sudo useradd -m -g users -G sudo, netdev -s / bin / bash [ИМЯ ПОЛЬЗОВАТЕЛЯ]
$ sudo passwd [ИМЯ ПОЛЬЗОВАТЕЛЯ]
Не стесняйтесь выйти из системы или перезагрузиться и использовать эту вновь созданную учетную запись в будущем.
Шаг 4: файл Syctl
Следующим шагом является изменение файла /etc/sysctl.conf (шаг 9 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 и настройка правил брандмауэра. Итак, приступим к первой части. Если вы подписаны на сайт GK, мы находимся на шаге 10.
Для этого вам понадобится некоторая информация от вашего маршрутизатора интернет-провайдера (или текущего брандмауэра):
- Внутренний IP-адрес роутера
- IP-адрес, который вы можете использовать для интерфейса RPi4 с маршрутизатором.
- IP-адреса для сервера имен (или двух)
- Имя интерфейса для подключения к локальной сети (например, eth0 или eth1).
- Имя интерфейса для подключения к Интернет-провайдеру (например, все, что вы не использовали для локальной сети).
Вам также может потребоваться изменить настройки маршрутизатора, чтобы дать RPi4 статический IP-адрес (пункт 2 выше). По крайней мере, так я и сделал.
Во-первых, давайте изменим файл dhcpcd.conf…
$ sudo vi /etc/dhcpcd.conf
Раскомментируйте эти строки:
persistentoption Rapid_commitoption имя_домена_серверы, имя_домена, поиск_домена, имя_хоста опция interface_mtu
Для каждого сетевого интерфейса необходимо указать параметры сети. Они должны выглядеть примерно так:
# Статический для интерфейса с интернет-провайдером
interface 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-адрес на устройстве. Имя после "host" # не имеет смысла для системы. Введите MAC-адрес устройства, а также желаемый #IP-адрес. Убедитесь, что он находится вне диапазона DHCP. При необходимости повторите. #host [НИЧЕГО] {# аппаратное обеспечение Ethernet xx: xx: xx: xx: xx: xx; # фиксированный адрес 10.210.212.250; #}
Обязательно используйте числа, которые подходят вам. Вышеуказанные IP-адреса относятся к моей сети, за исключением серверов имен, которые принадлежат Google. Обратите внимание, что я также установил для ISP метрику 100, чтобы сделать ее первой попыткой по умолчанию для сетевого трафика. Я также специально ничего не делал со своим беспроводным адаптером (wlan0). Я намерен полностью отключить этот интерфейс, чтобы он имел смысл для меня.
Кроме того, если вы хотите принудительно указать IP-адрес на устройстве (например, NAS), используйте этот нижний раздел. Дайте хосту имя, которое имеет для вас значение, но знайте, что оно никогда ничем не используется. Не забывайте точки с запятой.
Шаг 6: DHCP и DNS (часть 2)
Следующим шагом будет изменение файла dnsmasq.conf…
$ sudo vi /etc/dnsmasq.conf
Нам нужно раскомментировать несколько строк и отредактировать несколько строк. Вам также потребуется скопировать несколько настроек из файла dhcpcd.conf. Еще два вопроса, на которые вам нужно ответить для себя:
Нужны ли для внутренней LAN (например, eth0) DHCP и DNS? Какой диапазон DHCP вы хотите для вашей LAN и как долго должна длиться каждая аренда?
Начните с раскомментирования нескольких строк:
bogus-privno-dhcp-interface = wlan0bind-interfacesdhcp-name-match = set: 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). Обратите внимание, что я специально сказал НЕ назначать IP-адрес DHCP моей беспроводной сети. Опять же, я намерен полностью отключить этот интерфейс, чтобы он имел смысл для меня.
Шаг 7: 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"] then #echo No DNSMasq sudo /etc/init.d/dnsmasq restart #else #echo DNSMasq Запуск fi
Вырежьте и вставьте его, если нужно. Что бы вы ни делали, не включайте в имя «dnsmasq». Сценарий ищет слово «dnsmasq», и если оно есть в имени, он будет считать, что служба запущена. Также переименуйте файл так, чтобы он заканчивался на '.sh'. Intructables не позволил мне загрузить файл.sh - и это хорошо. Остальные инструкции предполагают, что файл существует по адресу: /etc/dns_masq_keepalive.sh.
Во-вторых, установите права доступа к файлу, чтобы его можно было запустить:
$ sudo chmod u + x /etc/dns_masq_keepalive.sh
Теперь мы будем использовать систему crontab, чтобы программа запускалась каждые 2 минуты каждый день. Запустите crontab:
$ sudo crontab -e
Он должен предложить вам отредактировать, используя vi или что-то еще. Любой будет работать. После того, как вы сможете отредактировать его, добавьте в конец файла следующее:
* / 2 * * * * судо /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
Прежде чем настраивать какие-либо правила брандмауэра, подключите настольный компьютер / ноутбук к порту eth0 RPi и убедитесь, что он получает IP-адрес и работает DNS. Самый простой способ сделать это - попробовать проверить связь с общим сайтом, а затем с известным IP-адресом. Также пропингуйте свой маршрутизатор RPi и ISP. Если вы получите результаты, значит, все в порядке, и любые сетевые проблемы, с которыми вы сейчас столкнетесь, скорее всего, будут результатом проблем с брандмауэром.
Первый предоставленный файл изначально запускался как файл firewall.simple GK (еще раз спасибо, GK!). Я внес кучу изменений, чтобы она работала в этой системе. Он должен поддерживать как минимум HTTP, HTTPS, DNS, DHCP, ping, внутренний SSH, внутренний VNC и plex. Plex может не иметь всех открытых портов для всех возможных устройств, но есть множество сообщений, чтобы исправить это. В верхней части файла находятся значения, которые вам нужно будет изменить в вашей сетевой конфигурации.
Второй файл, firewall.clear, предназначен для использования при проверке правил вашего брандмауэра. Когда вы запустите sudo /etc/firewall.clear, все правила брандмауэра будут очищены, и система должна быть полностью подключена к Интернету. Итак, если вы не можете заставить сетевую службу (например, dns) работать с установленными правилами firewall.simple, но она начинает работать после запуска firewall.clear, вы знаете, что у вас есть проблема с правилами. Это действительно будет иметь решающее значение только при тестировании ваших правил.
Итак, у нас есть правила брандмауэра, нам нужно заставить их запускаться при запуске RPi. Для этого отредактируем файл /etc/rc.local:
$ sudo vi /etc/rc.local
Оказавшись внутри, добавьте в конец файла следующее:
echo «Загрузка правил iptables» /etc/firewall.simple >> / dev / null
Если вы решите добавить систему обнаружения вторжений snort, вам нужно будет снова отредактировать этот файл. А пока просто сохраните его и перезагрузитесь.
$ sudo перезагрузка
Шаг 9: системный журнал
Осталось два шага…
Это очень просто. Если вы все еще там и следите за блогом GK, это шаг 12. Вам нужно делать именно то, что он говорит в отношении файла системного журнала. Вот сокращенные шаги:
Хранить данные системного журнала за 2 месяца…
$ sudo vi /etc/logrotate.conf
Нам нужно сказать ему использовать «одну неделю» в качестве меры, а затем оставить 12 из них. Вам понадобятся следующие две строки в этом файле. Я считаю, что вам нужно будет изменить существующие строки.
еженедельно вращать 12
Сохрани это.
Шаг 10: обнаружение вторжений с помощью Snort
Последнее, что настраивает GK, - это система snort. Я тоже рекомендую это. Вы можете следовать его правилам, и я не собираюсь копировать их здесь с небольшими изменениями. Его инструкции предназначены для дистрибутива ArchLinux. Вот несколько изменений в используемом здесь дистрибутиве Raspbian. Остальные инструкции работают нормально.
Во-первых, не используйте sudo pacman -S snort для загрузки и установки snort. Сделайте следующее:
$ sudo apt-get install snort
Во-вторых, вы не можете проверить snort с помощью sudo snort -version. Проверьте установку с помощью:
$ sudo snort -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-карта для замены.
Рекомендуемые:
Как заменить мини-экран, ЖК-экран и корпус вашего IPad: 12 шагов
Как заменить экран, ЖК-экран и корпус вашего IPad Mini: Когда ваш экран на iPad mini ломается, это может оказаться дорогостоящим ремонтом в любом месте. Почему бы не сэкономить деньги и одновременно не изучить новый потрясающий навык? Эти инструкции помогут вам от начала до конца ремонта
Внешний сенсорный экран HDMI для Windows и Raspberry Pi: 5 шагов
Внешний сенсорный экран HDMI для Windows и Raspberry Pi: Привет, ребята, как дела! Акарш здесь из CETech. Итак, я нашел этот сенсорный дисплей на веб-сайте DFRobot, который изначально был разработан для Raspberry Pi, но находит свое применение во многих местах. Дисплей имеет полноразмерный разъем HDMI для отображения
Мостовой межсетевой экран с OrangePi R1: 4 шага
Мостовой брандмауэр с OrangePi R1: мне пришлось купить еще один Orange Pi :) Это произошло потому, что мой SIP-телефон начал звонить посреди ночи со странных номеров, и мой провайдер VoIP предположил, что это произошло из-за сканирования портов. Еще одна причина - я слишком часто слышал о взломе роутеров, о
Получите экран для своего дома Google с помощью Raspberry Pi и Dialogflow (альтернатива Chromecast): 13 шагов
Получите экран для своего дома Google с помощью Raspberry Pi и Dialogflow (альтернатива Chromecast): с тех пор, как я купил свой дом Google, я хотел управлять своими устройствами дома с помощью голосовых команд. Он отлично работает во всех смыслах, но мне было не по себе из-за его функции видео. Мы можем смотреть Youtube и Netflix, только если у нас есть устройство Chromecast или T
Быстрый и простой способ изменить экран блокировки за 6 простых шагов (Windows 8-10): 7 шагов
Быстрый и простой способ изменить экран блокировки за 6 простых шагов (Windows 8-10). Хотите изменить ситуацию на своем ноутбуке или ПК? Хотите изменить свою атмосферу? Следуйте этим простым и быстрым шагам, чтобы успешно персонализировать экран блокировки вашего компьютера