Оглавление:

Межсетевой экран Raspberry Pi4: 12 шагов
Межсетевой экран Raspberry Pi4: 12 шагов

Видео: Межсетевой экран Raspberry Pi4: 12 шагов

Видео: Межсетевой экран Raspberry Pi4: 12 шагов
Видео: LibreELEC на Raspberry Pi 4 - Почему не стоит покупать 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) для подключения к локальной сети
  • Маршрутизатор 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

Начальная настройка 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 («рядом с моей существующей сетью»). Это позволило мне поиграть с конфигурацией, не затрагивая сеть. Подключите встроенный 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

Syctl файл
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 (часть 1)
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)

DHCP и DNS (часть 2)
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)

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"] 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

Обнаружение вторжений с помощью Snort
Обнаружение вторжений с помощью 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-карта для замены.

Рекомендуемые: