Я обычно запускаю свои правила iptables при каждом входе в систему. С терминала, который я печатаю,
sudo sh firewall.sh
Настраивая компьютер моей сестры, я хочу дать ей базовую защиту брандмауэра. Она не будет входить в систему как администратор, просто стандартная учетная запись. Как я могу заставить скрипт брандмауэра запускаться каждый раз, когда она входит в систему, без необходимости вводить какой-либо пароль?
Сценарий, который я написал для компьютера моей сестры, содержит;
#!/bin/sh
modprobe ip_conntrack
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -I OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p udp --dport 53 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 443 --sport 32768:61000 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -I OUTPUT -p icmp -j DROP
iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -p udp -j DROP
iptables -I INPUT -p tcp -m tcp --syn -j DROP
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Я поместил его в ее домашнюю папку как firewall.sh и установил его как исполняемый (щелкните файл правой кнопкой мыши и отметьте опцию «разрешить запуск файла как программы» на вкладке прав доступа). ).
Запуск этого скрипта из терминала от имени root работает нормально.
После ввода;
sudo sh firewall.sh
Я набрал в терминале
sudo iptables -L -v
, и я получаю
Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 DROP tcp -- any any anywhere anywhere tcpflags: FIN,SYN,RST,ACK/SYN
0 0 DROP udp -- any any anywhere anywhere
0 0 DROP icmp -- any any anywhere anywhere
Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
0 0 DROP icmp -- any any anywhere anywhere
0 0 ACCEPT tcp -- any any anywhere anywhere tcp spts:32768:61000 dpt:https
0 0 ACCEPT udp -- any any anywhere anywhere udp spts:32768:61000 dpt:domain
0 0 ACCEPT tcp -- any any anywhere anywhere tcp spts:32768:61000 dpt:http
0 0 ACCEPT all -- any lo anywhere anywhere
Как я могу получить это это сценарий запускается автоматически при входе в систему, или, возможно, сохранить эти правила навсегда для моего компьютера сестры? Не могли бы вы предоставить подробный код, так как мои первые попытки использования метода rc.local и iptables-save не были очень успешными. При каждой перезагрузке все цепочки INPUT, OUTPUT и FORWARD сбрасываются в ACCEPT, и при вводе данных политики не указываются sudo iptables -L -v
Вы можете использовать пакет iptables-persistent
, а не связываться с вашими загрузочными скриптами. Сначала запустите ваш скрипт для настройки правил брандмауэра. Во-вторых, запустите sudo apt-get install iptables-persistent
и следуйте инструкциям. Когда появится запрос на сохранение текущих правил, нажмите «Да» в обоих запросах. Теперь при перезагрузке ваши правила iptables будут восстановлены.
ПРИМЕЧАНИЕ: Если вы измените свои правила после этого, вам потребуется выполнить следующую команду (команды) после изменений:
Для сохраните ваши правила IPv4 iptables: sudo su -c 'iptables-save > /etc/iptables/rules.v4'
Чтобы сохранить ваши правила IPv6 ip6tables: sudo su -c 'ip6tables-save > /etc/iptables/rules.v6'
Принятие Вас имеет правила брандмауэра в:
/etc/iptables.up.rules
Возможно, самый очевидный ответ должен будет создать файл, призванный iptables:
/etc/network/if-pre-up.d
с содержанием:
#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules
и сделайте это исполняемым использованием
sudo chmod +x /etc/network/if-pre-up.d/iptables
Этот путь перед Вашим сетевым интерфейсом активируется, Ваши правила будут загружены.