LINUX.ORG.RU

Не могу достучатся на сервер видеонаблюдения. iptables

 ,


0

1

Добрый день! за пределами сети есть роутер от него проброс на сервер видеонаблюдения по порту 34567. В сети находятся два шлюза от разных провайдерах. Вспомогательный настроен через роутер dlink и если работать через него нет никаких проблем, спокойно можно подключится к серверу видеонаблюдения. Но вот через основной шлюз (Ubuntu 16, iptables) не получается не могу понять в чем проблема. #!/bin/bash

IPTABLES=«/sbin/iptables»

IPTABLES_RESTORE=«/sbin/iptables-restore»

EXT_INTERFACE=XX.XX.XX.XX

LOCAL_NET=192.168.0.0/20

EXT_ETH=ppp0

LAN_ETH=enp0s4

$IPTABLES -F INPUT

$IPTABLES -F OUTPUT

$IPTABLES -F FORWARD

$IPTABLES -F

$IPTABLES -X

$IPTABLES -P INPUT DROP

$IPTABLES -P OUTPUT ACCEPT

$IPTABLES -P FORWARD DROP

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A INPUT -i lo -j ACCEPT

$IPTABLES -A OUTPUT -o lo -j ACCEPT

iptables -t nat -A POSTROUTING -s $LOCAL_NET -o $EXT_ETH -j MASQUERADE

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

iptables -A INPUT -p udp --dport 8080 -j ACCEPT

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

iptables -A INPUT -p udp --dport 80 -j ACCEPT

iptables -A INPUT --proto udp --dport 22 -j ACCEPT

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

$IPTABLES -I FORWARD -d 192.168.0.0/20 -j ACCEPT

$IPTABLES -I FORWARD -s 192.168.0.0/20 -j ACCEPT

$IPTABLES -t nat -I POSTROUTING -s 192.168.0.0/20 -o $EXT_ETH -j SNAT --to-source $EXT_INTERFACE

Вроде я всей сети разрешаю доступ в интернет в полном объеме на любой хост и порт.

Помогите разобраться. Спасибо

У тебя стоит политика DROP для транзитных пакетов, проверяй подпадает ли адрес сервера под правила разрешающие транзитные пакеты.

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

Подскажите пожалуйста а где почитать или где посмотреть? А то я особа в iptables не селен. Разбираюсь как говорится по горячему

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

Для начала что-то вроде: https://www.opennet.ru/docs/RUS/iptables/

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

Ну и учитывайте очерёдность срабатывания правил, если пакет подпадает под правило расположенное выше и это правило DROP или ACCEPT, то нижеследующие правил противоположного действия или просто обработки влияния не окажут, пакет уже будет выведен из этой цепочки.

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

Спасибо заработало. добавил вот такие правила $IPTABLES -A FORWARD -i enp0s4 -o ppp0 -j ACCEPT $IPTABLES -A FORWARD -i ppp0 -o enp0s4 -j ACCEPT

Вот в этих правилах я разрешаю транзитным пакетам ходить между интерфейсами. А можно написать правило чтобы пакеты шли интерфейс — конкретный IP и порт ?

snowkam
() автор топика
Ответ на: комментарий от snowkam
#!/bin/bash

IPTABLES=«/sbin/iptables»
IPTABLES_RESTORE=«/sbin/iptables-restore»

# тогда уж EXT_ADDRESS что бы потом не путаться
#EXT_INTERFACE=XX.XX.XX.XX
EXT_ADDRESS=XX.XX.XX.XX

# сетка точно /20 а не /24 ???
LOCAL_NET=192.168.0.0/20

EXT_ETH=ppp0
LAN_ETH=enp0s4

$IPTABLES -F
$IPTABLES -X

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP

# разрешаем уже открытые соединения
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A INPUT -i lo -j ACCEPT
# не надо, OUTPUT по умолчанию у вас и так accept
#$IPTABLES -A OUTPUT -o lo -j ACCEPT

# Если надо для локалки разрешить все, то можно такое правило добавить:
# $IPTABLES -A INPUT -i $LAN_ETH -j ACCEPT

# А тут разрешаем новые соединения
$IPTABLES -A INPUT -p tcp --dport 8080 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT

# udp зачем на эти порты?
#$IPTABLES -A INPUT -p udp --dport 8080 -j ACCEPT
#$IPTABLES -A INPUT -p udp --dport 80 -j ACCEPT
#$IPTABLES -A INPUT --proto udp --dport 22 -j ACCEPT

# Тут происходит NAT
$IPTABLES -t nat -A POSTROUTING -s $LOCAL_NET -o $EXT_ETH -j MASQUERADE
# можно вместо этого правила такое:
# $IPTABLES -t nat -A POSTROUTING -s $LOCAL_NET -o $EXT_ETH -j SNAT --to-source $EXT_ADDRESS

# Теперь в forward надо разрешить то, что пойдет транзитом через роутер, 
# т.к. по умолчанию для forward все drop
$IPTABLES -A FORWARD -i $LAN_ETH -o $EXT_ETH -s $LOCAL_NET -j ACCEPT 
$IPTABLES -A FORWARD -i $EXT_ETH -o $LAN_ETH -j ACCEPT
#$IPTABLES -I FORWARD -d 192.168.0.0/20 -j ACCEPT
#$IPTABLES -I FORWARD -s 192.168.0.0/20 -j ACCEPT

# нат (masquerade) вы уже сделали, это правило не нужно
#$IPTABLES -t nat -I POSTROUTING -s 192.168.0.0/20 -o $EXT_ETH -j SNAT --to-source $EXT_INTERFACE

ps:

Подскажите пожалуйста а где почитать или где посмотреть?

iptables tutorial - уже подсказали. Вот еще https://ru.wikibooks.org/wiki/Iptables

А можно написать правило чтобы пакеты шли интерфейс — конкретный IP и порт ?

что именно имеется ввиду? Разрешить форвардинг только этих пакетов или разрешить в input, или что то еще?

добавил вот такие правила $IPTABLES -A FORWARD -i enp0s4 -o ppp0 -j ACCEPT $IPTABLES -A FORWARD -i ppp0 -o enp0s4 -j ACCEPT

с вашими тоже должно было работать. Если у вас сетка /20 а не /24

samson ★★
()
Последнее исправление: samson (всего исправлений: 2)

А почему ppp0? Это VPN? PPTP?

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