Я использую NTP-сервер с высоким трафиком, и следующие правила абсолютно необходимы для предотвращения немедленного переполнения моей таблицы conntrack (независимо от насколько он велик):
iptables -t raw -A PREROUTING -p udp --dport 123 -j NOTRACK
iptables -t raw -A OUTPUT -p udp --sport 123 -j NOTRACK
ip6tables -t raw -A PREROUTING -p udp --dport 123 -j NOTRACK
ip6tables -t raw -A OUTPUT -p udp --sport 123 -j NOTRACK
Я ищу лучший способ, чтобы эти правила применялись автоматически при загрузке.Их нужно применять немедленно, когда UFW поднимается, иначе таблица conntrack будет заполнена за секунды. (Пожалуйста, не предлагайте увеличивать размер таблицы conntrack; я вообще не хочу тратить ресурсы на отслеживание этих подключений, и для этого таблица должна быть абсурдно большой, вероятно, больше, чем сервер может обработать. )
Сначала я попытался добавить их в /etc/ufw/before.rules и before6.rules, например, в конце файлов:
# tail before.rules before6.rules
==> before.rules <==
(stuff that was already there)
-t raw -A PREROUTING -p udp --dport 123 -j NOTRACK
-t raw -A OUTPUT -p udp --sport 123 -j NOTRACK
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
==> before6.rules <==
(stuff that was already there)
-t raw -A PREROUTING -p udp --dport 123 -j NOTRACK
-t raw -A OUTPUT -p udp --sport 123 -j NOTRACK
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
Однако после перезагрузки у системы не было сетевого подключения, и я обнаружил следующую ошибку :
ERROR: problem running ufw-init
iptables-restore v1.8.4 (legacy): The -t option (seen in line 75) cannot be used in iptables-restore.
Error occurred at line: 75
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
ip6tables-restore v1.8.4 (legacy): The -t option (seen in line 142) cannot be used in ip6tables-restore.
Error occurred at line: 142
Try `ip6tables-restore -h' or 'ip6tables-restore --help' for more information.
Problem running '/etc/ufw/before.rules'
Problem running '/etc/ufw/before6.rules'
Затем я попытался удалить "-t raw":
# tail before.rules before6.rules
==> before.rules <==
(stuff that was already there)
-A PREROUTING -p udp --dport 123 -j NOTRACK
-A OUTPUT -p udp --sport 123 -j NOTRACK
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
==> before6.rules <==
(stuff that was already there)
-A PREROUTING -p udp --dport 123 -j NOTRACK
-A OUTPUT -p udp --sport 123 -j NOTRACK
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
Это снова отключило сетевое соединение и выдало ошибку:
ERROR: problem running ufw-init
iptables-restore: line 75 failed
ip6tables-restore: line 142 failed
Problem running '/etc/ufw/before.rules'
Problem running '/etc/ufw/before6.rules'
Как лучше всего справиться с этим?
Ubuntu 20.04.2 LTS
РЕДАКТИРОВАТЬ: немного поигравшись с "iptables-save", я попытался добавить что-то вроде этого в файл:
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -p udp -m udp --dport 123 -j NOTRACK
-A OUTPUT -p udp -m udp --sport 123 -j NOTRACK
Однако я всегда получаю одни и те же ошибки:
# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
ERROR: problem running ufw-init
Bad argument `*raw'
Error occurred at line: 75
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
Problem running '/etc/ufw/before.rules'
и подключение к сети моего сервера прерывается, пока я не отключу UFW или удалите добавленные строки из файлов и перезагрузите UFW.
Моя первая ошибка заключалась в попытке добавить "сырые" правила в существующий блок, который определяется как блок "фильтр". Мне нужно было добавить совершенно новый «необработанный» блок с его собственным COMMIT, например:
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -p udp -m udp --dport 123 -j NOTRACK
-A OUTPUT -p udp -m udp --sport 123 -j NOTRACK
COMMIT
Я попытался добавить его в конец файла (после существующего «COMMIT»), но по какой-то причине он все еще содержал ошибку, но это сработало, когда я добавил в начало файла. Не знаю почему.
Итак, общая структура before.rules и before6.rules теперь выглядит следующим образом:
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
(my rules here)
COMMIT
*filter
:ufw6-before-input - [0:0]
:ufw6-before-output - [0:0]
:ufw6-before-forward - [0:0]
(existing rules here)
COMMIT