@kRosis

Настройки iptables для транзита на другой сервер?

Доброго времени суток.
Есть две тачки с debian и WS. На WS стоит IIS с кучей сайтов, все они сейчас смотрят в интернет, нужно спрятать их за тачку с debian.
Debian тачка имеет два сетевых интерфейса:
eth0 22.22.22.22 - интернет
eth1 192.168.1.100 - локалка

WS:
eth0 33.33.33.33
eth1 192.168.1.200

Локалка общая, тачки друг друга пингуют по локалке.

Я делаю так:
iptables -F
iptables -t nat -F
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 9090 -j ACCEPT # хочу через этот порт пустить трафик

#Пакеты с нужного адреса заворачиваем на компьютер
iptables -t nat -A PREROUTING -s 22.22.22.22 --sport 8172 -i eth0 -j DNAT --to-destination 196.168.1.200 --dport 9090
#Разрешаем эти пакеты
iptables -t filter -A FORWARD -s 22.22.22.22 -d 192.168.1.200 -j ACCEPT
#Получаем интернет в локалке
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 22.22.22.22
#Прописываем путь пакета с debian до WS
iptables -t nat -A POSTROUTING -d 192.168.1.200 --sport 9090 -s 192.168.1.0/24 -j SNAT --to-source  192.168.1.100 --dport 9090
#Меняем адрес источника на поддельный
iptables -t nat -A POSTROUTING -s 22.22.22.22 -j SNAT --to-source 192.168.1.150
#Добавляем новый адрес роутеру XX - любое незанятое в локалке число
ip addr add 192.168.1.150/24 dev eth1
#где .150 - не занятый локальный адрес

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP


Но что-то идёт не так.
Если что текст перепечатывал, чтоб ещё раз продумать, могут быть очепятки, но при выполнении скрипта ошибок не выдаёт.
  • Вопрос задан
  • 1486 просмотров
Решения вопроса 1
@krosh
Что-то у Вас каша с правилами. Чтобы порт пробросить в локальную сеть нужно три правила в цепочках: PREROUTING, POSTROUTING и FORWARD.

Попробуйте почистить все и использовать такие:
#Пакеты с нужного адреса заворачиваем на компьютер
iptables -t nat -A PREROUTING -d 22.22.22.22 --dport 9090 -i eth0 -j DNAT --to-destination 196.168.1.200:9090

#Получаем интернет в локалке - это не обязательно, если инет через другой шлюз
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 22.22.22.22

#Меняем адрес источника на локальный
iptables -t nat -A POSTROUTING -d 196.168.1.200 -p tcp -m tcp --dport 9090 -j SNAT --to-source 196.168.1.100

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -m comment --comment "ALLOW Установленные соединения" -j ACCEPT
iptables -A FORWARD -p tcp -m tcp --dport 9090 -m comment --comment "ALLOW LAN all 9090" -j ACCEPT


Цепочка INPUT не влияет на проходящий трафик, можете правило для 9090 от туда удалять.

Если у Debian есть .100, то не вижу смысла ему еще выдавать какой-то.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@kRosis Автор вопроса
Кому интересно конечный конфиг у меня такой:
# Пакеты с нужного адреса заворачиваем на компьютер
/sbin/iptables -t nat -A PREROUTING -p tcp --dport 9090 -d $ip-deb -i eth0 \
-j DNAT --to-destination $local-ip-ws:9090

# Меняем адрес источника на локальный, не использую т.к. я так понял это надо для общения компьютеров внутри сети через внешний сервер, а оно мне не надо.
#/sbin/iptables -t nat -A POSTROUTING -d $local-ip-ws -p tcp \
#-m tcp  -j SNAT --to-source $local-ip-deb

# Разрешаем соединение для новых, прошедших проверку, пакетов
/sbin/iptables -A FORWARD -p tcp -m conntrack --ctstate NEW \
-m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
/sbin/iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

# Разрешаем прохождение пакетов для порта через FORWARD
/sbin/iptables -A FORWARD -p tcp -m tcp --dport 9090 -j ACCEPT


nginx почему-то не хотел работать, если прописывать просто listen 80; или listen 443 ssl;
зато заработало listen ip-deb:80; и listen ip-deb:443 ssl;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы