Как установить эти правила iptables для запуска при запуске

17

Я обычно запускаю свои правила iptables всякий раз, когда я вхожу в систему. Из терминала I введите:

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

    
задан Mikelane 21.03.2013 в 05:14
источник

2 ответа

26

Возможно, вы захотите использовать пакет 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'

    
ответ дан Thomas Ward 21.03.2013 в 05:18
источник
3

Предполагая, что у вас есть правила брандмауэра:

/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

Таким образом, до активации сетевого интерфейса будут загружены ваши правила.

    
ответ дан Antonio J. de Oliveira 13.12.2016 в 12:43