Май 052012
 


Так для заметки. Память уже не та.
Ввобщем имеется сетка , ее нужно вывести в нет.
Правила ipfw.
Имеем сервер FreeBSD 7.4 с двумя интерфейсами:

re0 - внешняя сеть IP ( 98.64.50.2 )
acl0 - внутренняя сетка Сетка класса С ( 192.168.1.0 ).

Такс приcтупим.
Дадим роль гейта нашему серверу.

echo "gateway_enable="YES"" >> /etc/rc.conf

Так как сервер боевой, сделаем все без березагрузки сервера.

# sysctl net.inet.ip.forwarding=1

Теперь добвим старт DNS сервера.

echo "named_enable="YES"" >> /etc/rc.conf

Отредактируем записи у DNS сервера. Создадим кэширующий DNS сервер.

# nano /etc/namedb/named.conf
options {
	directory	"/etc/namedb";
	pid-file	"/var/run/named/pid";
	dump-file	"/var/dump/named_dump.db";
	statistics-file	"/var/stats/named.stats";
	listen-on	{ 127.0.0.1; 192.168.1.10; };

	disable-empty-zone "255.255.255.255.IN-ADDR.ARPA";
	disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
	disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";

	forwarders {};
};

Теперь запустим наш DNS сервер.

# /etc/rc.d/named start

С DNS сервером рзаобрались (настроили)!
Далее нам нужно настроить и установить dhsp сервер.
Добавим поддержку автозапуска dhsp сервера.

echo "dhcpd_enable="YES"" >> /etc/rc.conf
echo "dhcpd_ifaces="em0"" >> /etc/rc.conf
echo "dhcpd_flags="-q"" >> /etc/rc.conf
cd /usr/ports/net/isc-dhcp41-server/ && make install clean

Создадим файл.

# touch /usr/local/etc/dhcpd.conf

И добавим в только что созданный файл такое содержимое.

default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
log-facility local7;

subnet 192.168.1.0 netmask 255.255.255.0 {
# Диапазон адресов в подсети
  range 192.168.1.50 192.168.1.100;
# Адрес DNS-сервера
  option domain-name-servers 192.168.1.10;
# Имя домена
  option domain-name "optika.farm";
# Маршрутизатор
  option routers 192.168.1.10;
# Сколько времени живет адрес.
  default-lease-time 600;
  max-lease-time 7200;
}

Запустим сервер dhsp.

# /usr/local/etc/rc.d/isc-dhcpd start

Пере-компелим ядро.
Добавим фильтр.

# Включение фаервола в ядро
options         IPFIREWALL
# Включение механизма логирования 'log'
options         IPFIREWALL_VERBOSE
# Ограничение логов - защита от переполнения
options         IPFIREWALL_VERBOSE_LIMIT=100
# Включение механизма пеперенаправления пакетов
options         IPFIREWALL_FORWARD
# Включение механизма трансляции адресов NAT
options         IPDIVERT
# Включение механизма ограничения скорости канала
options         DUMMYNET

Как пересобирать ядро в этой статье я не буду описывать, вот статья про то как пересобрать ядро в freebsd
Дабавим поддержку к нашей системе.

# nano /etc/rc.conf
firewall_enable="YES"
firewall_script="/etc/firewall"
firewall_nat_enable="YES"
firewall_nat_interface="re0"

А вот еще добавим такой параметр к системе, что пакеты nat проходили без препятственно.

# echo "net.inet.ip.fw.one_pass=1" >> /etc/sysctl.conf

Теперь настроим нашу стену, fireval.

#!/bin/sh
fwcmd="/sbin/ipfw -q add"

# Диапазон портов которые мы откроем.
GOOD_PORTS="22,53,123"

# Сбрасываем все правила.
ipfw -q -f flush

# Разрешить петлю, закрыть лишние обращения обращения.
${ipfw} add pass all from any to any via lo0
${ipfw} add deny all from any to 127.0.0.0/8
${ipfw} add deny ip from 127.0.0.0/8 to any

# Разрешаем весь трафик по локальной сети
${fwcmd} 1040 allow ip from any to any via acl0

# Рубим частные сети на внешнем интерфейса
${fwcmd} 1050 deny log ip from any to 192.168.0.0/16 in recv re0
${fwcmd} 1060 deny log ip from 192.168.0.0/16 to any in recv re0
${fwcmd} 1070 deny log ip from any to 172.16.0.0/12 in recv re0
${fwcmd} 1080 deny log ip from 172.16.0.0/12 to any in recv re0
${fwcmd} 1090 deny log ip from any to 10.0.0.0/8 in recv re0
${fwcmd} 10100 deny log ip from 10.0.0.0/8 to any in recv re0
${fwcmd} 10110 deny log ip from any to 169.254.0.0/16 in recv re0
${fwcmd} 10120 deny log ip from 169.254.0.0/16 to any in recv re0

# Запрет широковещательных icmp, от скана.
${ipfw} add deny log icmp from any to 255.255.255.255 in via re0
${ipfw} add deny log icmp from any to 255.255.255.255 out via re0

# Incoming Pings
${fwcmd} 10135 allow icmp from any to me icmptypes 8 in recv re0

# Открываем порты
${fwcmd} 10122 allow tcp from any to me ${GOOD_PORTS} in via re0

# Разрешаем только локальные DNS
#${fwcmd} add pass udp from re0 to any 53 keep-state
${fwcmd} allow tcp from acl0 to 192.168.1.0/24 dst-port 53 setup
${fwcmd} allow udp from acl0 to 192.168.1.0/24 dst-port 53

# Настройка NAT
nat 1 config log if re0 reset same_ports deny_in
${fwcmd} 10160 nat 1 ip from any to any via re0

# Разрешает пакеты по уже установленным ранее соединениям.
${ipfw} add pass tcp from any to any established

# Запрещаем все остальное.
${fwcmd} 65534 deny log all from any to any

Вот в принципе и все.
Еще можно добавить фильтрацию контента от пользователей.
Вот статья про прокси сервера

  2 комментария to “FreeBSD 7.4 шлюз”

  1. Правило «Разрешаем весь трафик по локальной сети» просто шикарное долго думали?

  2. «# Включение механизма трансляции адресов NAT
    options IPDIVERT»
    Это стандартный natd. Опции его не нужны вы же используете ipfw nat.

 Leave a Reply

(required)

(required)

39 Запросов к базе. 0,375 Генерации страницы, 36MB Использование памяти.
Вы зашли с IP: 54.198.108.19