Я хотел бы загрузить правила iptables при загрузке или при загрузке интерфейса в Ubuntu. Произведен поиск в StackExchange и других местах, и похоже, что наиболее распространенным подходом является использование пакета iptables-save
/ iptables-restore
или iptables-persistent
. Я бы предпочел (может быть из-за моей еще не зрелой природы Linux) хранить правила iptables в «явном» виде (например, iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
) вместо того, чтобы все разные правила были выгружены в один и тот же постоянный файл, где без комментариев и некоторой структуры , может быть сложно найти конкретное правило и изменить его.
То, что я сделал до сих пор - я добавил следующую строку в /etc/network/interfaces
post-up sh -c "/etc/iptables/eth0.post-up.sh"
, где eth0.post-up.sh
- файл, в котором явно заданы iptables (например, iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
). Все было бы хорошо, правила применяются, но причина, по которой я пишу здесь, заключается в том, что если я пытаюсь запустить iptables -L FORWARD
, то я не вижу загруженных правил, хотя я уверен, что они применяются (это переадресация подсети правил, и я вижу, что пинг проходит, когда правило выполнено, и не проходит, когда правило не выполняется. Вот вывод:
# iptables -L FORWARD
Chain FORWARD (policy DROP)
target prot opt source destination
ufw-before-logging-forward all -- anywhere anywhere
ufw-before-forward all -- anywhere anywhere
ufw-after-forward all -- anywhere anywhere
ufw-after-logging-forward all -- anywhere anywhere
ufw-reject-forward all -- anywhere anywhere
ufw-track-forward all -- anywhere anywhere
Если я закомментирую вышеприведенный пост-ап ... в файле /etc/network/interfaces
(убедившись, что правила не применяются) и затем запустив правила вручную, я получаю вывод:
# iptables -L FORWARD
Chain FORWARD (policy DROP)
target prot opt source destination
ufw-before-logging-forward all -- anywhere anywhere
ufw-before-forward all -- anywhere anywhere
ufw-after-forward all -- anywhere anywhere
ufw-after-logging-forward all -- anywhere anywhere
ufw-reject-forward all -- anywhere anywhere
ufw-track-forward all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
Итак, правила применяются в обоих случаях, но в тогда первый случай iptables -L
не показывает правила, а в дальнейшем он показывает.
В конечном итоге это работает, но я хотел бы понять, в чем здесь предостережение, почему, похоже, я только один из тех, кто пытается использовать этот подход, и почему iptables -L
не дает ожидаемого результата.
ОБНОВЛЕНИЕ: приходится исправлять себя, не все правила iptables в файле eth0.post-up.sh
выполняются, из 3 команд ниже:
/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
только последняя ( выполняется POSTROUTING), который необходим для прохождения эхо-запроса, когда первые два не имеют никаких следов в iptables -Lnv FORWARD
и не приводят к установлению соединения (например, wget google.com
) с другого компьютера, который использует эту коробку в качестве маршрутизатора. Но если я запускаю этот файл вручную после загрузки - тогда все выполняется правильно, и ping, и wget с удаленного компьютера работают как положено.
Я использую softether vpn на моем пи. Я использую этот суть для установки его.
Softether (или по крайней мере этот сценарий) помещает iptable правила в/etc/rc.local
Как пример, это - мой
# Start VPN Settings
for vpn in /proc/sys/net/ipv4/conf/*; do echo 0 > $vpn/accept_redirects; echo 0 > $vpn/ send_redirects; done
iptables -A FORWARD -i br0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i br0 -o br0 -j ACCEPT
# End VPN Settings
exit 0
, Это должно выполнить Ваши iptable команды на начальной загрузке. Может быть более соответствующий путь, но это, кажется, работает на меня (по крайней мере, насколько vpn затронутый, никогда не имел проблем)
, Просто удостоверяются, что Вы помещаете таблицы прежде
exit 0