LINUX.ORG.RU

История изменений

Исправление 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, или что то еще?