Вчимося використання iptables в debian, блокнот звичайного адміна)

Створення скрипта настройки 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 так само відправляються.

Сподобалося це:

Схожі статті