Створення скрипта настройки firewall / routing
Створюємо власне файл - назвемо його наприклад netfilter
Розміщуємо скрипт в /etc/init.d/
Робимо файл виконуваним: chmod + x /etc/init.d/netfilter
Прописуємо в файл стандартний заголовок для shell-скриптів: #! / Bin / bash
Додаємо скрипт в автозавантаження: update-rc.d netfilter defaults
TODO: описати процес для більш інших дистрибутивів, зокрема не використовують SYSV Init
Тепер у нас є скрипт, який буде виконуватися кожного разу при перезавантаженні системи. Треба наповнити його змістом. Під час налаштування firewall слід користуватися правилом "доброго адміна" - заборонити всі і вирішувати при наявності необхідності тільки тому кому дійсно потрібен доступ.
#! / Bin / bash
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#! / Bin / bash
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
#iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW, RELATED, ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A OUTPUT -p udp -m state --state NEW, RELATED, ESTABLISHED -j ACCEPT
Дозвіл вхідних з'єднань
Для того, щоб дозволити входить TCP-з'єднання необхідно в скрипт додати рядок: iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT У даному випадку дозволяється доступ до 80 порту (як правило там знаходиться http -сервер)
Під час налаштування маршрутизації слід врахувати наступні моменти (зібрано за мотивами популярних помилок):
На хості в мережі 192.168.1.0/24 - прописати маршрут до мережі 192.168.2.0/24 через 192.168.1.1 - наприклад в linux. ip route add 192.168.2.0/24 via 192.168.1.1
На хості в мережі 192.168.2.0/24 - прописати маршрут до мережі 192.168.1.0/24 через 192.168.2.1 - наприклад в linux. ip route add 192.168.1.0/24 via 192.168.2.1
На маршрутизаторі дозволити маршрутизацію пакетів: echo 1> / proc / sys / net / ipv4 / ip_forward - рядок варто додати в скрипт 😉
На маршрутизаторі дозволити проходження пакетів через firewall (див. Ланцюжок FORWARD)
Пакети проходять через маршрутизатор потрапляють в ланцюжок FORWARD. Наприклад, щоб дозволити користувачам з мережі 192.168.1.0/24 звертатися до веб-серверів в мережі в мережі 192.168.2.0/24:
#! / Bin / bash
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
#iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW, RELATED, ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A OUTPUT -p udp -m state --state NEW, RELATED, ESTABLISHED -j ACCEPT
echo 1> / proc / sys / net / ipv4 / ip_forward
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.0/24 -p tcp --dport 80 -m state NEW, ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.2.0/24 -d 192.168.1.0/24 -p tcp -m state ESTABLISHED -j ACCEPT
Рядок 15 - дозволяємо маршрутизацію.
Рядок 16 - дозволяємо проходження пакетів відкривають нове з'єднання на порт 80 протоколу tcp, або прінадлжащіх до вже установленмову з'єднанню на цей же порт від хостів в мережі 192.168.1.0/24 до хостів в мережі 192.168.2.0/24.
Рядок 17 - дозволяємо проходження пакетів належать до вже встановленим з'єднанням
#! / Bin / bash
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
#iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW, RELATED, ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A OUTPUT -p udp -m state --state NEW, RELATED, ESTABLISHED -j ACCEPT
echo 1> / proc / sys / net / ipv4 / ip_forward
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.0/24 -p tcp --dport 80 -m state NEW, ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.2.0/24 -d 192.168.1.0/24 -p tcp -m state ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.2.0/24 -j MASQUERADE
У першому рядку всі пакети прийшли (-i) з інтерфейсу lo aka loopback приймаються беззастережно. У другій - йдуть через інтерфейс lo так само відправляються.