История изменений
Исправление samson, (текущая версия) :
#!/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, :
#!/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, или что то еще?
Исходная версия samson, :
#!/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 - уже подсказали.
А можно написать правило чтобы пакеты шли интерфейс — конкретный IP и порт ?
что именно имеется ввиду? Разрешить форвардинг только этих пакетов или разрешить в input, или что то еще?