LINUX.ORG.RU

Сообщения xsash

 

Конфликт сетей в iptables

Есть интернет-шлюз с debian 8.3, у него 3 сетевые карты + openvpn туннель, итого eth0 - основная локалка, маска 11.0.0.0/24, dhcp (да, такая сеть, спецом думал, что не с кем не пересекусь, НО...) eth1 - wan, статика eth2 - резерв (планировался под резервный wan) tun0 - туннель до одного сервиса института так же стоит squid

Все настроено и в целом работает как задумано. Но потребовалось создать еще одну сеть, в конкретном частном случае одному компьютеру нужен сетевой адрес, отличный от 11.0.0.* (маски совпали с одним сервисом, ять! раз в год и палка стреляет...)

Решил задействовать eth2, и задал маску 172.20.77.0/24 Добавил в iptables... Проблема:

У всех клиентов 11.0.0.* есть пинг до внешнего ресурса по ip или имени хоста, открываются сайты через браузер (80/443, работают через прокси)

Завожу одного клиента с ip 172.20.77.2, у него есть пинг, у него открываются сайты (мимо прокси). В это время отваливается доступ к сайтам у 11.0.0.*, причем пинг по ip и имени сайта есть. Понимаю, что отваливается 80/443 порт, но сквид не падает, в логах не заметил ничего (бегло смотрел).

Проблема воспроизводится, т.е. пока нет клиента в сети 172.20.77.0/24, все работает

Привожу настройки

/etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

# WAN1
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 188.111.111.111
netmask 255.255.255.0
gateway 188.111.111.254

# LAN
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 11.0.0.1
netmask 255.255.255.0

# LAN2
auto eth2
allow-hotplug eth2
iface eth2 inet static
address 172.20.77.1
netmask 255.255.255.0

# iptables restore
post-up iptables-restore < /etc/iptables.rules

Генерируем iptables

#!/bin/bash

# LAN interface
IF0="eth0"

# WAN interface 1
IF1="eth1"

# WAN interface 2
IF2="tun0"

# LAN2 int
#IF3="eth2"

# IP WAN interface 1
IP1="188.111.111.111"

# IP WAN interface 2
IP2="212.193.47.67"

# gateway 1
P1="188.111.111.254"

# gateway 2
P2="212.193.47.65"

# LAN netmask
P0_NET="11.0.0.0/24"

# LAN VIPnet netmask
P3_NET="172.20.77.0/24"

# WAN1 netmask
P1_NET="188.111.111.0/24"

# WAN2 netmask
P2_NET="212.193.47.0/24"

####################

# Очищаем правила
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Запрещаем все, что не разрешено
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Разрешаем localhost и локалку
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i $IF0 -j ACCEPT
iptables -A INPUT -i $IF3 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o $IF0 -j ACCEPT
iptables -A OUTPUT -o $IF3 -j ACCEPT

# Рзрешаем пинги
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Разрешаем все исходящие подключения сервера
iptables -A OUTPUT -o $IF1 -j ACCEPT

# Разрешаем все входящие подключения сервера
#iptables -A INPUT -i $IF1 -j ACCEPT

# Разрешаем установленные подключения
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# Отбрасываем неопознанные пакеты
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

# Отбрасываем нулевые пакеты
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# Закрываемся от syn-flood атак
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Разрешаем доступ из локалки наружу
iptables -A FORWARD -i $IF0 -o $IF1 -j ACCEPT
iptables -A FORWARD -i $IF3 -o $IF1 -j ACCEPT

# Закрываем доступ снаружи в локалку
iptables -A FORWARD -i $IF1 -o $IF0 -j REJECT
iptables -A FORWARD -i $IF1 -o $IF3 -j REJECT

# Перенаправляем трафик LAN/TUN0
iptables -A FORWARD -p all -i $IF0 -o $IF2 -j ACCEPT
iptables -A FORWARD -p all -o $IF0 -i $IF2 -j ACCEPT

# Резрешим доступ в TUN0
iptables -A OUTPUT -p all -o $IF2 -j ACCEPT

# Переадресация 80 и 443 портов на прозрачный сквид
iptables -t nat -A PREROUTING -p tcp -m tcp -s 11.0.0.0/24 --dport 443 -j REDIRECT --to-ports 3443
iptables -t nat -A PREROUTING -p tcp -m tcp -s 11.0.0.0/24 --dport 80 -j REDIRECT --to-ports 3080

# Включаем NAT
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE
iptables -t nat -A POSTROUTING -s $P3_NET -o $IF1 -j MASQUERADE

# Открываем доступ к SSH (порт 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Сохраняем правила
/sbin/iptables-save  > /etc/iptables.rules

 , ,

xsash
()

Перенаправлять трафик в tun0 при использовании прокси

Появилась задача поднять интернет-шлюз, но столкнулся с небольшой проблемой. Сейчас экспериментирую на виртуалке

Сервер debian 8.3, два интерфейса

# WAN
allow-hotplug eth0
iface eth0 inet dhcp

# LAN
allow-hotplug eth1
iface eth1 inet static
address 12.0.0.2
netmask 255.255.255.0

Поднял dhcp для локалки, bind9, прозрачный сквид (80 и 443 порты)

Вот основные данные

( читать дальше... )

===========

На этом этапе все работает корректно, просто обычный шлюз. Теперь описание проблемы

Есть некая организация «ABC», у нее стоит abc-proxy:3128 на одном из внутренних серваков. Проксик доступен только изнутри клиентам их локалки. Нам необходимо для определенных сайтов выходить через этот прокси.

Сейчас старый шлюз просто пускает весь трафик через openvpn организации ABC и у пользователей нашей сети в браузере прописан их прокси.

Хочется сделать на нашем новом шлюзе разделение трафика, т.е. весь трафик пускается через нашего провайдера, через eth0 (80 и 443 проходит дополнительно через сквид), а если в браузере у пользователя указан abc-proxy:3128, то перенаправлять трафик на tun0

Я предполагаю, что нужно с помощью iptables поставить перенаправление трафика на основе порта 3128. Но совершенно не знаю как быть с маршрутами и остальном.

После поднятия tun0 вывод таблиц такой

( читать дальше... )

( читать дальше... )

( читать дальше... )

Естественно после поднятия openVPN тунеля все встает на мертво.

proxy имеет ip 121.139.32.7

# Generated by iptables-save v1.4.21 on Tue Feb 16 21:13:12 2016
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
COMMIT
# Completed on Tue Feb 16 21:13:12 2016
# Generated by iptables-save v1.4.21 on Tue Feb 16 21:13:12 2016
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -s 12.0.0.0/24 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129
-A PREROUTING -s 12.0.0.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A POSTROUTING -s 12.0.0.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue Feb 16 21:13:12 2016
# Generated by iptables-save v1.4.21 on Tue Feb 16 21:13:12 2016
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Tue Feb 16 21:13:12 2016

 , , , ,

xsash
()

RSS подписка на новые темы