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
В 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 ).