Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: скрипт iptables  (Прочитано 11835 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн YDenis

  • Автор темы
  • Активист
  • *
  • Сообщений: 615
    • Просмотр профиля
скрипт iptables
« : 04 Марта 2024, 07:55:22 »
Здравствуйте.
Подскажите пожалуйста. Vds с ubuntu server 22.04. Установлены vpn серверы l2tp, openvpn, wireguard. Для правил iptables использую скрипт. Между сетями впн доступ есть, клиенты через впн в инет выходят.
Но я хочу использовать локальную адресацию для доступа к ресурсам этих сетей. Например в сеть1 10.0.1.0/24 находится сервер 10.0.1.100. Я хочу на него выходить из vpn1 (172.21.60.0/24) и из vpn2 (172.21.61.0/24) используя его адрес из сеть1 (10.0.1.100). Локальный роутер разруливает маршрутами 10.0.1.0/24 - vpn. Что нужно изменить в скрипте?
#!/bin/bash
IPTABLES="/sbin/iptables"
 
#######################################################################################################
# Настройки
#######################################################################################################
#                            !!! НЕОБХОДИМО ИЗМЕНИТЬ НА СОБСТВЕННЫЕ !!!
 
IF_OUT="ens3"                  # Имя интерфейса подключенного к интернет
IF_VPN1="tun+" # Openvpn
IF_VPN2="ppp+"                  # l2tp
IF_VPN3="wg+" # wireguard
MASK_VPN1="172.21.60.0/24"      # Указание локальной сети (адрес сети и маска)
MASK_VPN2="172.21.61.0/24" 
MASK_VPN3="172.21.59.0/24" 
 
#######################################################################################################
IF_LO="lo"
ADDR_LO="127.0.0.1"
LOOPBACK="127.0.0.0/8"
 
sysctl -w net.ipv4.ip_forward=1    # Настройка ядра, для разрешения на продвижение пакетов
sysctl -w net.ipv4.ip_dynaddr=1    # Позволяет выполнять корректно MASQUERADE при динамическом изменении ip адреса
 
modprobe ip_nat_ftp                # Для правильной работы активного режима FTP
 
#######################################################################################################
# Сброс и установка правил по умолчанию
#######################################################################################################
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
 
$IPTABLES -P INPUT      DROP    # По умолчанию блокирует входящий трафик
$IPTABLES -P FORWARD    DROP    # По умолчанию блокирует проходящий трафик
$IPTABLES -P OUTPUT     ACCEPT  # По умолчанию разрешает исходящий трафик
 
#######################################################################################################
# Создание цепочек правил
#######################################################################################################
# Базовая проверка пакетов - невалидные пакты (common-check)
        $IPTABLES -N common-check
        $IPTABLES -F common-check
        $IPTABLES -A common-check -m state --state INVALID -j DROP
        $IPTABLES -A common-check -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
        $IPTABLES -A common-check -p tcp ! --syn -m state --state NEW -j DROP
        $IPTABLES -A common-check -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
        $IPTABLES -A common-check -p tcp --tcp-flags ALL ALL -j DROP
        $IPTABLES -A common-check -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
        $IPTABLES -A common-check -p tcp --tcp-flags ALL NONE -j DROP
        $IPTABLES -A common-check -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
        $IPTABLES -A common-check -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# Обработка входящих icmp запросов (icmp-in)
        $IPTABLES -N icmp-in
        $IPTABLES -F icmp-in
        $IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT
        $IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
        $IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
# Разрешает уже установленные соединения (statefull)
        $IPTABLES -N statefull
        $IPTABLES -F statefull
        $IPTABLES -A statefull -m state --state ESTABLISHED,RELATED -j ACCEPT
 
#################################################################################################
# Задание правил для входящего трафика
#################################################################################################
        ## Проверяем пакеты (!первое правило в цепочке)
$IPTABLES -A INPUT -j common-check
        ## Разрешаем icmp запросы к серверу (ping)
$IPTABLES -A INPUT -j icmp-in
        ## Разрешаем SSH (!из интернета)
$IPTABLES -A INPUT -p tcp --dport 22 -i $IF_OUT -j ACCEPT
        ## Разрешаем openvpn (!из интернета)
$IPTABLES -A INPUT -p tcp --dport 443 -i $IF_OUT -j ACCEPT
        ## Разрешаем socks5 (!из интернета)
$IPTABLES -A INPUT -p tcp --dport 1080 -i $IF_OUT -j ACCEPT
        ## Разрешаем l2tp (!из интернета)
## $IPTABLES -A INPUT -p udp --dport 1701 -i $IF_OUT -j ACCEPT
$IPTABLES -A INPUT -i $IF_OUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 500 -i $IF_OUT -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 4500 -i $IF_OUT -j ACCEPT
$IPTABLES -A INPUT -i $IF_OUT -p 50 -j ACCEPT
$IPTABLES -A INPUT -i $IF_OUT -p 51 -j ACCEPT
        ## Разрешаем wireguard (!из интернета)
$IPTABLES -A INPUT -p udp --dport 51820 -i $IF_OUT -j ACCEPT

        ## Разрешаем входящий трафик с локальной сети
$IPTABLES -A INPUT -i $IF_VPN1 -j ACCEPT
$IPTABLES -A INPUT -i $IF_VPN2 -j ACCEPT
$IPTABLES -A INPUT -i $IF_VPN3 -j ACCEPT
        ## Разрешаем локальный интрефейс
$IPTABLES -A INPUT -i $IF_LO -d $LOOPBACK -j ACCEPT
        ## Разрешаем установленные соединения (!последнее правило в цепочке)
$IPTABLES -A INPUT -j statefull
 
 
#################################################################################################
# Задание правил для исходящего трафика
#################################################################################################
# По умолчанию исходящий трафик разрешен
        ## Проверяем пакеты (!первое правило в цепочке)
$IPTABLES -A OUTPUT -j common-check
 
 
#################################################################################################
# Задание правил для продвижения пакетов
#################################################################################################
        ## Проверяем пакеты (!первое правило в цепочке)
$IPTABLES -A FORWARD -j common-check
        ## Организация NAT
$IPTABLES -t nat -A POSTROUTING -s $MASK_VPN1 -o $IF_OUT -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -s $MASK_VPN2 -o $IF_OUT -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -s $MASK_VPN3 -o $IF_OUT -j MASQUERADE
 
        ## Разрешаем !весь! проходящий трафик с локальной сети (контроль маска и интерфейс!)
$IPTABLES -A FORWARD -i $IF_VPN1 -s $MASK_VPN1 -j ACCEPT
$IPTABLES -A FORWARD -i $IF_VPN2 -s $MASK_VPN2 -j ACCEPT
$IPTABLES -A FORWARD -i $IF_VPN3 -s $MASK_VPN3 -j ACCEPT

        ## Разрешаем !весь! проходящий трафик между локальными интерфейсами
$IPTABLES -A FORWARD -i $IF_VPN1 -o $IF_VPN2 -j ACCEPT
$IPTABLES -A FORWARD -i $IF_VPN2 -o $IF_VPN1 -j ACCEPT
$IPTABLES -A FORWARD -i $IF_VPN1 -o $IF_VPN3 -j ACCEPT
$IPTABLES -A FORWARD -i $IF_VPN2 -o $IF_VPN3 -j ACCEPT
$IPTABLES -A FORWARD -i $IF_VPN3 -o $IF_VPN1 -j ACCEPT
$IPTABLES -A FORWARD -i $IF_VPN3 -o $IF_VPN2 -j ACCEPT

        ## Разрешаем установленные соединения (!последнее правило в цепочке)
$IPTABLES -A FORWARD -j statefull
##################################################################################################

iptables-save > /etc/iptables/rules.v4

echo done!

Вопрос 2: этот скрипт я создал:
sudo nano /etc/network/if-pre-up.d/fw.sh
установил права:
sudo chmod 755 /etc/network/if-pre-up.d/fw.sh
запускаю вручную:
sudo /etc/network/if-pre-up.d/fw.sh
после перезагрузки естественно его нужно руками запустить. Как автоматизировать его запуск при запуске системы?

благодарю

 

Страница сгенерирована за 0.026 секунд. Запросов: 22.