На этот вопрос уже есть ответ здесь:
Я использую сервер Ubuntu 16.04.
Я хочу использовать сценарий Bash для iptables при запуске, но я не хочу использовать crontab или init.d. Есть ли какой-либо способ добиться этого без них?
#!/bin/bash
IPT="/sbin/iptables"
$IPT --flush
$IPT --delete-chain
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT*
Если Вы не хотите устанавливать дополнительное программное обеспечение, одно возможное обходное решение, которое работает над Ubuntu 16.04, должно создать два тех сценариев, которые сохранят Iptables текущая конфигурация и та, которая восстановит его. Эти сценарии должны быть помещены в (или sim-связаны с), /etc/network/if-post-down.d/
и /etc/network/if-pre-up.d/
. Также должен быть исполняемые файлы и не должны иметь никаких расширений, как .sh. Вот то, как эти сценарии считают мою систему:
$ cat /etc/network/if-post-down.d/iptables-save
#!/bin/sh
/sbin/iptables-save > /root/iptables-current-state.dat
exit 0
$ cat /etc/network/if-pre-up.d/iptables-restore
#!/bin/sh
/sbin/iptables-restore < /root/iptables-current-state.dat
exit 0
На моих 16,04 серверах я использую /etc/network/interfaces
метод файла:
$ cat /etc/network/interfaces
# interfaces file for smythies.com 2016.01.30
# attempt to set local DNS herein, as the method
# used with the old 12.04 server no longer works.
#
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
pre-up /home/doug/init/doug_firewall
dns-nameservers 127.0.0.1
# The primary interface (d-link PCI card)
auto enp4s0
iface enp4s0 inet dhcp
# Local network interface (uses built in ethernet port)
auto enp2s0
iface enp2s0 inet static
address 192.168.111.1
network 192.168.111.0
netmask 255.255.255.0
broadcast 192.168.111.255
Где Вы видите, что я использую a pre-up
директива в локальном интерфейсном определении для выполнения моего (главным образом) iptables сценарий.
Примечание: этот метод не будет работать с более поздними выпусками, которые используют netplan вместо ifup ifdown.
Можно добавить сценарий запуска к приложениям запуска Ubuntu. Существуют подробные инструкции здесь (https://help.ubuntu.com/stable/ubuntu-help/startup-applications.html.en). Помните создание исполняемого файла сценария перед добавлением его к приложениям запуска.