Настройка связки iptables и dnsmasq на Astra Linux «Смоленск»

Краткое руководство по настройке роутера в связке iptables + dnsmasq, а также проброс портов по IP-адресам машин в локальной сети на примере Astra Linux «Смоленск» 1.7.1. Также подойдёт для «Воронежа» и других редакций.

Исходные данные

Имеем на машине 2 сетевых интерфейса:

  • eth0 — для внешней сети 192.168.1.0/24
  • eth1 — для внутренней сети 192.168.100.0/24

Также у нас есть шлюз во внешней сети. Это маршрутизатор с IP-адресом 192.168.1.1

Наша задача — настроить доступ в Интернет для внутренней сети.

Открываем файл /etc/sysctl.conf

# nano /etc/sysctl.conf

и раскомментировать строчку

net.ipv4.ip_forward=1

Проверяем

# sysctl -p

Должен быть такой ответ:

net.ipv4.ip_forward = 1

Теперь создадим правила iptables. Для этого создадим каталог /etc/firewall/ и файл /etc/firewall/iptables.sh

# mkdir /etc/firewall/
# touch /etc/firewall/iptables.sh

открываем его

# nano /etc/firewall/iptables.sh

и в нём пропишем такой скрипт:

#!/bin/sh

iptables -F
iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A INPUT -i eth+ -j ACCEPT
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -p icmp -j ACCEPT
iptables -t filter -A FORWARD -i lo -j ACCEPT
iptables -t filter -A FORWARD -i eth+ -j ACCEPT
iptables -t filter -A FORWARD -o eth+ -j ACCEPT
iptables -t filter -A INPUT -j REJECT --reject-with icmp-host-prohibited
iptables -t filter -A FORWARD -j REJECT --reject-with icmp-host-prohibited

iptables-save > /etc/network/iptables

Делаем его исполняемым

# chmod u+x /etc/firewall/iptables.sh

Теперь откроем файл /etc/network/interfaces

# nano /etc/network/interfaces

и в самом конце пропишем строчку:

pre-up iptables-restore < /etc/network/iptables

Также создадим файл /etc/network/iptables

# touch /etc/network/iptables

Теперь вернёмся к файлу /etc/firewall/iptables.sh — запускаем скрипт

# sh /etc/firewall/iptables.sh

Правила файрволла активируются и пропишутся в /etc/network/iptables. В дальнейшем, при перезагрузке системы, система будет тянуть правила из него.

Далее установим dnsmasq

# apt install dnsmasq

После установки система сама запустит службу dnsmasq и добавит её в автозагрузку. Это можно проверить командой:

# systemctl status dnsmasq

Консоль покажет:

Loaded: loaded
Active: active (running)

После этого открываем файл /etc/dnsmasq.conf

# nano /etc/dnsmasq.conf

и в нём пропишем такой конфиг:

domain-needed
bogus-priv
interface=eth1
resolv-file=/etc/resolv.conf
dhcp-range=192.168.100.131,192.168.100.180,24h
cache-size=150

Перезапускаем службу dnsmasq

# systemctl restart dnsmasq

Теперь роутер должен работать и машины в сети получать ip-адреса и dns.

При необходимости в пробросе портов по IP-адресам для доступа из внешней сети нужно снова открыть скрипт /etc/firewall/iptables.sh

# nano /etc/firewall/iptables.sh

в нём после строчки

iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE

добавить такие:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1234 -j DNAT --to-destination 192.168.100.111:1234
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 5678 -j DNAT --to-destination 192.168.100.112:5678

а после строчки

iptables -t filter -A INPUT -i eth+ -j ACCEPT

добавить такие:

iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 1234 -j ACCEPT
iptables -t filter -A INPUT -p tcp -m state --state NEW -m udp --dport 5678 -j ACCEPT
  • 1234 и 5678 — номера портов
  • tcp и udp — протоколы
  • 192.168.100.111 и 192.168.100.112 — ip-адреса машин в локальной (внутренней) сети

Затем снова запускаем скрипт /etc/firewall/iptables.sh

# sh /etc/firewall/iptables.sh

чтобы изменения вступили в силу.

Новые правила заново перечитаются и запишутся в файл /etc/network/iptables, а уже из этого файла при перезагрузке сервера будут автоматически запускаться эти правила.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *