Проброс портов в Линукс с помощью iptables

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

C его помощью, например, можно достаточно легко организовать локальную сеть с NAT.

Начнем с краткого описания нужных операций в iptables:

Синтаксис: iptables -t *таблица* *команда*

Ключи:
-L — список правил
-F — удалить все правила
-A — добавить правило
пример: iptables -t *таблица* -A *цепочка* *правило*
-D — удалить правило

пример: iptables -t *таблица* -D *цепочка* *номер правила*

Для сохранения текущих правил выполните:

[code]
/etc/init.d/iptables save
[/code]

И так, допустим, у нас есть локальная сеть, и нам необходимо обеспечить ее Интернетом, а так же пробросить порты с внешнего адреса в локальную сеть.



Для начала нам нужно включить форвардинг:
[code]
echo 1 > /proc/sys/net/ipv4/ip_forward
[/code]

Для автоматического включения открываем файл /etc/sysctl.conf и ищем там строку и убираем знак комментария:
# net.ipv4.ip_forward=1
у нас получается:
net.ipv4.ip_forward=1

  • 1. Доступ в Интернет
  • Предположим, что eth0 подключен к провайдеру и имеет IP-адрес в его подсети, допустим 199.199.199.2.
    eth1 подключен к компьютеру в локальной сети, которому нужно обеспечить доступ в Интернет через NAT.
    eth1 имеет адрес 10.10.10.1.
    IP-адрес компьютера, которому необходимо обеспечить доступ — 10.10.10.2

    Даем доступ интерфейсу eth1 с IP-адреса 10.10.10.2:
    [code]
    iptables -t nat -A POSTROUTING -s 10.10.10.2 -o eth1 -j MASQUERADE
    [/code]
    или всей подсети:
    [code]
    iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE
    [/code]

  • 2. Проброс порта
  • Взависимости от ситуации внешний порт можно пробросить на локальную машину.

    Например, у нас имеется ftp сервер внутри сети — 10.10.10.2 порт 21,и нам нужно разрешить пользователям подключаться к нему из Интеренета.
    Внешний адрес — 199.199.199.2, адрес ftp — 10.10.10.2, порт — 21.
    [code]
    iptables -t nat -A PREROUTING —dst 199.199.199.2 -p tcp —dport 21 -j DNAT —to-destination 10.10.10.2
    iptables -I FORWARD -i eth0 -o eth1 -d 10.10.10.2 -p tcp -m tcp —dport 21 -j ACCEPT
    [/code]
    Первое правило добавляется в табицу трасляции (-t nat), оно перенапрявляет пакеты, посланные на порт 21, с адреса 199.199.199.2 на 10.10.10.2.
    Второе правило разрешает пакетам проходить по данному маршруту.

    Для проброса более одного порта используется двоеточие.
    Например для проброса всех портов используйте комманды:

    [code]
    iptables -t nat -A PREROUTING —dst 199.199.199.2 -p tcp —dport 1024:65535 -j DNAT —to-destination 10.10.10.2
    iptables -I FORWARD -i eth0 -o eth1 -d 10.10.10.2 -p tcp -m tcp —dport 1024:65535 -j ACCEPT
    [/code]

    В случае переадресации внешний порт можно изменить, например, с 21 на 4321.
    Например, нам надо замаскировать сервис так, чтобы при подключении к 199.199.199.2:4321 клиент попадал на 192.168.0.2:21.
    Для этого добавляем правила:

    [code]
    iptables -t nat -A PREROUTING —dst 199.199.199.2 -p tcp -m tcp —dport 4321 -j DNAT —to-destination 10.10.10.2:21
    iptables -I FORWARD -i eth0 -o eth1 -d 10.10.10.2 -p tcp -m tcp —dport 21 -j ACCEPT
    [/code]
    strong

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *