S3.Blog

4 Октября 2024
A A A   RSS-лента
"Я знаю, что ничего не знаю, но многие не знают и этого". Сократ [?].

Shell/Bash: Создание проксирующего туннеля

Дата последнего изменения: 13 Сентября 2009
Метки статьи: Linux, RedHat, Shell/Bash
В некотором царстве, в некотором государстве жила-была принцесса со сказочным именем Apache Сервовна. И был у нее возлюбленный принц - DomainName Комович. Вот только не разрешал отец принца встречаться с принцессой и с помощью тайной полиции всячески отслеживал куда принц ходит и что делает. И тогда принц построил небольшой домик недалеко от замка принцессы, выкопал в погребе этого домика туннель к своей барышне и таким нехитрым способом вся тайная полиция была обманута, так как думала что дальше этого домика принц не гуляет..  :)
 

Это была сказочка, а теперь по делу:
Если вам вдруг захочется (ну мало ли, всякое бывает) спрятать от посторонних глаз настоящее расположение своего web-сервера, значит пора брать лопату и копать туннель.

Весь текст, написанный ниже, валиден для RedHat-подобных систем (RedHat, Fedora, CentOS) и, вполне возможно, что это не будет работать на FreeBSD, Debian, SunOS и прочих  *nix

Итак, пункт первый:
Покупаем или берем в аренду сервер любой мощности <FAKE_SERVER_IP>.
Регистрируем домен, например domain_for_fake.com, и указываем его IP-адрес: <FAKE_SERVER_IP>
Заходим с правами суперпользователя (root) на сервер <FAKE_SERVER_IP> и даем следующие команды:

ip tunnel add tun0 mode ipip remote <REAL_SERVER_IP> local <FAKE_SERVER_IP> dev eth0
ifconfig tun0 10.105.0.1 pointopoint 10.105.0.2
ifconfig tun0 mtu 1530
ifconfig tun0 up
sysctl -w net.ipv4.ip_forward=1
route add -host 10.0.105.3 gw 10.105.0.2
ipvsadm -A -t <FAKE_SERVER_IP>:80 -p 540
ipvsadm -a -t <FAKE_SERVER_IP>:80 -r 10.0.105.3 -i

где, <REAL_SERVER_IP> - это IP-адрес настоящего нашего web-сервера, который мы прячем.

Для туннелирования FTP еще дайте эти команды:
ipvsadm -A -t <FAKE_SERVER_IP>:21 -p 540
ipvsadm -a -t <FAKE_SERVER_IP>:21 -r 10.0.105.3 -i
ipvsadm -A -t <FAKE_SERVER_IP>:25 -p 540
ipvsadm -a -t <FAKE_SERVER_IP>:25 -r 10.0.105.3 -i

Теперь заходим с правами суперпользователя на наш настоящий web-сервер <REAL_SERVER_IP> и выполняем следующие команды:

ifconfig tunl0 0.0.0.0 up
ip tunnel add tun105 mode ipip remote <FAKE_SERVER_IP> local <REAL_SERVER_IP> dev eth0
ifconfig tun105 10.105.0.2 pointopoint 10.105.0.1
ifconfig tun105 mtu 1500 ifconfig tun105 up ifconfig tunl0:105 10.0.105.3 netmask 255.255.255.255 up iptables -t nat -I PREROUTING -p tcp -d <FAKE_SERVER_IP> -j DNAT --to-destination 10.0.105.3 iptables -t nat -I PREROUTING -p udp -d <FAKE_SERVER_IP> -j DNAT --to-destination 10.0.105.3
Обратите внимание на tun105, 10.0.105.1, 10.0.105.2 и 10.105.0.3
Если вы захотите создать несколько поддельных серверов <FAKE_SERVER_IP>, то для каждого последующего сервера выполняем весь список вышеуказанных команд, но с наращивание на единицу tun и IP.
Т.е., для следующего подключаемого сервера к нашему скрытому, дальше будет tun106, 10.0.106.1, 10.0.106.2 и 10.106.0.3

Итак, что же у нас получилось?
А получилось следующее: информация про домен domain_for_fake.com указывает на то, что этот домен привязан к IP-адресу сервера <FAKE_SERVER_IP>, а на самом деле, при попытке открыть сайт http://domain_for_fake.com , вся информация грузится с сервера <REAL_SERVER_IP>.

У такого туннеля есть несколько хороших качеств:
  1. можно использовать сервер любой мощности
  2. не нужно поднимать apache и сопутствующий софт ради двух строк в httpd.conf:
    ProxyPass / http://<REAL_SERVER_IP>/
    ProxyPassReverse / http://<REAL_SERVER_IP>/
  3. В логах апача на сервере <REAL_SERVER_IP> будут отображаться IP-адреса пользователей, а не <FAKE_SERVER_IP>
  4. В случае DDOS-атаки домена domain_for_fake.com , погибает атакуемый <FAKE_SERVER_IP>, а настоящий сервер чувствует себя спокойно и уверено продолжает работать с остальными доменами, которые подсоединяются к нему через другие <FAKE_SERVER_IP>, которых может быть и сотни и тысячи.

PS: Иногда попадается версия ядра, на которой вся эта каша не работает - тогда приходится менять ядро.

Внимание! Ниже следующие инструкции вы выполняете на свой страх и риск, и я не несу никакой ответственности за возможные последствия!

Выполняем следующее:
  1. даём команду df -h и выводим на экран примонтированные диски
    Файловая система      Разм  Исп   Дост  Исп% смонтирована на
    /dev/hda1              19G  5,3G   13G  30%  /
    /dev/hda2             102M   40M   63M  39%  /boot
  2. в файле /etc/fstab надо заменить LABEL на нормальные значения
    т.е.
    LABEL=/  -- это будет /dev/hda1
    LABEL=/boot  -- будет /dev/hda2

  3. затем скачиваем и устанавливаем ядро kernel-2.4.20-31.9.um.3.i686
    rpm -ivh kernel-2.4.20-31.9.um.3.i686.rpm
  4. потом правим /boot/grub/grub.conf
    устанавливаем default=0 и fallback=1 и заменяем
    root=LABEL=/ на root=/dev/hda1
     
  5. reboot (в этом месте тихо нервничаем и пингуем сервер - поднимется ли?)
После перезагрузки сервера имеем следующее:
Linux localhost.localdomain 2.4.20-31.9.um.3 #1 Thu Sep 9 15:14:40 JST 2004 i686 i686 i386 GNU/Linux

Всё, смена ядра прошла успешно и можно строить наш туннель.


Похожие материалы:




 
  Имя *:   Решите пример *: =
 
Полужирный Курсив Подчеркнутый Перечеркнутый
 
Вставить изображение Сделать цитатой Вставить ссылку Вставить код

Вставить смайл
 
 

 



© S3.Blog: Если критикуешь, не предлагая решения проблемы, то ты становишься частью этой проблемы.