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 ★★★★★
()
Ответ на: комментарий от 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)
Ответ на: комментарий от 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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.