Ну вроде после срабатывания разрешающего правила дальнейшие не рассматриваются. Надо, чтобы запрещенных сразу откидывало, а разрешенных пропускало дальше на отработку правил нат, портов почты и пр.
Решил задачу через жп.
Так как инверсия запрета не работает почему-то, запретил всему узлу сети - пул адресов dhcp (список айпи в table 1) и удалил из таблицы тех, кому доступ нужен. Не стал заморачиваться с интерфейсами и направлениями трафика, просто обрубил, чтобы ходили через сквид.
Еще пришлось пролукапить (nslookup) почтовые сервера и разрешить ходить на них всем без исключения (table 2).
А ведь если создать таблицу с айпи разрешенных счастливчиков, это всего около 5 адресов. Но NOT Table 1 не отрабатывает, точнее закрывает доступ абсолютно всем.
!/bin/sh
FwCMD="/sbin/ipfw"
LanOut="em0"
LanIn="em1"
IpIn="192.168.0.11"
NetMask="24"
NetIn="192.168.0.0/24"
NetOut="188.95.0.0/28"
IpOut="188.95.185.110"
#
${FwCMD} -f flush
#
${FwCMD} -f pipe flush
#
${FwCMD} -f queue flush
#загрузка таблицы ip с полным доступом
ipfw table 1 flush
cat /usr/local/etc/table/onlyproxy.txt | while read line; do
ipfw table 1 add $line
done
#загрузка таблицы ip разрешенных почтовых серверов
ipfw table 2 flush
cat /usr/local/etc/table/AlMlSv | while read line; do
ipfw table 2 add $line
done
#
${FwCMD} add allow ip from any to any via lo0
${FwCMD} add allow all from any to any via ${LanIn}
#
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any
#всем кроме списка таблицы - запрет- ходите через прокси сквид. table1 - кому нельзя. table2 - куда можно (почта и пр)
${FwCMD} add deny all from "table(1)" to not "table(2)"
${FwCMD} add deny all from not "table(2)" to "table(1)"
Добавлено через 2 минуты
и далее правила продолжаются для избранных