До это использовал natd, позже переехал на ipnat (очень удобный потому что). Ну да ладно, сразу к делу, что мне непонятно.
Написал вот такой скриптик:
- Код: Выделить всё
#!/bin/sh
out_ip="мой мега-секрет айпи"
out_iface="rl0"
local_iface="rl1"
localnet="192.168.5.0/24"
tcp_services="21,22,25,80,110,143,443,1863,3389,5190"
ipfw="/sbin/ipfw"
#### flush rules ####
${ipfw} -f flush
${ipfw} -f pipe flush
${ipfw} -f queue flush
${ipfw} table 1 flush
${ipfw} add 00300 pass all from any to ${out_ip} 22 via rl0
${ipfw} add 00310 pass all from ${out_ip} 22 to any via rl0
${ipfw} add 01100 allow gre from any to any
${ipfw} add 01200 allow icmp from any to any
${ipfw} add 1600 pass tcp from ${localnet} 1024-65535 to not ${localnet} ${tcp_services} via ${local_iface}
${ipfw} add 1700 pass tcp from not ${localnet} ${tcp_services} to ${localnet} 1024-65535 via ${local_iface} established
${ipfw} add 1800 reset log tcp from ${localnet} 1024-65535 to not ${localnet} via ${local_iface}
${ipfw} add 1900 reset log tcp from not ${localnet} to ${localnet} 1024-65535 via ${local_iface}
${ipfw} add 5000 pass log tcp from any to ${out_ip} 1723 via ${out_iface}
${ipfw} add 5010 pass log tcp from ${out_ip} 1723 to any via ${out_iface}
${ipfw} nat 10000 config if rl0 log unreg_only reset
${ipfw} add 10010 nat 10 log ip4 from any to any via rl0
${ipfw} add 15050 pass log tcp from ${out_ip} 1024-65535 to any via ${out_iface}
${ipfw} add 15060 pass log tcp from any to ${out_ip} 1024-65535 via ${out_iface} established
${ipfw} add 60000 reset log ip from any to any via rl0
Обратите внимание на расположение правил нат и опции, которые я применил. Все класно все работает в тестовом режиме. Даже вот скан прилагаю:
- Код: Выделить всё
$ sudo nmap -sS мой мега-секрет айпи
Password:
Starting Nmap 4.76 ( http://nmap.org ) at 2009-02-17 02:17 MSK
Interesting ports on мой мега-секрет айпи:
Not shown: 998 filtered ports
PORT STATE SERVICE
22/tcp open ssh
1723/tcp open pptp
Nmap done: 1 IP address (1 host up) scanned in 5.01 seconds
То есть я типа прикрыт снаружи, изнутри пользуются только теми сервисами, которые нужны. Обратите внимание на логирование, то есть я типа делаю набор минимальный правил для офисного фаирвольчика.
Но! Как же я удивился, когда увидел, что натится впн клиент!! Такого я не видел при использовании ipnat...
Прилагаю лог:
- Код: Выделить всё
Feb 17 02:25:35 mail3 kernel: ipfw: 10010 Nat TCP 192.168.5.13:139 192.168.12.44:3900 out via rl0
Feb 17 02:25:36 mail3 kernel: ipfw: 10010 Nat TCP 192.168.5.13:139 192.168.12.44:3905 out via rl0
Я понимаю, что натится ответ клиента из 5-ого сегмента. Но все попытки избавиться правила "from any to any" не привели к успеху. Я понимаю, что сейчас поздно очень уже, но все же, может есть кому интересно отточить до миллиметра этот момент. Тем более эту тему поднимают все больше и больше, но как-то слабовато, на уровне я не видел ман, зато видал заметку на опенке =)