Автор |
Сообщение |
Plaguer Эксперт |
|
Есть шлюз на FreeBSD 9.3-RELEASE. В ядро было добавлено:
Нажмите сюда, чтобы просмотреть текст
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_NAT
options LIBALIAS
options IPDIVERT
options IPFIREWALL_FORWARD
|
Собственно хотел спросить у уважаемых гуру по поводу корректности моих правил ядерного IPFW на роутере:
Нажмите сюда, чтобы просмотреть текст
Код: |
#!/bin/sh
#PPPoE сессия долго поднимается, пришлось внести задержку в старт фаерволла
sleep 10
#table 1 gen (incoming allow from)
/bin/sh /root/table_1_gen.sh
#table 3 gen (deny list)
/bin/sh /root/table_3_gen.sh
exface="tun0" #внешний интерфейс
inface="em0" #внутренний интерфейс
exip="внешний-ip-адрес"
imask=255.255.255.0
fwcmd="/sbin/ipfw"
# flush all rules (no output, forced)
${fwcmd} -q -f flush
# allow lo0 and block other
${fwcmd} add allow ip from any to any via lo0
${fwcmd} add deny all from any to 127.0.0.0/8
${fwcmd} add deny all from 127.0.0.0/8 to any
# block broadcasts and muticasts
${fwcmd} add deny ip from any to 255.255.255.255 via $exface
${fwcmd} add deny ip from any to 240.0.0.0/4 via $exface
# block frag ICMP.
${fwcmd} add deny icmp from any to any frag
# allow SSH
${fwcmd} add allow tcp from 192.168.1.0/24 to me 22 via $inface
${fwcmd} add allow tcp from me 22 to 192.168.1.0/24 via $inface
${fwcmd} add allow tcp from %мой внешний ip% to me 22 via $exface
${fwcmd} add allow tcp from me 22 to %мой внешний ip% via $exface
# deny other SSH
${fwcmd} add deny tcp from any to me 22
######################
# NAT #
######################
${fwcmd} nat 1 config log if $exface unreg_only same_ports reset \
redirect_port tcp 192.168.1.120:3389 4444
${fwcmd} add nat 1 ip4 from 192.168.1.0/24 to any out xmit $exface
${fwcmd} add nat 1 ip4 from any to $exip in recv $exface
# allow icmp echo-reply, destination unreachable, echo-request, time-exceeded, traceroute
${fwcmd} add allow icmp from any to any icmptypes 0,3,8,11,30
${fwcmd} add deny icmp from any to any
# allow $inface
${fwcmd} add allow ip from any to me via $inface
${fwcmd} add allow ip from me to any via $inface
# deny list
${fwcmd} add deny ip from table\(3\) to any
# allow for remote work
${fwcmd} add allow ip from table\(1\) to 192.168.1.0/24
${fwcmd} add allow ip from 192.168.1.0/24 to table\(1\)
# allow from LAN to mangosip.ru
${fwcmd} add allow ip4 from 192.168.1.0/24 to 81.88.86.11
${fwcmd} add allow ip4 from 81.88.86.11 to 192.168.1.0/24
# allow UDP for SIP
${fwcmd} add allow udp from 192.168.1.0/24 to any
${fwcmd} add allow udp from any to 192.168.1.0/24
# allow inet for LAN
${fwcmd} add allow tcp from 192.168.1.0/24 to any via $inface setup keep-state
# allow any connection out, adding state for each
${fwcmd} add allow tcp from me to any setup keep-state
# allow access to our NTP
${fwcmd} add allow udp from me to any 123 keep-state
# allow DNS queries out in the world
${fwcmd} add allow udp from me to any 53 keep-state
# deny all and logs in /var/log/security
${fwcmd} add 65534 deny log ip from any to any |
|
В принципи всё работает так как и ожидалось, вопрос в том насколько правильно размещение разрешающих правил до правил NATа, по моей логике то что не нужно заворачивать в NAT как раз и должно размещаться в списке правил до него...
Нормальной критике или ссылкой на хорощий мануал по KERNEL-NAT IPFW тоже буду рад. |
|
|
|
|
k0stE Гуру |
|
Опять черти повылазили.
Plaguer писал(а): |
по моей логике то что не нужно заворачивать в NAT как раз и должно размещаться в списке правил до него... |
Ваша логика тут не причем, натить или нет должна решать маршрутизация.
То есть если пакет хочет проследовать например из внутреннего вилана во внешний, то с внутренний адресом он туда уйти не может, это BCP38, вот тут то и включается собственно натилка. |
|
|
|
|
Plaguer Эксперт |
|
k0stE
Понятно что клиент с серым ip-адресом без подмены source-ip не сможет выйти в интернет.
Просто я заметил что если перенести правила касающиеся самого шлюза ниже натирующих, то у правил разрешающих доступ к серверу перестаёт срабатывать счётчик. Как будто сами натирующие и становятся разрешающими
При этом если сканировать открытые порты из дикого инета - всё закрыто.. |
|
|
|
|
k0stE Гуру |
|
Plaguer писал(а): |
Просто я заметил что если перенести правила касающиеся самого шлюза ниже натирующих, то у правил разрешающих доступ к серверу перестаёт срабатывать счётчик. Как будто сами натирующие и становятся разрешающими |
Для работы nat'a должно быть разрешено прохождение транзитных пакетов. Я конечно ipfw никогда не видел, но после этого
Код: |
${fwcmd} add allow ip from any to me via $inface
${fwcmd} add allow ip from me to any via $inface |
Уже вообще пофигу что Вы напишите, потому что действия типа allow/ACCEPT являются терминирующими. По крайней мере в netfilter так. То есть, на сколько я понимаю ipfw, счетчики должны закончится именно тут. Если это конечно не политика по умолчанию для цепочки.
Правилом хорошего тона является разрешать все входящие пакеты, не отвечая только на то что действительно не надо отвечать, например на сервисы работающие только во внутреннюю сеть (всякие морды управления, самописные шняги и т.д.). Это важно для правильной работы, например pmtu discovery.
Для маршрутизации и ната, опять же в разрезе netfilter, правильным является сначала пропускать пакеты по уже установленным соединениям. Рассмотрим пример где разрешим маршрутизировать трафик с вилана 444, откуда ожидаем клиентов подсети 172.16.240.0/24, но запретим доступ до самого маршрутизатора, при этом оставим возможность синькать ntp между клиентами вилана и маршрутизатором (заменил тег code на quote, уж очень срано отображается это зеленый цвет).
Цитата: |
iptables -t nat -A POSTROUTING -o vlan998 -j SNAT --to-source 198.51.100.1
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD DROP
iptables -t filter -P INPUT ACCEPT
iptables -t filter -A INPUT -i vlan444 -p udp -m udp --dport 123 -j ACCEPT
iptables -t filter -A INPUT -i vlan444 -j REJECT --reject-with icmp-net-unreachable
iptables -t filter -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -s 172.16.240.0/24 -i vlan444 -m conntrack --ctstate NEW -j ACCEPT |
Из примера очевидно, что прямые запросы на сам маршрутизатор, кроме порта udp 123 будут отклонены. Это будет записано в счетчики. Транзитные запросы за пределы маршрутизатора могут уйти в любой вилан, если пакет уходит в вилан 998 он будет сначен. Это тоже упадет в счетчики (общие).
Можно примерно тоже самое для циски расписать
Сразу говорю, тут по памяти, проверить не на чем. 99% что не работает как ожидается.
Цитата: |
object-group service ntp_access
udp eq 123
object-group network vlan_to_nat
host 172.16.240.0 0.0.0.255
ip access-list extended to_nat_with_ntp
permit object-group ntp_access object-group vlan_to_nat any established
deny any
ip access-list extended to_nat
permit vlan_to_nat any
ip nat pool nat_pool 198.51.100.1
ip nat inside source list to_nat pool nat_pool interface fa0/1.998 overload |
В общем, я попытался описать, что если Вы хотите дать доступ до самого маршрутизатора, то терминирующие (или не терминирующие) действия должны быть до общих политик. Тогда будут записаны счетчики. |
|
|
|
|
Evarist Форумчанин |
|
Plaguer писал(а): |
Есть шлюз на FreeBSD 9.3-RELEASE. В ядро было
В принципи всё работает так как и ожидалось, вопрос в том насколько правильно размещение разрешающих правил до правил NATа, по моей логике то что не нужно заворачивать в NAT как раз и должно размещаться в списке правил до него... |
Да, я считаю что с kernel nat внешний трафик нужно фильтровать правилами до него (как у Вас сделано), ИЛИ сделать
sysctl net.inet.ip.fw.one_pass=0.
В случае по умолчанию (sysctl net.inet.ip.fw.one_pass=1) фильтровать трафик с внешнего интерфейса правилами после nat не имеет смысла - он до них не дойдет. |
|
|
|
|
Arkan Гуру |
|
У меня правила KERNEL-NAT
прописанны были самыми последними в конфиге
с самого начала разрешаю только то что конкретно знаю по портам и адресам
потом запрещаю все что знаю и все что не знаю
и последними именно правила ната
P.S.
а вообще если честно я давно уже отказался от KERNEL-NAT
использую почти всегда IP-NAT с правилами в отдельном конфиге
Отказался от KERNEL-NAT по той причине что есть ограничение add nat 1,2,3,4,5.....
у IP-NATa таких ограничений нет, могу и 5000 правил написать |
|
|
|
|
|
Аватары: Вкл|Выкл ЮзерИнфо: Вкл|Выкл Подписи: Вкл|Выкл
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы можете скачивать файлы
|
|