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

пятница, 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