FastNetMon

Saturday, 16 January 2010

Переброс всего трафика на другой сервер средствами iptables

Активируем форвардинг в ядре:

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p


И теперь вот таким правилом отправляем весь трафик с исходного сервера (aa.aa.aa.aa) на удаленный сервер (bb.bb.bb.bb):
iptables -t nat -I PREROUTING -p tcp -d aa.aa.aa.aa --dport 80 -j DNAT --to bb.bb.bb.bb


После этого трафик должен начать уходить наружу, о чем свидетельствуют счетчики в цепочке FORWARD iptables:

iptables -nvL | grep FORWARD
Chain FORWARD (policy ACCEPT 1430K packets, 69M bytes)


Более подробно можно посмотреть так:
iptables -t nat -nvL


Кстати, при этом даже не особо мощные сервера чувствуют себя просто чудесно:
0.3%hi, 1.3%si, 0.0%st


И теперь на принимающей стороне можем видеть резво бегущий трафик:

iptables -nvL | grep dpt:80
348K 17M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW


Полное обнуление правил раутинга можно провести вот так:
iptables -t nat -F


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

При этом, на сервере-получателе будут отображаться адреса клиентов, а не адрес исходного сервера.

Также опционально можно включить маскарадинг, который как раз будет отображать айпи сервера источника:
iptables -t nat -A POSTROUTING -j MASQUERADE


Для отладки всех приведенных извращений рекомендую юзать:
tcpdump -n port 80


основано на: http://www.simplehelp.net/2009/04/15/how-to-redirect-traffic-to-another-machine-in-linux/

No comments :

Post a Comment

Note: only a member of this blog may post a comment.