Ищу простой, но эффективный брандмауэр

ExecStartдолжно быть

ExecStart=/usr/local/bin/node /home/hung/Rocket.chat/main.js

Это моя окончательная версия файла (/etc/systemd/system/rocketchat.service):

[Unit]
Description=RocketChat Server
After=network.target remote-fs.target nss-lookup.target mongod.target apache2.target

[Service]
ExecStart=/home/hung/.nvm/versions/node/v8.9.3/bin/node /var/www/chat/Rocket.Chat/main.js
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
Environment=NODE_ENV=production
Environment=PORT=3001
Environment=ROOT_URL=https://domain.com/
Environment=MONGO_URL=mongodb://localhost:27017/rocketchat
Environment=MAIL_URL='smtp://user@domain:password@domain:587/'

[Install]
WantedBy=multi-user.target

Запустить службу:sudo systemctl start rocketchat

Запуск при загрузке:sudo systemctl enable rocketchat

0
13.12.2019, 13:14
1 ответ

В Linux стандартный сетевой стек запрещает отправлять IP-пакеты с исходным IP-адресом 0.0.0.0 (, вероятно, начиная с ядра 2.2 ). Поскольку этого требует протокол DHCP, инструменты DHCP должны обходить это ограничение.

Таким образом, клиенты DHCP полагаются на сокеты RAW для создания этого запрещенного пакета с исходным IP-адресом 0.0.0.0 и фактически используют их для начальных обменов DHCP. Эти пакеты обходят сетевой стек, включая iptables.

Вот несколько быстро найденных связанных ссылок:

Руководство по использованию необработанных сокетов
Red Hat Bugzilla — ошибка 1269914 -не может передавать пакеты брандмауэра, проходящие через необработанные сокеты
ISC -Как DHCP использует необработанные сокеты

В любом случае, это можно защитить брандмауэром с помощью моста Ethernet, даже если он не нужен ни для чего другого. Таким образом, вы можете создать интерфейс моста и поработить в нем свой уникальный интерфейс Ethernet (будьте осторожны, беспроводные интерфейсы Wi-Fi обычно не работают на мосту без сложных настроек )и настроить DHCP-клиент на использование собственного моста. интерфейс, а не оригинальный интерфейс Ethernet. Пакеты, испускаемые DHCP-клиентом, будут затем коммутироваться, поэтому при условии использования брандмауэра моста с использованиемebtables(вместо него также можно использовать nftables):

ebtables -A OUTPUT -j DROP

то же для полученных пакетов:

ebtables -A INPUT -j DROP

Или, если вы не хотите этого делать, вы должны пойти еще ниже, на уровень интерфейса, что возможно при использованииtc. Предположим, ваш интерфейс называетсяeth0(ваша картинка плохо читается):

Добавьте классовый простой qdisc, чтобы можно было прикреплять фильтры:

tc qdisc add dev eth0 root handle 1: prio

Добавить фильтр и действие «Сопоставить все/удалить все»:

tc filter add dev eth0 parent 1: matchall action drop

Теперь из интерфейса ничего не выйдет, но входящие пакеты по-прежнему можно увидеть, если это необходимо.

(Вы можете отменить все с помощьюtc qdisc del dev eth0 root)

Аналогично можно заблокировать все входящие данные:

tc qdisc add dev eth0 ingress
tc filter add dev eth0 ingress matchall action drop

(отменить с помощьюtc qdisc del dev eth0 ingress)

Не могу сказать, что это просто, но метод tcобеспечивает полную блокировку за 4 команды и не требует перенастройки других сетевых инструментов, таких как NetworkManager, как, вероятно, потребуется при использовании моста (, а также будет работать через Wi-Fi ).

1
28.01.2020, 02:38

Теги

Похожие вопросы