Показаны сообщения с ярлыком iptables. Показать все сообщения
Показаны сообщения с ярлыком iptables. Показать все сообщения

пятница, 1 апреля 2011 г.

Почта (и не только) через iptables

Порой бывает нужно дать почтовым клиентам внутри локальной сети доступ к внешним серверам. В сети очень много вариантов решения данной задачи, но в этом море очень сложно найти простой ответ, для начинающего пользователя. Зачастую даже и не знаешь как найти нужную информацию.

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

1. Разрешим пересылку пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward
2. Командуем iptables пускать нас на почту, да и вообще куда угодно
а) для всех клиентов в подсети 192.168.0.0
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
б) для конкретного клиента по IP-адресу
sudo iptables -t nat -A POSTROUTING -s 192.168.0.22 -o ppp0 -j MASQUERADE
СЛЕДУЕТ ОБРАТИТЬ ВНИМАНИЕ НА СЛЕДУЮЩИЕ МОМЕНТЫ:
  1. Чтобы каждый раз не выполнять команду echo 1 > /proc/sys/net/ipv4/ip_forward, нужно в файле /etc/sysctl.conf раскомментировать (или вписать) такую строчку:
    net.ipv4.ip_forward=1
  2. Команду echo 1 > /proc/sys/net/ipv4/ip_forward не получится выполнить через sudo. Сначало нужно выполнить sudo su, а уже потом, с правами root-а делать echo
  3. На клиентской машине в качестве шлюза должен быть указан адрес компьютера, на котором настраиваем iptables.
  4. На клиентской машине должен быть указан адрес DNS сервера.
  5. После перезагрузки настройки iptables слетят, поэтому можно добавить команду, например эту: iptables -t nat -A POSTROUTING -s 192.168.0.22 -o ppp0 -j MASQUERADE в файл /etc/rc.local, чтобы она автоматически срабатывала при запуске системы
  6. Указав интерфейс ppp0, я имел ввиду внешний интерфейс, т.е. это может быть и eth0

четверг, 7 октября 2010 г.

Простой Port Mapping

Эта заметка из серии "Записки склерозника" :) Так что я не буду вдаваться в подробности, тем более суть всей заметки сводится к двум командам для iptables.

Предыстория: под виндой в UserGate раньше иногда пользовался функцией portmapping. Трудно в двух словах описать что это такое, поэтому лучше приведу живой пример.

Итак, в сети у нас есть 3 машины:
1. Сервер, на котором крутится сайт (80-й порт) IP-адрес машины 192.168.0.1
2. Рабочая станция. Нужно с неё получить доступ к сайту на вышеуказанном сервере. IP-адрес машины: 192.168.1.1
3. Шлюз/сетевой экран (стоит между сервером и рабочей станцией, имеет два сетевых интерфейса, смотрящий в разные сети). IP-адреса: 192.168.0.2 (смотрит в сторону сервера) и 192.168.1.2 (в сторону рабочей станции)

На рисунке все понятно и наглядно показано.

Можно, конечно, назначить 192.168.1.2 шлюзом по умолчанию для рабочей станции и настроить маршрутизацию, чтобы спокойно был виден весь сервер, но мне нужно чтобы был доступ только к сайту.
реализация проста, вот три строчки кода:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A PREROUTING -p tcp --dst 192.168.1.2 --dport 81 -j DNAT --to-destination 192.168.0.1:80
# iptables -t nat -I POSTROUTING -p tcp --dst 192.168.0.1 --dport 80 -j SNAT --to 192.168.0.2
Т.е., чтобы попасть на сайт, расположенный на сервере (192.168.0.1), в браузере рабочей станции нужно просто ввести адрес шлюза (192.168.1.2:81)

Если на шлюзе использовать 80-й порт, то в браузере можно просто писать адрес, не указывая порт. Здесь я использовал 81-й порт для наглядности и на тот случай, если он вдруг будет занят.

Написано по мотивам этой страницы