POSTROUTING не требуется?Требуется, если 6.6.6.6:1000 не является шлюзом для 1.1.1.1:9999 (а по описанию задачи не является).
второй вопрос. Посложнее.На самом деле не сложнее, гуглится за 10 секунд:
-A PREROUTING -d x.x.x.x -p udp --dport 1100:1200 -j DNAT --to-destination y.y.y.y
-A PREROUTING -i eth0 -p tcp -m multiport ! --dports 22,1100:1200 -j DNAT --to-destination 10.200.1.5
-A PREROUTING -i eth0 -p tcp -m multiport --dports 1:21,23:1100,1200:65535 -j DNAT --to-destination 10.200.1.5
-A PREROUTING -i eth0 -p tcp --dport 1:21 -j DNAT --to-destination 10.200.1.5
-A PREROUTING -i eth0 -p tcp --dport 23:1100 -j DNAT --to-destination 10.200.1.5
-A PREROUTING -i eth0 -p tcp --dport 1200:65535 -j DNAT --to-destination 10.200.1.5
-A PREROUTING -i eth0 -p tcp -m mport ! --dports 22,1100:1200 -j DNAT --to-destination 10.200.1.5
а нужно что бы получал от айпи клиентаЭто так не работает. Объясняю почему нет.
Note: If the matching rule number (3 for prerouting chain of raw table) is greater than the number of rules there, it means there wasn't a match for any of the rules and it is just returning to whomever called the chain.
came to this question too and dit some testing: policy:5 seem to refer to the fictive last "rule" of your chain, where the policy is considered. so loonyuni's traced chain should have 4 explicit rules in it.
Согласно правилу
-A POSTROUTING -s 10.101.0.0/16 -o tun0 -j MASQUERADE
трафик ipsec клиентов должен уходить в tun0
iptables -I INPUT -s 11.22.33.44 -p tcp --dport 5566 -j DROP
iptables -I INPUT -s 11.22.33.44 -p udp --dport 5566 -j DROP
iptables -I INPUT -s 127.0.0.1/8 -p tcp --dport 5566 -j DROP
iptables -I INPUT -s 127.0.0.1/8 -p udp --dport 5566 -j DROP
iptables -A INPUT -p udp --dport 6767 -j ACCEPT
iptables -t nat -A PREROUTING -p udp --dport 6767 -j REDIRECT --to-port 67
/ip firewall filter add action=accept chain=input dst-port=6767 protocol=udp
/ip firewall nat add action=redirect chain=dstnat dst-port=6767 protocol=udp to-ports=67
хочу попробовать закрыть все публичные порты и открывать их для каждого пользователя индивидуально.Это называется доступом по белому списку. Ниже пример, как можно это сделать. Только у меня это не в формате исполняемого шелл-скрипта, а в формате конфига, загружаемого командой iptables-restore.
# example
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# WhiteList (разрешенные внешние клиенты)
-N Wht
-A Wht -s 1.2.3.4 -j RETURN
-A Wht -s 2.3.4.5 -j RETURN
# разрешенная подсеть
-A Wht -s 3.4.5.0/24 -j RETURN
# ...
# go to hell
-A Wht -j DNAT --to-destination 192.168.99.99
-A PREROUTING ! -s 192.168.0.0/16 -p tcp --dport 22 -j Wht
-A PREROUTING ! -s 192.168.0.0/16 -p tcp --dport 22 -j ACCEPT
-A PREROUTING ! -s 192.168.0.0/16 -p tcp --dport 80 -j Wht
-A PREROUTING ! -s 192.168.0.0/16 -p tcp --dport 80 -j DNAT --to-destination 192.168.42.18:80
-A PREROUTING ! -s 192.168.0.0/16 -p tcp --dport 8080 -j Wht
-A PREROUTING ! -s 192.168.0.0/16 -p tcp --dport 8080 -j DNAT --to-destination 192.168.42.19:80
-A PREROUTING -s 192.168.0.0/16 -j ACCEPT
COMMIT
ip route add blackhole 192.168.99.99
Ошибка в 285 строчке - это вторая с конца команда "esac"Ну если считать строки по выложенному скрипту, то 285 строка - это
[ -e "$VAR_SUBSYS_IPTABLES" ] && restart
, а вовсе не "esac"$IPTABLES -t mangle -P PREROUTING $policy \
&& $IPTABLES -t mangle -P POSTROUTING $policy \
$IPTABLES -t mangle -P PREROUTING $policy \
&& $IPTABLES -t mangle -P POSTROUTING $policy \
&& $IPTABLES -t mangle -P INPUT $policy \
&& $IPTABLES -t mangle -P OUTPUT $policy \
&& $IPTABLES -t mangle -P FORWARD $policy \
|| let ret+=1
;;