Справка с правилом iptables, как позволить порт перед правилом ОТКЛОНЕНИЯ?

Я использую iptables, чтобы отметить пакеты для пользователя VPN и сделать раздельное туннелирование. пользователь VPN туннелирован по интерфейсу tun0, и у других пользователей есть прямой доступ к Интернету. Все работает как ожидалось, но у меня есть проблема с одним правилом ОТКЛОНЕНИЯ, а именно, я не понимаю то, что то, которые управляют точно выполнением и синтаксисом. Теперь я хотел бы открыть порт по соединению VPN. Я могу сделать это, когда я удаляю последнее ВЫХОДНОЕ правило ОТКЛОНЕНИЯ, затем это работает отлично. Какое правило я должен добавить перед правилом ОТКЛОНЕНИЯ позволить порту работать и все еще сохранять правило ОТКЛОНЕНИЯ?

export INTERFACE="tun0"
export VPNUSER="vpn"
export LOCALIP="192.168.1.28"
export NETIF="eth0"

# flushes all the iptables rules, if you have other rules to use then add them into the script
iptables -F -t nat
iptables -F -t mangle
iptables -F -t filter

# mark packets from $VPNUSER
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT ! --dest $LOCALIP -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT --dest $LOCALIP -p udp --dport 53 -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT --dest $LOCALIP -p tcp --dport 53 -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT ! --src $LOCALIP -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT -j CONNMARK --save-mark

# allow responses
iptables -A INPUT -i $INTERFACE -m conntrack --ctstate ESTABLISHED -j ACCEPT

# allow open TCP port 47657

iptables -A INPUT i $INTERFACE -p tcp --dport 47657 -j ACCEPT

# block everything incoming on $INTERFACE to prevent accidental exposing of ports
iptables -A INPUT -i $INTERFACE -j REJECT

# let $VPNUSER access lo and $INTERFACE
iptables -A OUTPUT -o lo -m owner --uid-owner $VPNUSER -j ACCEPT
iptables -A OUTPUT -o $INTERFACE -m owner --uid-owner $VPNUSER -j ACCEPT

# all packets on $INTERFACE needs to be masqueraded
iptables -t nat -A POSTROUTING -o $INTERFACE -j MASQUERADE

# reject connections from predator IP going over $NETIF
iptables -A OUTPUT ! --src $LOCALIP -o $NETIF -j REJECT

Проблема с последней строкой:

iptables -A OUTPUT ! --src $LOCALIP -o $NETIF -j REJECT

1) Я не понимаю то, что точно эта строка делает, и синтаксис.

2) Если я удаляю эту последнюю строку, порт 47657 открыт и активен. Если строка выше включена, порт закрывается. Какое правило я должен вставить перед ВЫХОДНЫМ правилом ОТКЛОНЕНИЯ сделать только порт 47 657 открытыми?

Большое спасибо!

0
задан 12 September 2016 в 15:47

1 ответ

Примерно так:

iptables -I INPUT -p tcp --dport 47657 -j ПРИНЯТЬ

Если TCP - это протокол, который вы будете использовать на этом порту. Помните, что: -А это добавить правило в IPTABLES, оно всегда будет в конце. Если вы используете -I, это должно дать ему приоритет, чтобы оно поместило правило в начало правил. Возможно, вам придется поставить его точно в такое положение, если у вас есть больше правил, которые могут нарушить это правило.

0
ответ дан 28 September 2019 в 14:24

Другие вопросы по тегам:

Похожие вопросы: