Показаны сообщения с ярлыком FreeBSD. Показать все сообщения
Показаны сообщения с ярлыком FreeBSD. Показать все сообщения

воскресенье, 18 марта 2012 г.

Как вести лог блокировок в iptables и ipfw


Linux:

- Перед правилом блокировки нужно вставить "log" правило:
   iptables -A FORWARD -p tcp -m tcp -s 192.168.0.0/16 --dport 25 \
      -j LOG --log-level debug --log-prefix "outgoing mail"
   iptables -A FORWARD -p tcp -m tcp -s 192.168.0.0/16 --dport 25 -j DROP

- Проверить запущены ли в системе klogd и syslogd.

- Настроить /etc/syslog.conf на прием kern.debug логов:
   kern.=debug   -/var/log/kernel/info

FreeBSD:
Добавить ключ log в ipfw, например:
   ipfw add 1000 deny log tcp from any to 192.168.10.10 22 via fxp0
   ipfw add 1000 deny log logamount 0 tcp from any to 192.168.10.10 80 via fxp0

Для ведения логов ядро должно быть собрано с IPFIREWALL_VERBOSE или нужно
выставить "sysctl -w net.inet.ip.fw.verbose=1".

Далее проверить чтобы в /etc/syslog.conf было упоминание LOG_SECURITY:
   security.*      /var/log/security

Через параметр logamount передается число записей которые будет записано в лог,
после превышения записи перестанут появляться в логе, до тех пор пока не будет вызвана команда
"ipfw resetlog". Максимальное число сообщений можно также установить
через sysctl net.inet.ip.fw.verbose_limit.
Для отмены лимитирования на число записей, нужно установить атрибут в 0.

Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)


Для начала надо пересобрать ядро со следующими опциями

   options         IPFIREWALL              #firewall
   options         IPFIREWALL_VERBOSE      #enable logging to syslogd(8)
   options         IPFIREWALL_DEFAULT_TO_ACCEPT    #allow everything by default
   options         IPDIVERT
   options         IPFIREWALL_FORWARD
   options         DUMMYNET
   options         IPFIREWALL_NAT          #ipfw kernel nat support
   options         LIBALIAS

Далее пересобираем ядро:

   # cd /usr/src/
   make buildkernel KERNCONF=Yourkernel && make installkernel KERNCONF=Yourkernel

  # shutdown -r now

Далее кусок файла конфигурации с примером.
192.168.1.132 - ip адрес сетевой карты смотрящей наружу
останое внутренние адреса

   #!/bin/sh
   # здесь просто удаляю старые правила
   ipfw -f flush
   ipfw nat 122 delete

   # разрещаю все через loopback
   ipfw add allow all from any to any via lo0

   # делаю нат на ip смотрящем наружу, same_ports - для попытки сохранить номера портов при нате
   ipfw nat 123 config ip 192.168.1.132 log same_ports \

   # пробрасываю все что приходит на порт 9999 на тот же порт внутренней машины
   # как вариант можно указать -redirect_port tcp 192.168.4.86:9999 192.168.1.132:9999
    redirect_port tcp 192.168.4.86:9999 9999

   # этот кусок нужен что бы у машины был не полный нат а только порт который я разрешил,
   # потому что вообще в интернет буду пускать через проксю.
   ipfw add 100 nat 123 tcp from 192.168.4.86 9999 to any
   ipfw add 100 nat 123 tcp from any to 192.168.4.86 9999

   # здесь я разрешаю клиенту с ip 192.168.4.86 коннектится к любым серверам по 25 порту,
   # но только по нему.
   ipfw add 100 nat 123 tcp from 192.168.4.86 to any 25

   # это что бы был нат, иначе ничего не будет работать, правило для выпуска клиентов наружу
   ipfw add 100 nat 123 ip from any to 192.168.1.132

Объединение сетевых интерфейсов под FreeBSD 5.x

Превращение двух 100 мбит/c сетевых карт в одну виртуальную, с пропускной способностью 200 мбит/c . Доп ссылка



kldload /boot/kernel/ng_ether.ko
  kldload /boot/kernel/ng_one2many.ko
  ifconfig rl0 up
  ifconfig rl1 up
  ngctl mkpeer rl0: one2many upper one
  ngctl connect rl0: rl0:upper lower many0
  ngctl connect rl1: rl0:upper lower many1
  ngctl msg rl1: setpromisc 1
  ngctl msg rl1: setautosrc 0
  ngctl msg rl0:upper \
        setconfig "{ xmitAlg=1 failAlg=1 enabledLinks=[ 1 1 ] }"
  ifconfig rl0 inet 192.168.0.78