LINUX.ORG.RU
ФорумAdmin

IPTABLES Проблема проброса портов

 ,


0

1

Народ всем привет, недавно начал осваивать азы IPtables. Вроде по тихому начал въезжать, проблема в ограниченом времени на создание проекта. Суть задачи такая, настроить шлюз в интернет, для доступа пользователей к онному, а так же для доступа из вне к нашим сервисам. (Web/ssh/asterisk/mail. ну и тд.) Погуглив чутка немного растерялся. т.к все настраивают Iptables по своему, кто скриптом, кто из консоли правила добавляет, особо линивые юзают веб оболочки, ну к примеру webmin. Я пробовал много вариантов, чтение манов в том числе) в итоге после того как скопипастил один скриптик с описанием правил смог организовать нат для своей сети на определенные порты 80,443 а так же тем кому надо открыл доступ ко всем портам.

enp2s0=192.168.1.10 эта сетевая смотрит в интернет

enp4s0=192.168.112.21 эта сетевая смотрит в мою сеть

Собственно вот сам скрипт


#!/bin/bash

#Очистка всех цепочек

iptables -F

iptables -F -t nat

iptables -F -t mangle

iptables -X

iptables -X -t nat

iptables -X -t mangle

#Политика по умолчанию - запретить все, что не разрешено

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

EXT_IP=192.168.1.10

INT_IP=192.168.112.21

INFRA=192.168.112.0/24

VSE=192.168.112.10/32

iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#iptables -A FORWARD -i enp4s0 -m state --state NEW -m tcp -p tcp -d 192.168.112.1 --dport 22 -j ACCEPT

iptables -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

iptables -A INPUT -i lo -p all -j ACCEPT

iptables -A OUTPUT -o lo -p all -j ACCEPT

iptables -A INPUT -i enp2s0 -j ACCEPT

iptables -A OUTPUT -o enp2s0 -j ACCEPT

#iptables -A FORWARD -i enp2s0 -s 192.168.1.0/24 -p tcp -m multiport --dports 21,22,25,110,143 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i enp2s0 -s 192.168.112.0/24 -p udp -m multiport --dports 53 -j ACCEPT

iptables -A FORWARD -i enp2s0 -s 192.168.112.0/24 -p tcp -m multiport --dports 53 -j ACCEPT
iptables -I FORWARD 1 -i enp4so -o enp2s0 -d 192.168.112.1 -p tcp -m tcp --dport 22 -j ACCEPT

iptables -A INPUT -i enp2s0 -p ICMP -j ACCEPT

iptables -A OUTPUT -o enp2s0 -p ICMP -j ACCEPT

##iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE

##iptables -t nat -A PREROUTING -i enp4s0 -p tcp --dport 22 -j DNAT --to-destination 192.168.112.1:22

iptables -t nat -A PREROUTING --dst ${EXT_IP} -p tcp --dport 22 -j DNAT --to-destination 192.168.112.1

iptables -t nat -A POSTROUTING -s ${INFRA} -p tcp -m multiport --dports 80,443,55337 -j SNAT --to-source ${EXT_IP}

iptables -t nat -A POSTROUTING -s ${VSE} -j SNAT --to-source ${EXT_IP}

Мне осталось пробросить порт из вне к примеру 22 на комп в сети 192.168.112.1 за моим шлюзом В скрипте есть закоменченные строки, это мои жалкие попытки пробросить 22 порт. В общем как на основе «моего» скрипта пробрасывать порты из интернета внутрь моей сети?

iptables -I FORWARD 1 -i enp4so -o enp2s0 -d 192.168.112.1 -p tcp -m tcp --dport 22 -j ACCEPT
enp4so

enp4s0
Стоп. Пакет извне должен попадать внутрь, а не наоборот. -o enp4s0 -i enp2s0.

NightSpamer ()
Последнее исправление: NightSpamer (всего исправлений: 1)

Настраивают много каким образом, но для форумов лучше показывать вывод ″iptables-save″ или ″iptables -L -n -v″ для каждой из таблиц (filter, mangle, nat и raw, если используется). И этот вывод снабжать комментариями. Потому что читать скрипт тяжело, особенно, если там смешано ″-A″ и ″-I″, это нужно в голове представлять правила в нужном порядке.

В отношении DNAT'а. Если у вас «пробрасывается» порт из Инета, то ведь входящим интерфейсом будет enp2s0, а не enp4s0, то есть ″-i enp2s0″. Ну и FORWARD-правило, наверное, запишется по другому. И вобще, обычно 22 порт не пробрасывают, с одной стороны на него тупо ломятся боты, только лишние записи в логах, с другой стороны, на нём обычно весит ssh самого шлюза, которым тоже иногда хочется удалённо управлять. ИМХО, ssh шлюза на 33 порт, а пробрасывать на 192.168.112.1:22 какой-нибудь порт 3333.

mky ★★★★★ ()
Ответ на: комментарий от mky

Про iptables-save верно. Я только сейчас заметил

iptables -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
на несколько строчек выше.

NightSpamer ()
Ответ на: комментарий от NightSpamer

Да, ″--state NEW,ESTABLISHED,RELATED -j ACCEPT″ делает не нужным ″-A FORWARD -i enp4s0″, но я начал читать все закоменченные правила, так как именно их ТС пытался написать сам, нужно было объяснить ему, в чём он ошибся.

mky ★★★★★ ()

Извиняюсь,

[root@localhost sysconfig]# ifconfig
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.112.21  netmask 255.255.255.0  broadcast 192.168.112.255
        inet6 fe80::d63d:7eff:fef2:c921  prefixlen 64  scopeid 0x20<link>
        ether d4:3d:7e:f2:c9:21  txqueuelen 1000  (Ethernet)
        RX packets 1391969  bytes 104218773 (99.3 MiB)
        RX errors 0  dropped 27417  overruns 0  frame 0
        TX packets 405572  bytes 44420245 (42.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


enp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::da5d:4cff:fe81:451c  prefixlen 64  scopeid 0x20<link>
        ether d8:5d:4c:81:45:1c  txqueuelen 1000  (Ethernet)
        RX packets 452627  bytes 49303073 (47.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 568423  bytes 38461773 (36.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Оказывается enp2s0 смотрит в локаль, а enp4s0 в интернет. Вечером постил, запутался в интерфейсах))

Demolitionman ()
Ответ на: комментарий от Demolitionman
[root@localhost sysconfig]# iptables -L -n -v
Chain INPUT (policy DROP 29997 packets, 2414K bytes)
 pkts bytes target     prot opt in     out     source               destination
 1879  215K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
 201K   21M ACCEPT     all  --  enp2s0 *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  enp2s0 *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     icmp --  enp2s0 *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy DROP 67 packets, 4886 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  enp4so enp2s0  0.0.0.0/0            192.168.112.1        tcp dpt:22
 163K 8448K TCPMSS     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x06/0x02 TCPMSS clamp to PMTU
 962K   69M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     udp  --  enp2s0 *       192.168.112.0/24     0.0.0.0/0            multiport dports 53
    0     0 ACCEPT     tcp  --  enp2s0 *       192.168.112.0/24     0.0.0.0/0            multiport dports 53

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 2024  370K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  *      enp2s0  0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     icmp --  *      enp2s0  0.0.0.0/0            0.0.0.0/0

[root@localhost sysconfig]# iptables-save
# Generated by iptables-save v1.4.21 on Mon Sep  8 08:22:59 2014
*mangle
:PREROUTING ACCEPT [1275411:96378860]
:INPUT ACCEPT [233855:23512993]
:FORWARD ACCEPT [962495:68815738]
:OUTPUT ACCEPT [2037:373310]
:POSTROUTING ACCEPT [964467:69184822]
COMMIT
# Completed on Mon Sep  8 08:22:59 2014
# Generated by iptables-save v1.4.21 on Mon Sep  8 08:22:59 2014
*nat
:PREROUTING ACCEPT [344888:26729639]
:INPUT ACCEPT [119253:11910962]
:OUTPUT ACCEPT [235:17872]
:POSTROUTING ACCEPT [375:24204]
-A PREROUTING -d 192.168.1.10/32 -p tcp -m tcp --dport 22 -j DNAT --to-destination 192.168.112.1
-A POSTROUTING -s 192.168.112.0/24 -p tcp -m multiport --dports 80,443,55337 -j SNAT --to-source 192.168.1.10
-A POSTROUTING -s 192.168.112.10/32 -j SNAT --to-source 192.168.1.10
COMMIT
# Completed on Mon Sep  8 08:22:59 2014
# Generated by iptables-save v1.4.21 on Mon Sep  8 08:22:59 2014
*filter
:INPUT DROP [30008:2414722]
:FORWARD DROP [67:4886]
:OUTPUT DROP [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i enp2s0 -j ACCEPT
-A INPUT -i enp2s0 -j ACCEPT
-A INPUT -i enp2s0 -p icmp -j ACCEPT
-A FORWARD -d 192.168.112.1/32 -i enp4so -o enp2s0 -p tcp -m tcp --dport 22 -j ACCEPT
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.112.0/24 -i enp2s0 -p udp -m multiport --dports 53 -j ACCEPT
-A FORWARD -s 192.168.112.0/24 -i enp2s0 -p tcp -m multiport --dports 53 -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o enp2s0 -j ACCEPT
-A OUTPUT -o enp2s0 -p icmp -j ACCEPT
COMMIT
# Completed on Mon Sep  8 08:22:59 2014
Demolitionman ()
Ответ на: комментарий от mky

22 порт я естесно наружу открывать не буду. это я для тестов его открываю. т.к мне моим шлюзом надо заменить два компа, один на винде второй на freebsd. Вся работа стоит из за проброса внутрь.

Demolitionman ()
Ответ на: комментарий от Demolitionman
Chain FORWARD (policy DROP 67 packets, 4886 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  enp4so enp2s0  0.0.0.0/0            192.168.112.1        tcp dpt:22

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

sdio ★★★★★ ()
Последнее исправление: sdio (всего исправлений: 3)
Ответ на: комментарий от Demolitionman

-A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

Здесь NEW не нужен.

sdio ★★★★★ ()
Ответ на: комментарий от sdio

Народ подскажите утилиту для iptables, хочется видеть как любой попавший пакет с любого интерфейса проходит по цепочкам правил. Т.е все таки почему у меня проброс не работает без диагностики не обойтись. Если можно то с примером. интерфейс enp4s0 порт входящий 22. Еще такой вопрос, у меня после сервера еще роутер стоит, там тоже НАТ. И Форвард порта 22 на мою машину роутер в сети. В дальнейшем планирую модем установить в режим бриджа и рулить пакетами строго Iptables ом на Centos

Demolitionman ()
Ответ на: комментарий от sdio

И еще, при включенном правиле

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
И выключенный всех остальных касающихся проброса 22 внутрь сети, то я могу без проблем подключиться к своему шлюзу CentOS из интернета.

Demolitionman ()
Ответ на: комментарий от sdio

В общем кому интересно, скрипт до ума довел, привожу рабочую конфигу

#!/bin/bash


#Очистка всех цепочек

iptables -F

iptables -F -t nat

iptables -F -t mangle

iptables -X

iptables -X -t nat

iptables -X -t mangle

#Политика по умолчанию - запретить все, что не разрешено

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

EXT_IP=192.168.1.10 #IP интернет карты
INT_IP=192.168.112.21 #IP локальной сетевой карты

EXT_IF=enp4s0 # Внешний интерфейс.
INT_IF=enp2s0 # Внутренний интерфейс.

MAILIP=192.168.112.1 #IP маил сервера
MAILPORT=22,80,25,110,995 #Пробрасываемый порт на маилсервер

INFRA=192.168.112.208,192.168.112.10 #Кому из локальной сети можно ходить в интернет по определенным портам(443.80)

#PNU=
#BUH=
ALLACCESS=192.168.112.20 #Кому можно ходить в интернет без ограничение по портам. 

#Пропускать уже инициированные, а также их дочерние пакеты на входящие соединения
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

#Разрешаем подключение с внешки на ssh порт
#iptables -A INPUT -p tcp -d ${EXT_IF}--dport 22 -j ACCEPT
#Пропускать новые, инициированные, а также их дочерние на выход
iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


#Пропускать инициированные, а также их дочерние с локалки наружу - пересылка
iptables -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

#Разрешаем обращение к lo (127.0.0.1) интерфейсу
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A OUTPUT -o lo -p all -j ACCEPT

#Разрешаем обращение к внутреннему интерфейсу ${INT_IF}  - всем из локальной сети
iptables -A INPUT -i ${INT_IF} -j ACCEPT
iptables -A OUTPUT -o lo -p all -j ACCEPT

#Разрешаем обращение к внутреннему интерфейсу ${INT_IF}  - всем из локальной сети
iptables -A INPUT -i ${INT_IF} -j ACCEPT
iptables -A OUTPUT -o ${INT_IF} -j ACCEPT

#Разрешаем обращение к mail, ssh, ftp, dns серверам по протоколу TCP из нашей локальной сети
iptables -A FORWARD -i ${INT_IF} -s ${EXT_IP} -p tcp -m multiport --dports 21,22,80,110,143,53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#Разрешаем DNS запросы по протоколу UDP и TCP из нашей локальной сети
iptables -A FORWARD -i ${INT_IF} -s 192.168.112.0/23 -p udp -m multiport --dports 53 -j ACCEPT
iptables -A FORWARD -i ${INT_IF} -s 192.168.112.0/23 -p tcp -m multiport --dports 53 -j ACCEPT
#Разрешаем пинги с внутреннего интерфейса

iptables -A INPUT -i ${INT_IF} -p ICMP -j ACCEPT
iptables -A OUTPUT -o ${INT_IF} -p ICMP -j ACCEPT

#Настройка NAT и редирект c 80 порта на прокси сервер Squid
#iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128

iptables -t nat -A POSTROUTING -s ${INFRA} -p tcp -m multiport --dports 80,443 -j SNAT --to-source ${EXT_IP}

iptables -t nat -A POSTROUTING -s ${ALLACCESS} -j SNAT --to-source ${EXT_IP}

#Пробрасываем порты в локальную сеть
iptables -t nat -A PREROUTING --dst ${EXT_IP} -p tcp -m multiport --dports ${MAILPORT} -j DNAT --to-destination ${MAILIP}
iptables -t nat -A POSTROUTING --dst ${MAILIP} -p tcp -m multiport --dports ${MAILPORT} -j SNAT --to-source ${INT_IP}
iptables -t nat -A OUTPUT --dst ${EXT_IP} -p tcp -m multiport --dports ${MAILPORT} -j DNAT --to-destination ${MAILIP}
iptables -I FORWARD 1 -i ${EXT_IF} -o ${INT_IF} -d ${MAILIP} -p tcp -m tcp -m multiport --dports ${MAILPORT} -j ACCEPT

Статьи по которым делал:

http://yvision.kz/post/243237

http://www.it-simple.ru/?p=2250

Demolitionman ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.