Главная
Главная Руководства Debian › Debian, iptables, NAT, роутер для доступа в интернет.



Автор:

Статья опубликована: 2016-02-12 21:00:35
Последние правки: 2018-03-11 20:18:07

Роутер из Debian. Настраиваем брандмауер. NAT.
Во всех примерах используются два интерфейса:
eth0 - внешний, через него подключены к провайдеру
ppp0 - vpn соединение, через него ходим в интернет
eth1 - внутренняя сеть, 192.168.2.0/24


  • Утилита для загрузки правил

    из/в файлы, это позволяет правилам пережить перезапуск системы:
    ~# apt-get install iptables-persistent
    
    Файлы, где хранятся правила (в них менять ничего не надо!!!):
    IPv4 : /etc/iptables/rules.v4
    IPv6 : /etc/iptables/rules.v6

    Сохраняем правила в файлы:
    ~# iptables-save > /etc/iptables/rules.v4
    
    ~# ip6tables-save > /etc/iptables/rules.v6
    
    Восстановление правил из файла:
    ~# iptables-restore < /etc/iptables/rules.v4
    
    ~# ip6tables-restore < /etc/iptables/rules.v6
    

  • iptables

    Посмотреть активные правила
    ~# iptables --list-rules
    
    Пример правил
    # Закрываем изначально ВСЁ
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP
    
    # разрешаем loopback
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
    
    # разрешаем исходящие на интерфейсе провайдера, для поднятия vpn
    iptables -A OUTPUT -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
    
    # разрешаем все для локальной сети
    iptables -A INPUT -i eth1 -j ACCEPT
    iptables -A OUTPUT -o eth1 -j ACCEPT
    
    # доступ в интернет, разрешаем исходящие соединения
    iptables -A OUTPUT -o ppp0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
    # разрешаем подключение извне к transmission
    iptables -A INPUT -i ppp0 -p tcp -m tcp --dport 9091 -j ACCEPT
    
    # разрешаем на всех интерфейсах уже установленные соединения
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    
    # отгоняем ущербных
    -A INPUT -m state --state INVALID -j DROP
    -A FORWARD -m state --state INVALID -j DROP
    
    Данные правила разрешают доступ к серверу из локальной сети, но в интернет можно попасть только с самого сервера.


  • NAT

    Настраиваем доступ в интернет из локальной сети через сервер.

    Разрешаем маршрутизацию трафика.
    ~# echo 1 > /proc/sys/net/ipv4/ip_forward
    
    Запоминаем, чтобы работало после перезагрузки, в /etc/sysctl.conf ищем и раскомментируем строчку:
    net.ipv4.ip_forward=1
    
    Добавляем строчки в iptables, разрешаем транзит пакетов из внутренней сети во внешнюю и обратно
    iptables -A FORWARD -i eth1 -o ppp0 -s 192.168.2.0/24 -j ACCEPT
    iptables -A FORWARD -i ppp0 -o eth1 -d 192.168.2.0/24 -j ACCEPT
    
    Так как у нас vpn-интерфейс с динамическим ip, то применяем MASQUERADE. Я написал скриптик /etc/ppp/ip-up.d/nat:
    #!/bin/sh
    
    iptables -t nat -F
    iptables -A POSTROUTING -o ppp0 -t nat -j MASQUERADE
    
    Он будет срабатывать каждый раз, когда поднимется vpn-соединение.