1

Здравствуйте,есть 2 задачи,все они связаны с перенаправлением трафика с одной машины,на другую.
К примеру,мы имеем:
1) Машина №1
IP-loc: 127.0.0.1
IP: 123.456.789.100
IP2: 123.456.789.102
IP3: 123.456.789.103

2)Машина № 2
IP-loc: 127.0.0.2
IP: 123.456.789.101

Как мне перенаправить все пакеты которые идут на машину №1 на IP 123.456.789.102,на другую машину,на IP 123.456.789.101.
Как элементарный пример,того то я хочу:
Форвардинг ФТП (тобишь при входе на FTP по ИП 123.456.789.102,нас кидает на вход на FTP сервера 123.456.789.101).

2

А как-то так?

iptables -t nat -A PREROUTING -p tcp -d 123.456.789.102  --dport 21 -j DNAT --to-destination 123.456.789.101:21
iptables -A FORWARD -i eth0 -d 123.456.789.101 -p tcp --dport 21 -j ACCEPT

3

А возможно ли,как то еще добавить сюда правило на connlimit?

4

Получилось реализовать задумку,только так:
iptables -t nat -A PREROUTING -d IP-машины -p tcp --dport 80 -j DNAT --to-destination Куда-портуем:порт
iptables -t nat -A POSTROUTING -d Куда-портуем:порт -j SNAT --out-interface eth0 --to-source IP-машины

После чего мне вообще нечего не понятно  oO

5

А что не понятного?

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

6

Щас уже 3 листа бумаги исписал,не врубаюсь,логики правил.

1 как я понимаю передает все коннекты которые поступают на IP-машини,по 80 порту,на IP внешний (который указанный).
2рой как я понял,принимает ответ,от удаленного сервера (которому была переадресация в 1ром правиле) и возрвращает результат на IP-машины на 80 порт..
Прав ли я?


И как мне к примеру сделать ограничение на кол.пакетов которые поступают на IP внешний (куда портуем пакеты).
Как сделать логическую цепочку,которая бы фильтровала нежелательные IP к примеру через connlimits?

7

connlimits вроде надо ядро пересобирать с поддержкой.
Правильно понял а второе уже вообще то уже от задач а так частично правильно.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

8

Без второго правила,не работает (не перекидывает на сайт).
Я пробовал много вариаций (пальцем в небо),но только такая связка дала эффект входа на страницу,с IP адреса машины.

Щас буду ковырять,как бы так сделать,что бы коннект который идет через IP-сервера,перед тем как попасть на IP сайта,проходил отсев на превышение коннектов.

9

Просто вопрос в том,какая таблица iptables обрабатывается первее.

И подскажите,если не сложно,как 2рое правило реализировать через iptables FORWARD,и возможно ли вообще его через форвард реализировать...

10

Щас покажу точто пашет у меня.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

11

Мой один из скриптов правда щас доработан ещё чуток

#!/bin/bash

#ФОРВАРДИНГ
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr

#МОДУЛИ
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_conntrack_pptp

#ОЧИСТКА
iptables -F
iptables -F -t nat
iptables -F -t mangle

#ПОЛИТИКА
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#Маршруты
route add -net 192.168.128.0/24 gw 10.213.14.254
route add -host 10.213.1.63 gw 10.213.14.254
route add -host 10.213.17.14 gw 10.213.14.254
route add -host 10.213.47.18 gw 10.213.14.254
route add -host 10.213.6.182 gw 10.213.14.254
route add -host 192.168.131.111 gw 10.213.14.254

#МАСКАРДИНГ
iptables --table nat --append POSTROUTING --out-interface eth3 -j SNAT --to-source 10.213.14.55
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface bond0 -j SNAT --to-source 192.168.0.1
iptables --table nat --append POSTROUTING --out-interface virbr1 -j SNAT --to-source 192.168.100.1
iptables --table nat --append POSTROUTING --out-interface tun0 -j SNAT --to-source 192.168.200.1
iptables --table nat --append POSTROUTING --out-interface tun1 -j SNAT --to-source 192.168.200.1
iptables --table nat --append POSTROUTING --out-interface tun2 -j SNAT --to-source 192.168.200.1
iptables --table nat --append POSTROUTING --out-interface tun3 -j SNAT --to-source 192.168.200.1
iptables --table nat --append POSTROUTING --out-interface tun4 -j SNAT --to-source 192.168.200.1

#МАППИНГ
iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp --dport 873 -j DNAT --to-destination 192.168.100.100:873
iptables -t nat -A PREROUTING -p tcp --dport 8450 -j DNAT --to-destination 192.168.100.100:8450
iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp --dport 3389 -j DNAT --to-destination 192.168.100.100:3389
iptables -t nat -A PREROUTING -s 192.168.128.2 -p tcp --dport 3389 -j DNAT --to-destination 192.168.100.100:3389
iptables -t nat -A PREROUTING -s 10.213.1.63 -p tcp --dport 3389 -j DNAT --to-destination 192.168.100.100:3389

#web
iptables -t nat -A PREROUTING -s 192.168.128.2 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.2:80
iptables -t nat -A PREROUTING -s 10.213.1.63 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.2:80

#ВЫРАВНИВАЕМ MTU
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

inet="ppp0"
local="eth3"

#############Firewall#############
# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED.
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Приводит к связыванию системных ресурсов, так что реальных обмен данными становится не возможным.
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 INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i bond0 -j ACCEPT
iptables -A OUTPUT -o bond0 -j ACCEPT
iptables -A INPUT -i virbr1 -j ACCEPT
iptables -A OUTPUT -o virbr1 -j ACCEPT
iptables -A INPUT -s 192.168.200.0/24 -j ACCEPT
iptables -A OUTPUT -d 192.168.200.0/24 -j ACCEPT

# ICMP СЕРВЕР
iptables -A INPUT -i $inet -p icmp -j ACCEPT
iptables -A OUTPUT -o $inet -p icmp -j ACCEPT
iptables -A INPUT -i $local -p icmp -j ACCEPT
iptables -A OUTPUT -o $local -p icmp -j ACCEPT

#VTUN
iptables -A INPUT -s 10.213.17.14 -j ACCEPT
iptables -A OUTPUT -d 10.213.17.14 -j ACCEPT
iptables -A INPUT -s 10.213.47.18 -j ACCEPT
iptables -A OUTPUT -d 10.213.47.18 -j ACCEPT
iptables -A INPUT -s 10.213.6.182 -j ACCEPT
iptables -A OUTPUT -d 10.213.6.182 -j ACCEPT
iptables -A INPUT -s 192.168.131.111 -j ACCEPT
iptables -A OUTPUT -d 192.168.131.111 -j ACCEPT

#VTUN FORWARD
iptables -A FORWARD -s 192.168.0.2 -d 192.168.200.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.200.0/24 -d 192.168.0.2 -j ACCEPT

#VNC
iptables -A INPUT -i $local -p tcp -m multiport --ports 5900,5901,5902,5903,5904,5905,5906 -j ACCEPT
iptables -A OUTPUT -o $local -p tcp -m multiport --ports 5900,5901,5902,5903,5904,5905,5906 -j ACCEPT

# Разрешаем серверу http, https
iptables -A INPUT -i $inet -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --dport  80 -j ACCEPT

iptables -A INPUT -i $inet -p tcp --sport 21 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --dport  21 -j ACCEPT

iptables -A INPUT -i $inet -p tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --dport  443 -j ACCEPT

iptables -A INPUT -i $inet -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -o $inet -p udp --dport 53 -j ACCEPT

iptables -A INPUT -i $inet -p udp --sport 20 -j ACCEPT
iptables -A OUTPUT -o $inet -p udp --dport 20 -j ACCEPT

iptables -A INPUT -i $local -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o $local -p tcp --sport  22 -j ACCEPT

iptables -A INPUT -i $local -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -o $local -p udp --dport 53 -j ACCEPT


#Разрешаем порты для l2tp
iptables -A INPUT -i $local -p udp --dport 1701 --sport 1701 -j ACCEPT
iptables -A OUTPUT -o $local -p udp --sport 1701 --dport 1701 -j ACCEPT
iptables -A INPUT -i $local -p udp --dport 500 --sport 500 -j ACCEPT
iptables -A OUTPUT -o $local -p udp --sport 500 --dport 500 -j ACCEPT
iptables -A INPUT -i $local -p udp --dport 47 --sport 47 -j ACCEPT
iptables -A OUTPUT -o $local -p udp --sport 47 --dport 17 -j ACCEPT

#############Шейпер#############

#Режем входящую
NUMBERS_LAN="bond0 virbr1"
for number_vl in `echo $NUMBERS_LAN`
do
tc qdisc del dev $number_vl root
tc qdisc add dev $number_vl root handle 1: htb
tc class add dev $number_vl parent 1: classid 1:1 htb rate 100Mbit

tc class add dev $number_vl parent 1:1 classid 1:200 htb rate 200Mbit ceil 200Mbit burst 15
tc class add dev $number_vl parent 1:1 classid 1:100 htb rate 100Mbit ceil 100Mbit burst 15
tc class add dev $number_vl parent 1:1 classid 1:90 htb rate 512Kbit ceil 512Kbit burst 15
tc class add dev $number_vl parent 1:1 classid 1:80 htb rate 128Kbit ceil 512Kbit burst 15

tc qdisc add dev $number_vl parent 1:200 handle 200: sfq perturb 10
tc qdisc add dev $number_vl parent 1:100 handle 100: sfq perturb 10
tc qdisc add dev $number_vl parent 1:90 handle 90: sfq perturb 10
tc qdisc add dev $number_vl parent 1:80 handle 80: sfq perturb 10

tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 200 fw classid 1:200
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 100 fw classid 1:100
tc filter add dev $number_vl parent 1:0 protocol ip prio 2 handle 90 fw classid 1:90
tc filter add dev $number_vl parent 1:0 protocol ip prio 3 handle 80 fw classid 1:80
done

#Это всем нашим юзерам
iptables -t mangle -A FORWARD -s 192.168.0.0/24 -o $inet -j MARK --set-mark 80
iptables -t mangle -A FORWARD -i $inet -d 192.168.0.0/24 -j MARK --set-mark 80
iptables -A FORWARD -s 192.168.0.0/24 -p tcp -m multiport --dport 110,25,143,1024,55777 -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/24 -p tcp -m multiport --sport 110,25,143,1024,55777 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p udp -m multiport --dport 110,25,143,1024,55777 -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/24 -p udp -m multiport --sport 110,25,143,1024,55777 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p icmp -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/24 -p icmp -j ACCEPT

#Разрешаем NETBIOS
iptables -t mangle -A FORWARD -i bond0 -o eth3 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -i eth3 -o bond0 -j MARK --set-mark 100
iptables -A FORWARD -i bond0 -o eth3 -p udp -m multiport  --ports 135,136,137,138,139,445 -j ACCEPT
iptables -A FORWARD -i bond0 -o eth3 -p tcp -m multiport  --ports 135,136,137,138,139,445 -j ACCEPT
iptables -A FORWARD -i eth3 -o bond0 -p udp -m multiport  --ports 135,136,137,138,139,445 -j ACCEPT
iptables -A FORWARD -i eth3 -o bond0 -p tcp -m multiport  --ports 135,136,137,138,139,445 -j ACCEPT

#BACKUP PC
iptables -t mangle -A FORWARD -s 192.168.0.2 -o $inet -j MARK --set-mark 90
iptables -t mangle -A FORWARD -i $inet -d 192.168.0.2 -j MARK --set-mark 90
iptables -A FORWARD -s 192.168.0.2 -o $inet -p tcp -m multiport --dport 80,8450,20,21 -j ACCEPT
iptables -A FORWARD -i $inet -d 192.168.0.2 -p tcp -m multiport --sport 80,8450,20,21 -j ACCEPT

#BACKUP WEB
iptables -t mangle -A FORWARD -s 10.213.1.63 -d 192.168.0.2 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -s 192.168.0.2 -d 10.213.1.63 -j MARK --set-mark 100
iptables -A FORWARD -s 10.213.1.63 -d 192.168.0.2 -p tcp -m multiport --dport 80 -j ACCEPT
iptables -A FORWARD -s 192.168.0.2 -d 10.213.1.63 -p tcp -m multiport --sport 80 -j ACCEPT

iptables -t mangle -A FORWARD -s 192.168.128.2 -d 192.168.0.2 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -s 192.168.0.2 -d 192.168.128.2 -j MARK --set-mark 100
iptables -A FORWARD -s 192.168.128.2 -d 192.168.0.2 -p tcp -m multiport --dport 80 -j ACCEPT
iptables -A FORWARD -s 192.168.0.2 -d 192.168.128.2 -p tcp -m multiport --sport 80 -j ACCEPT

#ТЕРМИНАЛЬНЫЙ СЕРВЕР
iptables -t mangle -A FORWARD -i virbr1 -o eth3 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -i eth3 -o virbr1 -j MARK --set-mark 100
iptables -A FORWARD -i virbr1 -o eth3 -j ACCEPT
iptables -A FORWARD -i eth3 -o virbr1 -j ACCEPT

iptables -t mangle -A FORWARD -i virbr1 -o bond0 -j MARK --set-mark 200
iptables -t mangle -A FORWARD -i bond0 -o virbr1 -j MARK --set-mark 200
iptables -A FORWARD -i virbr1 -o bond0 -j ACCEPT
iptables -A FORWARD -i bond0 -o virbr1 -j ACCEPT

iptables -t mangle -A FORWARD -s 192.168.100.0/24 -o $inet -j MARK --set-mark 90
iptables -t mangle -A FORWARD -i $inet -d 192.168.100.0/24 -j MARK --set-mark 90
iptables -A FORWARD -s 192.168.100.0/24 -o $inet -p tcp -m multiport --dport 80,8450,20,21 -j ACCEPT
iptables -A FORWARD -i $inet -d 192.168.100.0/24 -p tcp -m multiport --sport 80,8450,20,21 -j ACCEPT
iptables -A FORWARD -s 192.168.100.0/24 -p icmp  -j ACCEPT
iptables -A FORWARD -d 192.168.100.0/24 -p icmp  -j ACCEPT

iptables -A FORWARD -i bond0 -o virbr1 -p tcp -m multiport --ports 3389,8450 -j MARK --set-mark 200
iptables -A FORWARD -i virbr1 -o bond0 -p tcp -m multiport --ports 3389,8450 -j MARK --set-mark 200
iptables -A FORWARD -i bond0 -o virbr1 -p tcp -m multiport --ports 3389,8450 -j ACCEPT
iptables -A FORWARD -i virbr1 -o bond0 -p tcp -m multiport --ports 3389,8450 -j ACCEPT

iptables -A FORWARD -i eth3 -o virbr1 -p tcp -m multiport --ports 3389,8450 -j MARK --set-mark 100
iptables -A FORWARD -i virbr1 -o eth3 -p tcp -m multiport --ports 3389,8450 -j MARK --set-mark 100
iptables -A FORWARD -i eth3 -o virbr1 -p tcp -m multiport --ports 3389,8450 -j ACCEPT
iptables -A FORWARD -i virbr1 -o eth3 -p tcp -m multiport --ports 3389,8450 -j ACCEPT

iptables -A FORWARD -i ppp0 -o virbr1 -p tcp -m multiport --ports 8450 -j MARK --set-mark 90
iptables -A FORWARD -i virbr1 -o ppp0 -p tcp -m multiport --ports 8450 -j MARK --set-mark 90
iptables -A FORWARD -i ppp0 -o virbr1 -p tcp -m multiport --ports 8450 -j ACCEPT
iptables -A FORWARD -i virbr1 -o ppp0 -p tcp -m multiport --ports 8450 -j ACCEPT

#Режем исходящую
tc qdisc del dev $inet root
tc qdisc add dev $inet root handle 1: htb
tc class add dev $inet parent 1: classid 1:1 htb rate 100Mbit

tc class add dev $inet parent 1:1 classid 1:90 htb rate 512Kbit ceil 512Kbit burst 15
tc class add dev $inet parent 1:1 classid 1:80 htb rate 128Kbit ceil 512Kbit burst 15

tc qdisc add dev $inet parent 1:80 handle 90: sfq perturb 10
tc qdisc add dev $inet parent 1:80 handle 80: sfq perturb 10

tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 90 fw classid 1:90
tc filter add dev $inet parent 1:0 protocol ip prio 2 handle 80 fw classid 1:80
Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.
+ MAS

12

Не нашол не одного ограничения,кроме шейпинга канала.

Только что с сайджа попробовал проверку сделать.
Атака была на IP машины,которая портует на другой сайт. В итоге - на машине которая портует,не одного IP через netstat не обнаружено. Но на машине которую атаковал,было с машины которая портует все коннекты...

Можно ли как то сделать такую манипуляцию?:
Пакет ---> IP-портующего.сервера --> Передается на локальный файрволл ---> (nat) --> Передача на удаленный сервер.

13

Победа!!!
Все просто.
iptables -t nat -A PREROUTING -d IP-машины -p tcp --dport 80 -j DNAT --to-destination куда-кидаем:80
iptables -t nat -A POSTROUTING -d куда-кидаем -j SNAT --out-interface eth0 --to-source IP-машины
iptables -A FORWARD -d куда-кидаем -p tcp -m tcp -m connlimit --connlimit-above 3 --connlimit-mask 32 -j DROP

Таким образом,на конечной машине,при сайдже в -с 500,было всего 20-35 коннектов от одного IP.
Другими словами,очень хорошый результат,для тех кто хочеш защитить к примеру веб-сервер,с помощью машины с широким каналом.

Спасибо Kettler за старания.  wink

14

Так же решение как просматривать кто атакует конечный сервер (или кто нарушает на уровне nat):
cat /proc/net/ip_conntrack | awk '/src/ {split ($5,A,"="); print A[2]}' | sort | uniq -c | sort -nr

15

MAS пишет:

Победа!!!
Все просто.
iptables -t nat -A PREROUTING -d IP-машины -p tcp --dport 80 -j DNAT --to-destination куда-кидаем:80
iptables -t nat -A POSTROUTING -d куда-кидаем -j SNAT --out-interface eth0 --to-source IP-машины
iptables -A FORWARD -d куда-кидаем -p tcp -m tcp -m connlimit --connlimit-above 3 --connlimit-mask 32 -j DROP

Таким образом,на конечной машине,при сайдже в -с 500,было всего 20-35 коннектов от одного IP.
Другими словами,очень хорошый результат,для тех кто хочеш защитить к примеру веб-сервер,с помощью машины с широким каналом.

Спасибо Kettler за старания.  wink

Просто надо было прочитать iptables tutorial.

16

MAS пишет:

Не нашол не одного ограничения,кроме шейпинга канала.

Только что с сайджа попробовал проверку сделать.
Атака была на IP машины,которая портует на другой сайт. В итоге - на машине которая портует,не одного IP через netstat не обнаружено. Но на машине которую атаковал,было с машины которая портует все коннекты...

Можно ли как то сделать такую манипуляцию?:
Пакет ---> IP-портующего.сервера --> Передается на локальный файрволл ---> (nat) --> Передача на удаленный сервер.

iptables -A FORWARD -s 192.168.0.2 -d 192.168.200.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.200.0/24 -d 192.168.0.2 -j ACCEPT
А это что?)

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.