Firewall для Windows (ipfw)

И все-таки он существует, нормальный firewall для windows. IPFW изначально написан для OS FreeBSD, но его портировали на windows и теперь его можно использовать в данной ОС.

Загрузить ipfw для windows можно тут: http://sourceforge.net/projects/wipfw/files

А тут http://wipfw.sourceforge.net/index-ru.html можно ознакомиться с ним подробнее

После того как архив скачан, нужно распаковать его в нужную директорию, в которой он и будет находиться.

Для установки необходимо запустить install-deny.cmd. Правда я не рекомендую сразу его запускать, ибо Вы отрубите все текущие соединения, т.е. если вы работаете удаленно, то потеряете хост. Есть просто install.cmd, но мне нужно было правило по умолчанию - deny. Далее подкладываем свой конфиг. У меня была стандартная задача с одного ip разрешить любой трафик, разрешить входящее соединение для подключения по RDP, а остальное все отключить, у меня получилась следующая конфигурация:

файл wipfw.conf:

-f flush
add allow ip from any to any via lo*
add deny log ip from any to 127.0.0.0/8 in
add deny log ip from 127.0.0.0/8 to any in
add check-state
add count log ip from any to any
add allow tcp from any to me established
add allow tcp from me to any established
add allow ip from 10.8.1.160 to me in
add allow ip from me to 10.8.1.160 out
add allow tcp from 10.0.0.0/8 to me 3389 in
add deny ip from any to any

После запуска install-deny.cmd он установится, создастся соответствующая служба и будет прочитан файл wipfw.conf, после чего правила начнут работать. В моем случае я получил:

1. Правило, которое было по умолчанию для loopback я не трогал

2. для ip 10.8.1.160 у нас полный доступ;

3. разрешены соединения на порт 3389 с сети 10.0.0.0/8;

4. разрешены все, уже установленные, соединения

5. правило по умолчанию у нас deny, т.е. все остальное в сад.

6. все события логируются

Ipfw умеет и NAT и много чего, читайте документацию. Для просмотра правил можно использовать команду:

ipfw list, а если нужна более подробная инфа со счетчиками, то ipfw show,

ipfw умеет и по умолчанию ведет лог, эти правила можно удалить, но мне это оказалось нужным. Но вот проблема, дневной лог обычного компа, весит около 200 мегабайт, а логи складываются в C:\WINDOWS\security\logs, что может привести к переполнению диска C:\, поэтому я на скорую руку написал скрипт на VBScript для удаления старых файлов, у меня логи хранятся 5 дней.

'Log Rotate For ipfw v0.1 by Yury Konovalov aka Speccyfan 2012
MyDirectory="C:\WINDOWS\security\logs"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Files = FSO.GetFolder(MyDirectory).Files
'Читаем файлы и нужные выделяем
For Each File In Files
  mask=Left(File.Name,5)
  ext=Right(File.Name,3)
  if (mask = "wipfw" AND ext = "log") then 'если наш лог, то
    'дату создания можно спросить у файловой системы, но мы возьмем из имени файла, на всякий         'случай
    y=mid(File.Name,6,4)
    m=mid(File.Name,10,2)
    d=mid(File.Name,12,2)
    DateFile = CDate(d&"."&m&"."&y) 'дата файла добытая из имени
        If DateDiff("d", DateFile, Date) => 5 Then 'старше 5 дней
            'WScript.Echo File.Name
            FSO.DeleteFile (MyDirectory&"\"&File.Name) 'удаляем
        end if
  end if
Next

Вот такой примитивный logrotate, возможно в будущем сделаю скрипт с упаковкой старых логов.