Як встановити ці правила iptables для запуску при запуску


20

Я зазвичай запускаю свої правила 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


Майже через два роки, але важливий коментар: переконайтеся, що у вас є ip6tablesправила, якщо ви один день отримуєте підключення v6, оскільки IPv6 обробляється, ip6tablesа ні iptables.
Thomas Ward

Відповіді:


38

Можливо, ви хочете використовувати iptables-persistentпакет, а не возитися зі своїми сценаріями завантаження. Спочатку запустіть свій сценарій, щоб налаштувати правила брандмауера. По-друге, запустіть sudo apt-get install iptables-persistentі дотримуйтесь підказок. Коли він запитує зберегти поточні правила, натисніть "Так" в обох підказках. Тепер при перезавантаження ваші правила iptables будуть відновлені.


ПРИМІТКА. Якщо ви зміните свої правила після цього, вам потрібно буде виконати наступні команди (и) після змін:

Щоб зберегти свої правила iptables IPv4: sudo su -c 'iptables-save > /etc/iptables/rules.v4'

Щоб зберегти правила IPv6 ip6tables: sudo su -c 'ip6tables-save > /etc/iptables/rules.v6'


Дякую, що спрацювало. Якщо я хочу тимчасово змінити правила, я можу просто запустити сценарій з терміналу так?
Мікелан

Так, або ви можете безпосередньо маніпулювати системою iptables. ЗАРАЗ, якщо ви плануєте наполегливо використовувати тимчасове правило, нові правила не гарантуються збереженням, якщо ви не виконаєте команди, які я заявляю у своїй відповіді.
Thomas Ward

Чи погана ідея запускатись sudo dpkg-reconfigure iptables-persistentпісля зміни правила.
souravc

@souravc питання, яке відповідає на це: "Навіщо тобі це потрібно чи хочеться?" Ідея полягає в тому, що вам не доведеться і можете просто переписати (або перезаписати ( rules.v4або rules.v6файли вручну, щоб вони індексувалися при наступному завантаженні, або негайно, якщо ви запускаєте iptables-restore < /etc/iptables/rules.v4абоip6tables-restore < /etc/iptables/rules.v6
Thomas Ward

2

Припустимо, що у вас є правила брандмауера:

/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

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


Дякую, чи він кудись кидає журнал? Це не працює, і я підозрюю, що це пов’язано з тим, що на моєму сервері dns використовується розв'язник, який ще не запустився, коли мій хост завантажується.
Димитрій Копріва
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.