Доброго всем времени суток.
Товарищи форумчане помогите с конфигом (PF). Собственно все настроено и работает, но есть непреодалимое желание улучшить внешнюю безопасность путем ограничения открытых портов снаружи. Подскажите рекомендации по этому вопросу.
Заранее благодарен. Конфиг PF прилагается.ext_if="rl1"
int_if="rl0"set limit frags 20000
set limit src-nodes 2000
set limit tables 1000
set limit table-entries 100000
#set ruleset-optimization basic
set skip on lo0#scrub in on $ext_if all fragment reassemble
nat on $ext_if from {$int_if:network} to any -> ($ext_if)
rdr on $int_if proto {tcp,udp} from {$int_if:network} to any port {http,https} -> 127.0.0.1 port 3128block in quick from no-route to any
block in quick from urpf-failed to any
#block log on $ext_if from {!$int_if:network} to any
block in quick on $ext_if from any to 255.255.255.255
block in log quick on $ext_if from {10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 255.255.255.255/32} to any
block in quick on $ext_if proto {tcp,udp} from any to any port {67,3306,21,20}pass in quick from $int_if:network to $int_if
pass on $ext_if inet proto icmp all icmp-type 8 code 0
pass out on $ext_if proto tcp from {$int_if:network} to any modulate state
pass in quick on $ext_if proto tcp from any to $ext_if port 1723
pass on lo0 proto tcp from any to any port 953pass in on $ext_if proto tcp from any to $ext_if port {ssh}
1. Плохой конфиг - много лишнего, нету нужного. Да и вообще так не делается...
2. С наружи закрыть все просто - block in on $ext_if all, но я бы переработал конфиг с нуля.
>1. Плохой конфиг - много лишнего, нету нужного. Да и вообще так
>не делается...
>2. С наружи закрыть все просто - block in on $ext_if all,
>но я бы переработал конфиг с нуля.Сошласен, конфиг очень плох. Поэтому и прошу помощи. Дайте наиболее значимые рекомендации по переписке. man'ами уже раскурился так что крыша едет и в голове одна каша.
За значениями ключевых слов - в маны. Если что-то будет не понятно - объясню.
Читаем конфиг с начала:0. Первое правило должно быть
block all
Реализуем принцип 'запрещено все что не разрешено'. Далее все правила кот. начинаются с 'block in quick', на мой взгляд лишние.1.1 rdr и nat. Стоит 'to any', что подразумевает "ко всем", т.е. и к самому роутеру тоже. В принципе ничего страшного, но лучше заменить на 'to !(self)' - теоретически правильнее.
1.2 В rdr стоит 'proto {tcp,udp}' теоретически верно, но практически udp использоваться не будет. По этому меняем на 'proto tcp'.
2.
pass in quick from $int_if:network to $int_ifне мешалобы указать интерфейс, протоколы и порты. Например:
pass in quick on $int_if proto tcp from $int_if:network to $int_if port ssh modulate state flags S/SA3.
pass on $ext_if inet proto icmp all icmp-type 8 code 0'all' тут явно лишнее. Меняем, например на:
pass on $ext_if inet proto icmp to $ext_if icmp-type 8 keep state4.
pass out on $ext_if proto tcp from {$int_if:network} to any modulate stateбессмыслено - через правила идут пакеты уже с транслироваными адресами.5.
pass in quick on $ext_if proto tcp from any to $ext_if port 1723Но туннель всеравно не поднимается, я угадал?6.
pass on lo0 proto tcp from any to any port 953тоже бессмыслено - в опциях в начале написано же 'set skip on lo0'.7. Добавляем что-нить а-ля(или зачем nat включен?):
pass in quick on $int_if from $int_if:network to !(self) keep state
Или что-то в это духе, это вам решать - я ж не знаю что нужно.
По поводу повышения безопастности. Я бы добавил след.:
set block-policy drop
...
#Усложним жизнь придуркам - I
rdr proto tcp from any os NMAP to (self) port 1:65535 tag scanning -> $ext_if port ssh
...
block in quick from 240.0.0.0/4
block in quick to 240.0.0.0/4
antispoof log quick for $int_if
antispoof log quick for $ext_if#Усложним жизнь придуркам - II
pass in quick proto tcp tagged scanning flags S/SA modulate state
table <ssh-bruteforce> persist
block in quick proto tcp from <ssh-bruteforce> to $ext_if port ssh probability 75%
pass in quick on $ext_if proto tcp to $ext_if port ssh flags S/SA modulate state \
(max-src-conn-rate 4/180, overload <ssh-bruteforce> flush)
Спасибо тебе добрый человек. В понедельник попробую реализовать то что ты сказал.
Самое интересное что при:
set skip on lo0команда rndc не работает. Она должна в соответсвии с праввилом работать ан нет.
Еще раз спасибо.
>[оверквотинг удален]
>antispoof log quick for $ext_if
>
>#Усложним жизнь придуркам - II
>pass in quick proto tcp tagged scanning flags S/SA modulate state
>table <ssh-bruteforce> persist
>block in quick proto tcp from <ssh-bruteforce> to $ext_if port ssh probability 75%
>pass in quick on $ext_if proto tcp to $ext_if port ssh flags
>S/SA modulate state \
> (max-src-conn-rate 4/180, overload <ssh-bruteforce> flush)
>
Если у нас в правилах первым стоит bloсk all
нужны ли эти правила
block in quick from 240.0.0.0/4
block in quick to 240.0.0.0/4
К тому же pf по дуфолту ставит политику блокировки drop
>Если у нас в правилах первым стоит
>bloсk all
>нужны ли эти правила
>
>block in quick from 240.0.0.0/4
>block in quick to 240.0.0.0/4
>не нужны. если хочешь, то теперь на эти адреса придется писать отдельное разрешение
Внимание на слово quick (и на его отсутствие в первом правиле).