1

Всех приветствую !

Имеем на борту linux шлюз с поднятым OpenVPN сервером центральный офис подсеть за шлюзом скажем 192.168.10.0/24
Удаленный офис OpenVPN клиент вшит в Mikrotik подсеть за роутером скажем 192.168.1.0/24
OpenVPN подсеть 192.168.99.0/24

Задача чтобы скажем вся подсеть центрального офиса 192.168.10.0/24 могла только пинговать все подсеть филиала 192.168.1.0/24.
И только один ПК из центрального офиса с адресом 192.168.10.25 имел доступ на пк удаленного офиса 192.168.1.50 только на порт 55.
И все.
Т.е. необходима фильтрация по ip адресам за роутером внутри OpenVPN тунеля.

В данные момент клиенты центрального офиса и удаленного видят друг друга без ограничений.

Ниже приведен примерный конфиг который используется.

#!/bin/sh
################################################################################################################################################
## opisyvayu interfeis na storone provaidera
INET_IP="xx.xx.xx.xx"
INET_IFACE="eth0"
INET_BROADCAST="yy.yy.yy.yy"
#################################################################################################################################################
## opisyvayu interfeis na storone localnoi seti
LAN_IP="192.168.10.1"
LAN_IP_RANGE="192.168.10.0/24"
LAN_IFACE="eth1"
###################################################################################################################################################
## opisyvayu podset dlya VPN
LAN_VPN_RANGE="192.168.99.0/24" #delaem podset dlya VPN
###################################################################################################################################################
# Razreshit' zaschitu ot fal'sifikacii IP-adresov. 
# Vklyuchit' proverku ishodnyh adreso 
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do 
echo 1 > $f 
done 
####################################################################################################################################################
# Sbrasyvaem vse pravila
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
#####################################################################################################################################################
# Ustanavlivaem politiki po umolchaniyu
# Zapreschaem ves' vhodyaschii trafik:
iptables -P INPUT DROP
# Zapreschaem ishodyaschii trafik:
iptables -P OUTPUT DROP
# Zapreschaem peresylku trafika:
iptables -P FORWARD ACCEPT
##########################
#iptables -P FORWARD DROP
#iptables -A FORWARD -p tcp -i eth0 -j ACCEPT
#iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#######################################################################################################################################################
# Простая защита от DoS-атаки
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# Защита от спуфинга
iptables -I INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset
# Защита от попытки открыть входящее соединение TCP не через SYN
iptables -I INPUT -m conntrack --ctstate NEW -p tcp ! --syn -j DROP
# Закрываемся от кри ого icmp
iptables -I INPUT -p icmp -f -j DROP
#######################################################################################################################################################
# Razreshaem vhodyaschii trafik v ramkah ustanovlennyh soedinenii:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
########################################################################################################################################################
# Razreshaem ves' trafik vnutri servera:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
########################################################################################################################################################
# Разрешаю самому инет шлюзу доступ в инет на все порты и все протоколы
iptables -A OUTPUT -o eth0 -j ACCEPT
##########################################################################################################################################################
# ICMP: разрешаем пинговать наш шлюз из интернета
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
##########################################################################################################################################################
#Разрешаем нашему шлюзу пинговать нашу локальную сеть
iptables -A OUTPUT -p icmp -j ACCEPT
###########################################################################################################################################################
#DNS
iptables -A INPUT  -i eth0 -p udp -m udp --sport 53 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT
#vklyuchayu ip forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward 
modprobe ip_nat_ftp
###########################################################################################################################################################
# imya i mesto nahojdenie utility
IPTABLES="/usr/sbin/iptables"
#podcluchayu modyl
/sbin/depmod -a #podcluchayu modyl
/sbin/modprobe ip_tables 
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter 
/sbin/modprobe iptable_mangle 
/sbin/modprobe iptable_nat 
/sbin/modprobe ipt_LOG 
/sbin/modprobe ipt_limit 
/sbin/modprobe ipt_state 
/sbin/modprobe ip_nat_ftp
###########################################################################################################################################################
#Разрешаем компъютерам в нашей локальной сети пинговать интернет ресурсы
iptables -t nat -A POSTROUTING -o eth0 -p icmp -j MASQUERADE # Разрешаем пинги
###########################################################################################################################################################
iptables -t nat -A POSTROUTING -o eth0 -d 8.8.8.8 -j MASQUERADE #ДНС сервер от GOOGLE
iptables -t nat -A POSTROUTING -o eth0 -d 8.8.4.4 -j MASQUERADE #ДНС сервер от GOOGLE
iptables -t nat -A POSTROUTING -o eth0 -d ww.ww.ww.ww -j MASQUERADE #ДНС сервер от провайдера
iptables -t nat -A POSTROUTING -o eth0 -d ss.ss.ss.ss -j MASQUERADE #ДНС сервер от провайдера
###########################################################################################################################################################
#Дать доступ определеннопу ПК с адресом 192.168.10.2 
#на все ресурсы в сети интернет без ограничений (комп админа локальный)
iptables -t nat -A POSTROUTING -p tcp -s 192.168.10.2 -j SNAT --to-source $INET_IP
###########################################################################################################################################################
#Доступ для ip 192.168.10.11 на инет шлюз на порт 8080 
iptables -A INPUT -p tcp --dport 8080 -s 192.168.10.11 -j ACCEPT
##########################################################################################################################################################
#Доступ для ip 192.168.10.2 на инет шлюз на все порты локальный ПК админа
iptables -A INPUT -s 192.168.10.2 -j ACCEPT
###########################################################################################################################################################
#Дать доступ для всей локальной сети на сам шлюз на порт 80
iptables -A INPUT -p tcp --dport 80 -s 192.168.10.0/24 -j ACCEPT
iptables -A OUTPUT -d 192.168.10.0/24 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
###########################################################################################################################################################
#Дать доступ для всей локальной сети на сам шлюз на порт 3128
iptables -A INPUT -p tcp --dport 3128 -s 192.168.10.0/24 -j ACCEPT
iptables -A OUTPUT -d 192.168.10.0/24 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
###########################################################################################################################################################
#Разрешаем доступ из внутреней сети наружу-интернет для определенных ip адресов опция multiport поддерживает до 15 портов
iptables -t nat -A POSTROUTING -p tcp -s 192.168.10.3 -m multiport --dports 110,3128,443,25,80,21,2041,2042 -j SNAT --to-source $INET_IP 
iptables -t nat -A POSTROUTING -p tcp -s 192.168.10.4 -m multiport --dports 110,3128,443,25,80,21,2041,2042 -j SNAT --to-source $INET_IP
iptables -t nat -A POSTROUTING -p tcp -s 192.168.10.5 -m multiport --dports 110,3128,443,25,80,21,2041,2042,1500 -j SNAT --to-source $INET_IP
iptables -t nat -A POSTROUTING -p tcp -s 192.168.10.6 -m multiport --dports 110,3128,443,25,80,21,2041,2042 -j SNAT --to-source $INET_IP
iptables -t nat -A POSTROUTING -p tcp -s 192.168.10.7 -m multiport --dports 110,3128,443,25,80,21,2041,2042 -j SNAT --to-source $INET_IP
iptables -t nat -A POSTROUTING -p tcp -s 192.168.10.8 -m multiport --dports 110,3128,443,25,80,21,2041,2042 -j SNAT --to-source $INET_IP
iptables -t nat -A POSTROUTING -p tcp -s 192.168.10.9 -m multiport --dports 110,3128,443,25,80,21,2041,2042 -j SNAT --to-source $INET_IP
iptables -t nat -A POSTROUTING -p tcp -s 192.168.10.10 -m multiport --dports 110,3128,443,25,80,21,2041,2042 -j SNAT --to-source $INET_IP
############################################################################################################################################################
#Одному из компов локалки с адресом 192.168.10.17 
#открыть только 25 и 110. (на любые pop и smtp адреса 
#независимо на каком внешнем портале находится почта)
iptables -t nat -A POSTROUTING -p tcp -s 192.168.10.17 --dport 25 -j SNAT --to-source $INET_IP
iptables -t nat -A POSTROUTING -p tcp -s 192.168.10.17 --dport 110 -j SNAT --to-source $INET_IP
############################################################################################################################################################
#Одному пк в локалке с адресом 192.168.10.18 дать доступ 
#на 80 порт только на определенный ip допустим в
#по вдресу 62.122.247.50 крутится некий web портал
iptables -t nat -A POSTROUTING -p tcp -s 192.168.10.18 -o eth0 -d rr.rr.rr.rr --dport 80 -j SNAT --to-source $INET_IP
###########################################################################################################################################################
#Дать доступ из вне с определенного IP например 93.179.122.36 адреса на шлюз 
#на все порты (если потребуется админу из дома зайти на шлюз например)
iptables -A INPUT -i eth0 -s zz.1zz.zz.zz -j ACCEPT
iptables -A OUTPUT -o eth0 -d zz.zz.zz.zz -j ACCEPT
###########################################################################################################################################################
#Даем доступ адресу 192.168.99.10 из openvpn подсети доступ на шлюз и на все пк в локалке,  на все порты (ip принадлежит админу :-))
iptables -A INPUT -i tun0 -s 192.168.99.10 -j ACCEPT
iptables -A OUTPUT -o tun0 -d 192.168.99.10 -j ACCEPT
############################################################################################################################################################
#Даем доступ адресу 192.168.99.2 из openvpn подсети доступ на шлюз и на все пк в локалке, на порт 80
iptables -A INPUT -i tun0 -s 192.168.99.8 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -o tun0 -d 192.168.99.8 -p tcp --dport 80 -j ACCEPT
############################################################################################################################################################
#Разрешаю доступ с определенного ip адреса на конкретный порт т.е. ssh т.е. 22 порт по протоколу tcp на наш инет шлюз
iptables -A INPUT -s 149.255.30.6 -d $INET_IP -p tcp --dport 22 -j ACCEPT
############################################################################################################################################################
#Дать досту из вне с любого IP адреса на порт 1194 и 25 OPENVPN и почта
iptables -A INPUT -i $INET_IFACE -p tcp -s 0/0 --sport 513:65535 -d $INET_IP -m multiport --dports 1194,25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o $INET_IFACE -p tcp -s $INET_IP -d 0/0 --dport 513:65535 -m conntrack --ctstate ESTABLISHED -j ACCEPT
##########################################################################################################################################################