Wi-fi роутер с DHCP и DNS серверами FreeBSD 8.2
Что хотим получить:
- чтобы Wi-Fi клиенты были в одной подсети с проводными.
- чтобы проводные и беспроводные клиенты получали адреса автоматически по DHCP
- чтобы был кэширующий DNS
- само собой хотим, чтобы все ходили в интернет
- чтобы был доступ по RDP на внутренний сервер
В общем хотим получить что-то схожее по функционалу с роутером Dlink DIR-300
Что имеем:
Celeron 700, 256 мб RAM, IDE винт на 80 гб и странную мамку, которая вменяемо работает только с отключенным ACPI
сетевые карты:
LAN - rl0 (10\100 какой-то реалтек, найденный за шкафом на работе) rl0@pci0:1 :8 :0 :class=0x020000 card=0x813910ec chip=0x813910ec rev=0x10 hdr=0x00 vendor = "Realtek Semiconductor" device = Realtek RTL8139 Family PCI FastEthernet NIC RTL-8139 /8139C/8139D class = network subclass = ethernet WAN - stge0 (10\100\1000 asus адаптер) stge0@pci0:1 :5 :0 :class=0x020000card=0x81801043chip=0x102313f0 rev=0x41 hdr=0x00 vendor = "Sundance Technology Inc" device = "IC Plus IP1000 Family Gigabit Ethernet Adapter" class = network subclass = ethernet WLAN - ral0 (дешевая Wi-Fi карточка от Dlink) ral0@pci0:1 :10 :0 :class=0x028000card=0x3a711186chip=0x03021814 rev=0x00 hdr=0x00 vendor = "Ralink Technology, Corp." device = "wireless a/b (RT2525 2 .4GHz transceiver + RT2560 MAC/BBP)" class = network |
предоставленный провайдером белый IP адрес:
IP 9.9.9.9
маска 255.255.255.0
шлюз 9.9.9.1
DNS1 9.9.9.254
DNS1 9.9.9.253
настройки отличаются от реально существующих, но сути это не меняет
Диапазон локальной сети: 192.168.0.0 с маской 255.255.255.0
Установлена ОС FreeBSD 8.2:
# uname -a FreeBSD GATE 8 .2 -RELEASE FreeBSD 8 .2 -RELEASE #0:Sat Apr 9 20:13:28 OMSST 2011 root@GATE:/usr/src/sys/i386/compile/GATE i386 |
содержимое /etc/rc.conf:
9 .9 .9 .1 9 .9 .9 .9 netmask 255 .255 .255 .0 " ifconfig_rl0="inet 192 .168 .0 .1 netmask 255 .255 .255 .0 " |
содержимое /etc/resolv.conf (DNS сервера):
nameserver 9 .9 .9 .254 nameserver 9 .9 .9 .253 |
Начинаем подготовку:
Убираем из ядра все ненужные драйвера (ну или не убираем, кому как удобно) при этом оставляя все драйвера для беспроводных устройств. Если вы знаете, какой драйвер подходит для вашей карточки, то оставляете его, а остальные можете убрать.Я не знал, какой подойдет мне, поэтому оставил все. Пересобираем ядро с опциями:
device if_bridge # Модуль для работы моста device wlan # поддержка 802.11 (Wi-fi) # не знаю что это, подгружается автоматически device wlan_amrr # AMRR transmit rate control algorith device wlan_xauth # Модуль поддержки авторизации для режима точки доступа device wlan_wep # Модуль поддержки алгоритма безопасности WEP device wlan_tkip # модуль поддержки шифрования TKIP device wlan_ccmp # модуль поддержки шифрования CCMP device pf # в качестве фаервола я использую Packet Filter # поддержка алгоритма очередей (приоритезация трафика) options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) # так как у меня одноядерный процессор, то поддержка многих ядер мне не нужна #options ALTQ_NOPCC # Required for SMP build |
собираем и устанавливаем ядро:
# cd /usr/src # make buildkernel KERNCONF=GATE && \ make installkernel KERNCONF=GATE |
Перезагружаемся и смотрим, что получилось:
8843
|
Wi-fi карточка определилась как ral0. Уже хорошо. Можно еще раз пересобрать ядро и убрать ненужные драйвера для беспроводок.
Редактируем /etc/hostapd.conf до такого состояния:
Редактируем /etc/rc.conf:
keymap="ru.koi8-r" hostname ="GATE" gateway_enable="YES" defaultrouter="9 .9 .9 .1 " sshd_enable="YES" ifconfig_stge0="inet 9 .9 .9 .9 netmask 255 .255 .255 .0 " # настраиваем беспроводную карту как точку доступа wlans_ral0="wlan0" create_args_wlan0="wlanmode hostap" ifconfig_wlan0="up mediaopt hostap" # убираем IP адрес с интерфейса rl0 #ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0" # создаем мост между беспроводной и проводной локальными сетями # и вешаем на него IP адрес шлюза локальной сети cloned_interfaces="bridge0" ifconfig_bridge0="inet 192 .168 .0 .1 netmask 255 .255 .255 .0 \ addm wlan0 addm rl0 up" ifconfig_rl0="up" # включаем функционал точки доступа hostapd_enable="YES" |
Перезагружаемся. Смотрим, что получилось:
# ifconfig
stge0: flags
=8843
|
Все хорошо, Wi-fi и проводная карточки обьединены мостом и на этом мосту висит IP адрес
Приступаем к настройке PF. PF позволяет включить приоритезацию трафика. Краткое описание смотрим тут:
http://www.freebsd.org/doc/ru/books/handbook/firewalls-pf.html
создаем файлик /usr/local/etc/pf.conf и доводим его до такого состояния:
# Тут я определяю переменные, при помощи которых мне удобнее писать скрипт. WAN="stge0" LAN="bridge0" LAN_POOL="192 .168 .0 .0 /24 " WANIP="9 .9 .9 .9 " SERVER="192 .168 .0 .3 " ADMIN="192 .168 .0 .2 " RDP_PORT="3389 " EXTRDP_PORT="33389 " # трафик на эти порты и от них будет запрещен на внешнем интерфейсе DROP_PORTS="{135:139 ,445}" # Что делать после попадания какого-либо пакета в блокирующее правило (block) # set block-policy drop - отбросить пакет и ничего не предпринимать # set block-policy reject - отбросить пакет и отправить сообщение об ошибке # хосту, который его отправил. set block-policy drop # Не проверять трафик на lo0 set skip on lo0 # Не проверять трафик на интерфейсе bridge0 (внутренних ограничений у нас нет) set skip on $LAN # "Нормализация" пакетов. Описания этой опции, на мой взгляд, достаточно # расплывчаты, но поидее должна помогать против некоторых видов сетевых атак. scrub in all #У меня скорость ~5000 кбит\с, а вам надо тут вписывать свою скорость altq on $WAN priq bandwidth 5000Kb queue { priv, other } # У меня пристутствуют 2 очереди # Для более приоритетного трафика (RDP от сервера) queue priv qlimit 25 priority 14 priq(red ) # Для всех остальных queue other qlimit 30 priority 10 priq(default ) # Размеры очередей взяты, можно сказать, с потолка:(Не слишком # ориентируйтесь на них, пожалуйста. Попробуйте подобрать размер очереди сами # включаем NAT на внешнем интерфейсе для LAN сети nat on $WAN from $LAN_POOL to any -> ($WAN ) # Пробрасываем порт на сервер.Пробрасываем отличающийся от стандартного порт # для защиты от сканирующих стандартные порты обезьян с брутфорсом rdr on $WAN proto tcp from any to $WANIP \ port $EXTRDP_PORT -> $SERVER port $RDP_PORT # Обрубаем ping запросы до нашего адреса block quick on $WAN proto icmp from any to $WANIP icmp-type 8 # На внешнем интерфейсе не должно быть трафика от NETBIOS block quick on $WAN proto { tcp udp } from any to any port $DROP_PORTS # включаем антиспуфиг на WAN интерфейсе # Цитирую http://openbsd.corebsd.or.id/faq/pf/ru/filter.html: # Адреса спуфятся(spoofing), когда злоумышленник подделывает исходные # IP адреса в пакетах, они передаются либо в оболочку своих реальных адресов, # либо изображают другой узел в сети.После того, как пользователь был заспуфен # они смогут запустить сетевую атаку без разоблачения реального источника # атаки или попробовать получить доступ к сетевым сервисам, которые # ограничены на определённые IP адреса. antispoof quick for $WAN #Запрет всего явно не разрешенного трафика block all # ### Входящий трафик # Привилегированный трафик pass in quick on $WAN proto tcp from any to $WANIP port $EXTRDP_PORT queue priv # Обычный трафик pass in quick on $WAN from any to $WANIP keep state queue other # Вообще-то на входящем трафике приоритезация в PF не работает,но правила я # все-таки написал. # ### Исходящий трафик # Привилегированный трафик pass out quick on $WAN proto tcp from $WANIP \ port $EXTRDP_PORT to any keep state queue priv # Обычный трафик pass out quick on $WAN from $WANIP to any keep state queue other |
pf_enable="YES" pf_rules="/usr/local/etc/pf.conf" |
и рестартуем pf:
# /etc/rc.d/pf restart |
Проверяем корректность создания правил при помощи команд:
pfctl -sn
Cуществующие правила NAT
pfctl -sr
Существующие правила трансляции
pfctl -ss
Установленные соединения
pfctl -si
Различные счетчики
pfctl -sa
Все вышеперечисленное сразу
pfctl -sq -vvv
Показывает состояние очередей
Обновляем порты при помощи portsnap:
# portsnap fetch Looking up portsnap.FreeBSD.org mirrors... 5 mirrors found. Fetching snapshot tag from portsnap5.FreeBSD.org... done. Fetching snapshot metadata... done. Updating from Wed Jun 15 14 :21 :31 MSD 2011 to Thu Jul 21 11 :37 :27 MSD 2011 . Fetching 3 metadata patches.. done. Applying metadata patches... done. Fetching 3 metadata files... done. Fetching 9656 patches.....10 .... <Часть вывода удалена> ...........9650 ... done. Applying patches... done. Fetching 1282 new ports or files... done. # portsnap extract /usr/ports/.cvsignore /usr/ports/CHANGES ................. <Часть вывода удалена> ................. /usr/ports/x11/yelp/ /usr/ports/x11/zenity/ Building new INDEX files... done. |
В качестве кэширующего DNS-сервера используем dnscache из пакета djbdns, так как он ест меньше памяти и считается более безопасным, чем входящий в поставку FreeBSD DNS-сервер BIND.
Устанавливаем djbdns:
# cd /usr/ports/dns/djbdns && make install clean |
Собираем и устанавливаем с такими опциями:
DUMPCACHE persistent cache for dnscache IPV6 IPv6 support by Felix von Leitner IGNOREIP ignoreip2 patch by Russell Nelson JUMBO jumbo patch by Claudiu Costin [X] MAN manual pages by Gerritt Pape PERSISTENT_MMAP persistent mmap patch by Lennert Buytenhek [X] SRV SRV record patch by Michael Handler |
djbdns также потянет за собой порт daemontools. daemontools предназначен для запуска демонов и наблюдения за их работой. То есть если какой-то демон под его управлением "упадет", то daemontools перезапустит его.
Создаем группу dnsusers, в которую будут входить пользователи, под которыми будут запускаться сам dnscache и dnslog (логгер для djbdns):
создаем пользователя для dnslog:
# pw useradd dnslog -s /sbin/nologin -d /dev/null -G dnsusers |
создаем папку, с содержимым которой работает daemontools:
запускаем daemontools:
так как конфигурация dnscache находится в /usr/local/etc/djbdns, а daemontools работает с папкой /var/service, делаем ссылку:
# ln -s /usr/local/etc/dnscache /var/service/dnscache |
В папке /usr/local/etc/dnscache/env находятся файлы с более расширенной конфигурацией dnscache, но в данном случае нас вполне устроят значения по умолчанию.
Для нормальной работы сервера нужно задать ему адреса вышестоящих серверов. За каждую зону отвечает файл с таким же, что и имя зоны, именем, находящийся в /usr/local/etc/dnscache/root/servers. В каждый файл вписываются ip адреса серверов, ответственных за эту зону. Так как мы любые запросы перенаправляем на DNS-сервера провайдера, мы пишем их имена в файл с именем "@" (ответственный за корневую зону).
Перезапускаем dnscache:
Устанавливаем DHCP сервер (я его собрал с такими опциями):
# cd /usr/ports/net/isc-dhcp41-server && make install clean Options for isc-dhcp41-server 4 .1 .e_1,2 DHCP_IPV6 Enable support for IPv6 [X] DHCP_PARANOIA Enable support for chroot DHCP_LDAP Experimental LDAP backend support DHCP_LDAP_SSL Support LDAP connection over SSL/TLS |
Доводим конфиг DHCP сервера (/usr/local/etc/dhcpd.conf) до такого состояния:
local-address 192 .168 .0 .1 ; default-lease-time 600 ; max-lease-time 7200 ; authoritative; ddns-update-style interim; log-facility local7; subnet 192 .168 .0 .0 netmask 255 .255 .255 .0 { range 192 .168 .0 .10 192 .168 .0 .250 ; option routers 192 .168 .0 .1 ; # Если у вас поднята SAMBA, то вы можете попробовать отдавать клиентам # еще и значение WINS-сервера. # option netbios-name-servers 192.168.0.1; # у нас уже поднят свой DNS-сервер, поэтому отдаем его адрес option domain-name-servers 192 .168 .0 .1 ; } # "привязываем" определенные MAC адреса к определенным IP адресам host admin { hardware ethernet 03 :03 :03 :03 :03 :03 ; fixed-address 192 .168 .0 .2 ; } host server { hardware ethernet 04 :04 :04 :04 :04 :04 ; fixed-address 192 .168 .0 .3 ; } |
Добавляем в /etc/rc.conf строки:
и стартуем DHCP сервер:
Все нормально. Функционал простейшего dir-300 достигнут.
Не так давно нужно было поставить гейт в Интернет для одного интернет-кафе. Кафе имело доступ к Интернету через ADSL-модем с Ethernet интерфейсом и локалку на 50 компьютеров со статическими адресами. Решено было поставить именно шлюз, а не купить обычной роутер с NAT, так как в роутерах все равно крутится урезанный линукс, а шлюз на базе ПК имел гораздо больше возможностей. К тому с таким количеством компьютеров использование прокси-сервера для кеширования веб-страниц давало определенную экономию траффика. Машинка имела параметры уровня Pentium2-600 с 256 Mb оперативной памяти. Вариант установки оффтописка отпадал из-за слабых мощностей и ненадежности и отсутствия гибкости. К тому же FreeBSD идеально подходит для гейтов в силу малой требовательности ресурсов и надежности работы. Насколько мне известно по хоум-провайдингу, гейты на FreeBSD могут спокойно натить полосу до 500-600 mbit/sec
Итак, дано - установить FreeBSD на компьютер, настроить NAT, настроить прозрачный прокси.
Не буду утомлять читателей описанием установки, благо это подробно описано и иллюстрировано в .
После установки я , включив в него дополнительные опции, а именно
options IPFIREWALL #добавил поддержку файрволла
options IPFIREWALL_VERBOSE #логгирование
options IPFIREWALL_VERBOSE_LIMIT=100 #органичение количества записей в лог
options IPFIREWALL_DEFAULT_TO_ACCEPT #файерволл "открыт" по умолчанию
options IPFIREWALL_FORWARD
options IPDIVERT #включение поддержки перенаправления пакетов
options DUMMYNET #может понадобится для ограничения скорости
После пересборки ядра настала очередь правки /etc/rc.conf для включения NAT. NAT будет использовать в виде отдельного демона. У меня на шлюзе стояло 2 сетевые карточки, одна смотрела в интернет через модем (настроенный в режиме моста), вторая в локальную сеть.
Соотвественно, первая была re0 и имела адрес вида 213.230.x.x, вторая rl0 - адрес 192.168.0.1
Правим /etc/rc.conf
defaultrouter=213.230.x.x #указываем основной шлюз
ifconfig_re0="inet 213.230.x.x netmask 255.255.255.252" #задаем внешний интернетовский адрес
ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0" #задаем внутренний адрес
gateway_enable="YES" #зайдествуем режим шлюза
natd_enable="YES" #включем NAT
nat_interface="re0" #указываем натируемый интерфейс
nat_flags="-f /etc/natd.conf" #файл настройки демона NAT
firewall_enable="YES"
nameserver 195.158.0.1
nameserver 195.158.0.3
После сохранения и перезагрузки (это не обязательно, можно поднять интерфейсы и демон не перезагружая, но проверить как что поднимается все же нужно), проверяем доступность в обоих сетках, пропинговав локальные машины и хосты в интернете.
Уже на данном этапе интернет доступен локальным компьютерам, единственное что нужно дополнительно настроить на них, так это указать на них шлюз по умолчанию 192.168.0.1 и в строке DNS-сервера также прописать 192.168.0.1
Пришла очередь поставить squid. Для начала обновляем .
После успешного обновления переходим собственно к установке.
#cd /usr/ports/www/squid31/
#make install clean
После окончания установки идем править файл настройки squid, находящегося по адресу /usr/local/etc/squid/squid.conf
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
#Здесь указываются подсетки, которые имеют доступ к нашей проксе, у нас подсетка 192.168.0.0, потому оставляем только ее
#acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/24 # Указываем сеть 192.168.0.1-254
#IPv6 Not Available:acl localnet src fc00::/7 # RFC 4193 local private network range
#IPv6 Not Available:acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # https
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # httpss
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # https-mgmt
acl Safe_ports port 488 # gss-https
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling https
acl CONNECT method CONNECT
#
# Recommended minimum Access Permission configuration:
#
# Only allow cachemgr access from localhost
https_access allow manager localhost
https_access deny manager
# Deny requests to certain unsafe ports
https_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
https_access deny CONNECT !SSL_ports
# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#https_access deny to_localhost
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
https_access allow localnet
https_access allow localhost
# And finally deny all other access to this proxy
https_access deny all
# Squid normally listens to port 3128 - Порт, на котором будет висеть прокси
https_port 127.0.0.1:3128 intercept #transparent для версий ниже 3.1
# We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?
# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/squid/cache 500 16 256
cache_mem 256 MB
# Leave coredumps in the first cache dir
coredump_dir /var/squid/cache
# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|?) 0 0% 0
refresh_pattern . 0 20% 4320
#/usr/local/sbin/squid -z
Стартуем его
#/usr/local/etc/rc.d/squid -start
Если Squid успешно запустился - открываем любой бразуер, указываем нашу проксю вида 192.168.0.1:3128 и пробуем открыть например тот же google.com.
Открылся? Замечательно, вписываем в /etc/rc.conf
squid_enable="YES"
И делаем его прозрачным, добавив правило в файрволл.
ipfw add fwd 192.168.0.1,3128 tcp from 192.168.0.0/24 to any 80
После этого, на клиентском компьютере убираем прокси с браузера и пробуем открыть другую страницу. Паралелльно можно смотреть файл /var/log/squid/access.log, в котором фиксируются обращения к прокси. Если все работает, в логи появляются записи - поздравляю. Теперь все веб-запросы от клиентских компьютеров будут прозрачно кешироваться, экономя вам траффик.
На этом первоначальная настройка гейта завершена.
UPD. Иногда нужно раздавать интернет не всем в локальной сети, а некоторым пользователям. Тогда можно прикрутить к сквиду авторизацию. Это делается путем добавления в конфиг
auth_param basic program /usr/local/libexec/squid/ncsa_auth /usr/local/etc/squid/internet_users
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl squidusers proxy_auth REQUIRED
# htpasswd -c /etc/squid/internet_users synergix
New password: *******
Re-type new password: *******
Adding password for user synergix
Ключ -с необходимо указывать только один раз, при создании файла с паролями. В последующем добавлять пользователей нужно без этого ключа. Итак, мы получили файл с примерно таким содержимым.
synergix:89XzEEI/P0e56
Где synergix - имя пользователя, а 89XzEEI/P0e56 - хеш его пароля. Для добавления нового пользователя в существующий файл необходимо выполнить следующую команду
# htpasswd -b /etc/squid/internet_users second_user 1234567
Adding password for user second_user
Посмотрим -
# cat /etc/squid/internet_users
syenrgix:89XzEEI/P0e56
second_user:EAJezc5eLXrV2
Выставим права для файла
# chmod 440 /usr/local/etc/squid/internet_users
# chown squid:squid /usr/local/etc/squid/internet_users
#/usr/local/etc/rc.d/squid reload
У тебя есть своя собственная локальная сеть,
ты решил, что тебе пора ее подключать к Интернету по выделенной лини. Ну, что же дело хорошее, сегодня я постараюсь тебе
помочь немного с этим 🙂 Начнем с установки FreeBSD, поскольку мы помешаны на
безопасности, о ней надо позаботиться заранее 🙂 Вырубай все, везде отвечай
твердо нет:), то что нам надо мы сами потом включим 🙂 Во время установки системы у тебя спросит
"Хотите ли вы посмотреть коллекцию портов?", отвечай да. Сейчас мы установим дополнительное
программное обеспечение. Лезем в раздел security и выбираем там программу с названием PortSentry, позже она нам пригодиться 🙂 После установки нам надо откомпилировать
ядро… За основу возьмем готовое ядро GENERIC. Оно лежит по адресу /sys/i386/conf. Пиши новое ядро для системы внимательно, удаляй все не нужное (например, удаляй нафиг поддержку USB, COM, LPT, SCSI, RAID и других устройств которые ты не будишь использовать в системе, USB тебе на фиг не надо ты же не собираешься к маршрутизатору подключать устройства с поддержкой USB, и так поступай со всем остальным, тем более это повысит быстродействие системы в целом... Более подробную информацию ты найдешь в файле LINT). Дальше в новое ядро добавляем следующие строчки:
Options IPFIREWALL #Включаем поддержку файрвола
Options IPDIVERT #это опция нужна для работы NAT
Options IPFIREWLL_VERBOSE #Пускай файрвол пишет логи
Options IPFIREWALL_VERBOSE_LIMIT=10 #Ограничение записей в лог, для событий
Options TCP_DROP_SYNFIN #Не будим принимать левые пакеты
Options ICMP_BANDLIMIT #Это опция для предотвращения DOS атак 🙂
Options ACCEPT_FILTER_DATA #Я обычно включаю эту опцию 🙂
Options TCP_RESTRICT_RST #Данную опцию тоже следует включить
config proxy, cd ../../compile/proxy, make depend, make, make install
Все, поздравляю, только что ты откомпилировал свое ядро, если что-то не пошло и компиляция
остановилась - посмотри, может ты что-то не так сделал, такое бывает и попробуй пересобрать ядро заново. После чего делаем ребут системы. И машина у нас должна загрузиться с новым ядром. Если же все таки этого не
произошло не расстраивайся - систему можно загрузить со старым ядром. Для этого при
загрузке, когда она скажет хотите ли вы войти в режим восстановления, нажми Enter, там
дай команду unload, потом load kernel.old и boot. Все, система загрузиться со старым ядром.
По умолчанию система перед загрузкой ждет 9 секунд.
Мы идем в папку /boot и правим там файл loader.conf, нам надо добавить туда следующую строчку
boot_autodelay=0, это делается чтобы системы не ждала 9 секунд ответ пользователя, нам же надо чтобы если что система при перезагрузке выходила быстро в онлайн 🙂 Дальше идем в
папку /etc и начинаем править фал rc.conf. Ниже привожу пример с комментариями, так что разобраться
будет не сложно:
hostname="zlobix.evil.com" #Ссетевое имя твоей машины
firewall_enable="YES" #Включаем файрвол
firewall_script="/usr/local/etc/firewall.conf" #путь к файлу с политиками файрвола
firewall_type="close" #Тип файрвола, данный тип запрещает все!
firewall_logging="YES" #Тускай наш файрвол пишет логи
natd_program="/sbin/natd" #Туть к демону natd
natd_interface="ed0" #Та каком интерфейсе у нас будит висеть NAT, интерфейс должен смотреть в сторону ISP (Inetrnet Service Provader)
tcp_extension="NO" #Отрубаем опасные расширения для TCP/IP
tcp_keepalive="YES" #Ставь эту опцию, твой роутер будит менее
подвержен DOS атакам.
tcp_drop_synfin="YES" #Не принимаем левые пакеты
tcp_restrcit_rst="YES" #Не помню что обозначает но включить рекомендую 🙂
icmp_drop_redirect="YES" #Не работаем с ICMP
пакетами
icmp_log_redirect="YES" #Ведем логи ICMP пакетов
ifconfig_lo0="inet 127.0.0.1" #настройка петлевого адреса,
оставь так как тут указано
ifconfig_ed0="inet 167.65.89.147 nemask 255.255.255.192" #в данном примере у нас этот
интерфейс смотрит в сторону провайдера, где ed0 имя интерфейса, inet
IP - адрес выданный провайдером, netmask маска подсети.
ifconfig_ed1="inet 192.168.0.1 netmask 255.255.255.0" #настройка внутреннего интерфейса, то есть который смотрит в сторону локальной сети
ifconfig_ed1_alias0="inet 192.168.1.1 netmask 255.255.255.0" # на один сетевой интерфейс можно повесить сразу несколько
IP адресов (IP-алиасинг), в данном примере предполагается, что сеть у нас поделена логически на две подсети 192.168.0.0/24 и 192.168.1.0/24 где /24
- код по маски по методу CIDR, который соответствует
маске подсети 255.255.255.0
syslogd_enable="YES" #Включаем демон, который
будет отвечать за логи
inetd_enable="NO" #Выруби этот сервис обязательно!
named_enable="NO" #этот тоже выруби, ты же не будишь юзать свой маршрутизатор в качестве DNS сервера 🙂
nfs_client_enable="NO" # Ниже три параметра отвечают за подержку Network File System, мой тебе совет отруби ее тоже
nfs_server_enbale="NO"
nfs_reserved_port_only="NO"
fsck_y_enable="YES"
portmap_enbale="NO" #отключаем портмапер
sshd_enbale="YES" #Включаем ssh, чтобы мы могли управлять нашим маршрутизатор удаленно 🙂
sshd_programm="/usr/sbin/sshd/" #путь до демона ssh
sshd_flags="" #Флаги запуска sshd, если не знаешь оставь так как есть
defaultrouter="167.65.89.1" #Вышестоящий маршрутизатор нашего провайдера
getaway_enbale="YES" #Включаем шлюз на нашей машине
icmp_bmcastecho="NO" #Вырубаем ответы на сообщения echo протокола ICMP, это нам сэкономит нервы 🙂
cron_enable="NO" #Не знаю, но большинство людей включает Cron, я же его вырубаю, поскольку на маршрутизаторе он мне нафиг не нужен...
clear_tmp_enable="YES" #Очищаем директорию tmp при каждой загрузки системы
lpd_enable="NO" #Печатать ты тоже не будишь с маршрутизатора, так что отрубай тоже
usbd_enable="NO" #Вырубаем демон для поддержки USB устройств
sendmail_enable="NO" #Отрубаем sendmail, самое дырявое место во FreeBSD, постоянно находят какие-то ошибки:))))
kern_securelevel_enable="YES" #Включаем защиту
kern_securelevel="0" #Устанавливаем тип защиты
Так, после того как мы разобрались с rc.conf, надо настроить наш Маршрутизатор на работу с ДНС, для этого открывай файл resolv.conf в этой же папке и пиши туда это:
nameserver="167.65.88.18" #Адрес DNS сервера нашего провайдера
nameserver="167.65.88.17" #Адрес резервного DNS сервера нашего провайдера
Как ты уже понял после nameserver="" в кавычках указывается
IP адрес DNS сервера. DNS сервера локальной сети лучше не добавляй, береженого бог бережет 🙂 Дошло дело до ssh.
Его нам надо обезопасить 🙂 и повысить защиту,
поэтому идем в папку /etc/ssh и открываем файл sshd_config. И правим следующие:
#sshd_config
Port 666 #На данном порте у нас будит весеть ssh 🙂
Protocol 2 #Используем более безопасный метод передачи данных
PermitRootLogin no #Отключаем возможность входа в систему пользователю root, для наших нужд мы создадим специального пользователя 🙂
PrintLastLog yes #Отображает дату последнего входа в систему
PermitEmptyPasswords no #Запрещаем вход пользователей с пустым паролем
После того как разобрались, преступим к файрволу...