Меньше будет докапываться
Вот же пенёк
Made in Abyss
В Питере шаверма и мосты, в Казани эчпочмаки и казан. А что в других городах?
Мы постарались сделать каждый город, с которого начинается еженедельный заед в нашей новой игре, по-настоящему уникальным. Оценить можно на странице совместной игры Torero и Пикабу.
Реклама АО «Кордиант», ИНН 7601001509
Вопрос по NAT и производительности оборудования
Поделитесь, пожалуйста, лучшими практиками чем вывести в интернет компьютерный клуб на 50-70 машин, nat на один внешний ip? Как это обычно бывает, всё упирается в бюджет, иначе можно было бы взять цыску/джунипер и не париться.
Хотелки к оборудованию:
1) cпособность раздать входящий канал 400 Мегабит/сек на 50-70 PC с минимальным джиттером
2) возможность настроить нормальный QoS или DPI (как минимум, надо уметь резать torrent/ftp[/http] в пользу игрушек/трансляций/скайпа).
3) средняя отказоустойчивость оборудования (не нужно горячего резервирования)
4) задел для резервирования/балансировки через второго провайдера
5) монтирование в стойку
К сожалению, мой опыт в данном вопросе остался в конце 2000-х и тогда бы я однозначно решал вопрос выделенным сервером со специализированным дистрибутивом linux/freebsd.
Сейчас же в продаже появилось очень много интересных роутеров аля mikrotik да и можно какую-нибудь б/у цыску взять у которой тоже производительность неплохая будет. Но, к сожалению, опыта с оборудованием small buisness/soho у меня мало.
Хардварное решение в плане надёжности однозначно лучше. И лучше новое, чем б/у (у меня на последний год умерло штук пять цысок 7206 с возрастом около 20 лет. С одной стороны, столько отработали - это офигеть как круто, с другой - сейчас брать коробку такого возраста очень рискованно).
Как мне кажется, по соотношению цена/качество выделенный сервер всё же мне кажется более предпочтительным, да и какую-нибудь файлопомойку организовать на нём всегда можно, если возникнет необходимость..
Если у кого-то был подобный опыт, буду благодарен если посоветуете конкретные железки - для
компьютерного клуба задержка/джиттер это критический параметр, поэтому не хочется перебирать железо на своём опыте.
Также буду благодарен если подскажете подводные камни. Например, есть мнение что нужно делать трансляцию не на один адрес, а на несколько внешних. Понятно, что трансляция на один адрес более затратна по ресурсам, но нигде не сталкивался с изысканиями на эту тему. С точки зрения бизнеса проще разово купить железку чуть по мощнее, чем ежемесячно платить провайдеру за 50 белых ip.
Freebsd 11.1. Шлюз (роутер), DNS и DHCP сервер, IPFW, kernel NAT.
Я долго искал в интернете много разных how to по настройке шлюза на FreeBSD 11 и IPFW NAT, но ни один вариант мне не подходил, всегда что-то не работало, пришлось изобрести свой велосипед, может кому-то пригодится. Настоятельно рекомендую дочитать статью до конца, прежде чем выполнять какие-либо действия. На момента данного апдейта статьи я уже выполнил все те же действия на физической машине и она успешно работает в качестве шлюза и раздаёт домашним устройствам интернет. Писалось всё для себя, по мере выполнения и реализации каждого шага, но в итоге (imho) получилась вполне себе годная how to.
Все манипуляции производились на виртуальных машинах FreeBSD 11.1-RELEASE amd64, Ubuntu Desktop 17.04 x32 установленных на VmWare под управлением Windows 10. На VmWare необходимо настроить сеть следующим образом:
1. Идем Edit => Virtual Network Editor, не все опции доступны под обычным пользователем, поэтому нажимаем внизу кнопку Change Settings для того чтобы открылись необходимые настройки.
2. Там может быть уже настроено что-то, либо Вы уже сами что-то пытались настроить, поэтому перед настройкой рекомендую нажать Restore Defaults.
3. Нам нужно всего два интерфейса vmnet0 и vmnet1.
4. vmnet0 ставим опцию Bridged и в строке Bridged to выбрать тот интерфейс, через который Ваш основной ПК ходит в интернет и нажать Apply. Всё!
5. vmnet1 ставим опцию Host-only и галочку Connect a host virtual adapter to this network и нажимаем Apply. Ниже могут быть прописаны какие-то адреса, но для нас это не важно.
6. Настроив оба интерфейса нажимаем OK и выходим из редактора виртуальных сетей.
7. В настройках FreeBSD удаляем все сетевые адаптеры и добавляем новый, ставим галочку Connect at power on, выбираем пункт Custom: Specific virtual network и выбираем адаптер VMnet0.
8. Для второго адаптера все те же шаги, но на последнем этапе выбираем VMnet1.
9. Для Ubuntu необходимо аналогично добавить единственный адаптер VMnet1.
10. У меня на FreeBSD vmnet0 был как em0, а vmnet1 как em1, если у Вас иначе правьте все конфиги где это встречается.
После настроек сети можете установить обе гостевые системы, обновить их и начинать манипуляции по инструкции ниже. Установка FreeBSD и Ubuntu не самый сложный процесс, особенно Ubuntu, но даже по FreeBSD полно guide и how to (в-первую очередь рекомендую handbook), так что не буду тратить время, может быть как-нибудь потом.
После установки.
Настроить sshd.
В rc.conf должна быть строчка:
sshd_enable="YES"
Настроить конфиг /etc/ssh/sshd_config:
Необходимо найти строку:
#Port 22
раскомментировать и поменять стандартный порт на свой любимый, я КРАЙНЕ НЕ РЕКОМЕНДУЮ использовать стандартный 22 порт, я на себе прочувствовал когда мой первый шлюз лег от brute force.
После этого у Вас появится возможность подключаться по SSH. Можете использовать такую классику как Putty, а мне нравится Bitvise SSH Client, очень удобно в нём работать: простейший копипаст любых конфигов, а также удобный sftp. Но это дело вкуса.
Обновить порты:
portsnap fetch extract
portsnap fetch update
Далее обновить систему:
freebsd-update fetch
freebsd-update install
Перезагружаем:
shutdown -r now
Под root работать плохая практика:
установим и настроим sudo:
cd /usr/ports/security/sudo
make config
make install clean
открываем конфиг по адресу /usr/local/etc/sudoers и даём разрешение действовать от имени root пользователям из группы wheel и уберем комментарий строки
%wheel ALL=(ALL) ALL
при такой настройке вводя sudo каждый раз перед выполнением команды будет запрашиваться пароль, для того чтобы использовать sudo без пароля уберем комментарий строки
%wheel ALL=(ALL) NOPASSWD: ALL
Подготовка к сборке ядра.
Устанавливаем svn:
cd /usr/ports/devel/subversion
sudo make config
sudo make instal clean
Обновляем исходники системы:
svn co https://svn.freebsd.org/base/release/11.1.0/ /usr/src
если такое сообщение:
Error validating server certificate for 'https://svn.freebsd.org:443':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
Certificate information:
- Hostname: svn.freebsd.org
- Valid: from May 1 20:26:50 2018 GMT until Jul 30 20:26:50 2018 GMT
- Issuer: Let's Encrypt Authority X3, Let's Encrypt, US
- Fingerprint: 91:B4:F6:CA:ED:1D:7C:EA:C1:F9:33:A5:36:27:C0:7D:E6:2E:6B:AA
(R)eject, accept (t)emporarily or accept (p)ermanently?
вводим t и всё продолжится
Копируем стандартное ядро:
sudo cp /usr/src/sys/amd64/conf/GENERIC /usr/src/sys/amd64/conf/GATEWAY
Редактируем ядро:
Открываем в любом редакторе копию ядра, а именно /usr/src/sys/amd64/conf/GATEWAY и добавим строки:
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=50
options IPFIREWALL_NAT
options LIBALIAS
options IPDIVERT
options IPSTEALTH
options DUMMYNET
options DEVICE_POLLING
options HZ="1000"
options ROUTETABLES=2
options MROUTING
device coretemp
IPFIREWALL — включение IPFW
IPFIREWALL_DEFAULT_TO_ACCEPT — по умолчанию последнее правило IPFW будет разрешать всё
IPFIREWALL_VERBOSE — включаем логирование правил
IPFIREWALL_VERBOSE_LIMIT=50 — лимит количества записей для одного правила
IPFIREWALL_NAT — NAT уровня ядра
LIBALIAS — опция также требуется для работы NAT уровня ядра
IPDIVERT — пересылка (форвард) пакетов
IPSTEALTH — перенаправление портов (NAT и пр.), используем совместно с IPDIVERT
DUMMYNET — ограничение пропускной способности интернет на клиентах или шейпер траффика
DEVICE_POLLING — опрос сетевой карточки по таймеру (периодические опросы позволяют быстрее обрабатывать пакеты), имеет смысл включать на сетевых Intel (em, igb), на других мы либо не получим прироста либо можем получить баги. Поэтому будьте внимательны при включении.
HZ="1000" — частота срабатывания планировщика, чем больше, тем чаще срабатывает планировщик рекомендуют ставить не меньше 1000
ROUTETABLES=2 — поддержка нескольких таблиц маршрутизации, в данном случае 2, максимально 16
MROUTING — поддержка пакетов с multicast-адресами, необходимо для маршрутизации
coretemp — модуль ядра для мониторинга температуры ЦП
Здесь сразу добавлю: я указываю какие опции я включаю в ядро и для чего они предназначены, но это вовсе не означает, что Вам они тоже нужны, есть спорные моменты, например: IPFIREWALL_NAT и LIBALIAS — в одном источнике видел следующее, цитата "И всё … никаких IPFIREWALL_NAT и LIBALIAS не надо! В релизе 10R libalias.ko загружается по умолчанию", но такую информацию я увидел лишь в одном месте, пока неохота и некогда изучить подробнее. Моё решение: включить эти опции в ядро, опять же если есть какие-то серьезные противоречия, то перед сборкой ядра система будет ругаться, но, кажется, это не в каждом случае работает.
Собираем и устанавливаем новое ядро:
cd /usr/src
sudo make kernel -s -j4 KERNCONF=GATEWAY
Добавляем в файл /boot/loader.conf строку:
net.inet.ip.fw.one_pass=1 — при её установке в 0 пакет, выходящий из dummynet, продолжит свое путешествие по правилам firewall, в противном случае pipe действует, как allow, значение по умолчанию - 1
Перезагружаемся:
shutdown -r now
Добавляем в /etc/rc.conf следующие строки:
gateway_enable="YES"
firewall_nat_enable="YES"
firewall_nat_interface="em0"
firewall_enable="YES"
firewall_script="/usr/local/etc/ipfw/rc.firewall"
gateway_enable="YES" # разрешаем пересылку пакетов между сетевыми интерфейсами
firewall_nat_enable="YES" # включаем ядерный nat
firewall_nat_interface="em0" # указываем внешний интерфейс для nat
firewall_enable="YES" # включаем ipfw
firewall_script="/usr/local/etc/ipfw/rc.firewall" # указываем путь, где будут лежать настройки ipfw
Создаем папку и файл с правилами для IPFW:
sudo mkdir /usr/local/etc/ipfw
sudo touch /usr/local/etc/ipfw/rc.firewall
Настройка DHCP и DNS сервера:
Устанавливаем dnsmasq:
cd /usr/ports/dns/dnsmasq/
sudo make config
sudo make install clean
На данном этапе у меня перестал работать интернет и сразу не установился dnsmasq, разбираться буду позже поэтому обнуляем правила IPFW командой: sudo ipfw flush
Сохраним оригинал конфигурационного файла:
sudo mv /usr/local/etc/dnsmasq.conf /usr/local/etc/dnsmasq.conf.default
Создадим свой:
sudo touch /usr/local/etc/dnsmasq.conf
Добавим в него следующие строки:
domain-needed
bogus-priv
interface=em1
resolv-file=/etc/resolv.conf
dhcp-range=10.20.30.5,10.20.30.150,24h
Добавим в rc.conf строку:
dnsmasq_enable="YES"
Настройка IPFW.
Редактируем правила для IPFW:
Во Freebsd есть замечательный скрипт, с помощью которого можно безопасно настраивать ipfw. Работает он просто. Вы запускаете скрипт, редактируете правила, потом сохраняете их и принимаете изменения. Скрипт после применения правил выводит сообщение о том, что все ли в порядке, записываем правила или нет. Если вы где-то ошиблись и вас отключило от сервера, вы не сможете положительно ответить на вопрос. Скрипт ждет 30 секунд ответа и если его не получает, откатывается на предыдущую версию правил. Вы спокойно подключаетесь и смотрите, где ошиблись. Копируем скрипт:
sudo cp /usr/share/examples/ipfw/change_rules.sh /usr/local/etc/ipfw_change_rules
переходим в папку
cd /usr/local/etc/
и делаем его исполняемым:
sudo chmod 0700 ipfw_change_rules
Добавляем набор правил:
#!/bin/sh
wan="em0"
wanip="10.0.0.87"
lan="em1"
lanip="10.20.30.1"
cmd="ipfw -q"
$cmd -f flush
# Check dynamic rules
$cmd add 00100 check-state
# Allow localhost internal activity
$cmd add 00200 allow ip from any to any via lo0
# don't allow localhost to send packets outside
$cmd add 00300 deny ip from any to 127.0.0.0/8
$cmd add 00310 deny ip from 127.0.0.0/8 to any
# BLOCKED private network
#$cmd add 00400 deny ip from any to 10.0.0.0/8 in via $wan
#$cmd add 00410 deny ip from any to 172.16.0.0/12 in via $wan
#$cmd add 00420 deny ip from any to 192.168.0.0/16 in via $wan
#$cmd add 00430 deny ip from any to 0.0.0.0/8 in via $wan
# BLOCKED autoconfig private network
#$cmd add 00500 deny ip from any to 169.254.0.0/16 in via $wan
# BLOCKED TV, IPTV
#$cmd add 00600 deny ip from any to 240.0.0.0/4 in via $wan
# Deny fragmented icmp packets
#$cmd add 00700 deny icmp from any to any frag
# Deny connections to internal network from external network.
#$cmd add 00800 deny ip from any to $lan in via $wan
# Deny broadcast icmp on external interface
#$cmd add 00900 deny log icmp from any to 255.255.255.255 in via $wan
#$cmd add 00910 deny log icmp from any to 255.255.255.255 out via $wan
#Deny virus
#$cmd add 01000 deny { tcp or udp } from any to any dst-port 135-139,445 via $wan
# Do NAT for internal network - FOR NATD
#$cmd 02000 divert natd ip from $lan to any out via $wan
#$cmd 02100 divert natd ip from any to any in via $wan
# Allow established connects
$cmd add 03000 allow tcp from any to any established
# Allow SSH connection to server
$cmd add 04000 allow tcp from any to me 2299 in via $wan
#DNS
$cmd add 05000 allow udp from any to $wanip 53 in via $wan
$cmd add 05100 allow udp from $wanip 53 to any out via $wan established
#Time sync
$cmd add 06000 allow udp from any to $wanip 123 in via $wan
$cmd add 06100 allow udp from $wanip 123 to any out via $wan established
# Allow outgoing traffic
$cmd add 07000 allow ip from any to any out xmit $wan
#Allow Steam>AOnline connection 10.0.0.10
$cmd add 08000 allow udp from any to any 4444, 4445, 6672, 1988, 61455, 61457, 61456, 61458, 27000, 27015, 27030, 27014, 27050 in via $wan
$cmd add 08100 allow udp from any to 10.0.0.10 4444, 4445, 6672, 1988, 61455, 61457, 61456, 61458, 27000, 27015, 27030, 27014, 27050 via $lan
###SSH to Asus RT-N16 #1
$cmd add 09000 allow tcp from any to 10.20.30.50 2233 via $wan
$cmd add 09100 allow tcp from any to 10.20.30.50 2233 via $lan
###SSH to Asus RT-N16 #2
$cmd add 10000 allow tcp from any to 10.20.30.70 2244 via $wan
$cmd add 11000 allow tcp from any to 10.20.30.70 2244 via $lan
###SSH to VBoxUbuntu
$cmd add 12000 allow tcp from any to 10.20.30.75 2006 via $wan
$cmd add 12100 allow tcp from any to 10.20.30.75 2006 via $lan
#Allow TORRENTS connection 10.0.0.10
$cmd add 13000 allow udp from any to any 30341 in via $wan
$cmd add 13100 allow udp from any to 10.20.30.10 30341 via $lan
# Allow HTTP connection to the server
$cmd add 14000 allow tcp from any to me 80, 9000-31000, 1900, 2827, 4444, 4445, 7652, 7653, 7654, 7656, 7657, 7658, 7659, 7660, 8998, 32000 in via $wan
# Allow FTP connection to the server
$cmd add 15000 allow tcp from any to me 20,21,64000-64999 via $wan
# Allow icmp echo request, echo reply and expire packet TTL
$cmd add 16000 allow icmp from any to any icmptypes 0,8,11
# port 80 for WWW server
$cmd add 17000 allow tcp from any to me 80 via $wan
# Allow connects from localnetwork
$cmd add 18000 allow all from any to any via $lan
# NAT enable
$cmd add 19000 nat 1 log ip from any to any via $wan
# Deny other activity
$cmd add 65534 deny log logamount 10000 ip from any to any
Дебажим неработающий IPFW или отсутствие интернета в LAN за шлюзом.
Интернет не работает, на шлюзе работает и всё пингует, на клиенте нет, расстроен, я в который раз пытался осилить NAT уровня ядра и снова неудача. Но я решил в этот раз протоколировать все свои действия, дабы потом не вспоминать что, где, когда и как я лихорадочно писал в конфигах, менял конфиги на другие, добавлял\удалял опции в rc.conf, sysctl.conf и так далее, решил в данной ситуации я не хочу решить проблему просто надавив всеми средствами, а именно мне хочется знать в чём же таки, проблема и моя невнимательность, а я уверен, что проблема именно в невнимательности. В поисках решения я попал на страницу форума bsdportal и там у пользователя была схожая проблема, так вот ему предложили стартануть с использованием такого набора правил:
#!/bin/sh -
fwcmd="/sbin/ipfw"
${fwcmd} -f flush
${fwcmd} -f queue flush
${fwcmd} -f pipe flush
${fwcmd} table all flush
${fwcmd} nat 1 delete
# VAR
if_lan="em0"
if_inet="em1"
ssh="2299"
# Local
${fwcmd} add allow all from any to any via lo0
${fwcmd} add deny all from any to 127.0.0.0/8
${fwcmd} add deny all from 127.0.0.0/8 to any
# ssh
${fwcmd} add allow tcp from any to any ${ssh} via ${if_lan}
${fwcmd} add allow tcp from any ${ssh} to any via ${if_lan}
# NAT
${fwcmd} nat 1 config if ${if_inet} same_ports reset log
${fwcmd} add nat 1 ip from "table(0)" to any out via ${if_inet}
${fwcmd} add nat 1 ip from any to any in via ${if_inet}
# any
${fwcmd} add allow ip from any to any
# добавить в таблицу 0 сеть для НАТа
${fwcmd} table 0 add 10.0.0.0/24
Недолго думая:
sudo mv /usr/local/etc/ipfw/rc.firewall /usr/local/etc/ipfw/rc.firewall.290518
sudo touch /usr/local/etc/ipfw/rc.firewall
Ctrl + C и Ctrl + V
sudo service ipfw restart
Я сразу лезу в виртуалку с ubuntu, открываю yandex.ru и он загрузил страницу!
Возвращаюсь на шлюз:
$ sudo ipfw show
00100 0 0 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
00400 0 0 allow tcp from any to any dst-port 2299 via em1
00500 0 0 allow tcp from any 1223 to any via em1
00600 4561 535130 nat 1 ip from table(0) to any out via em0
00700 8593 9325806 nat 1 ip from any to any in via em0
00800 13845 9920496 allow ip from any to any
65535 6 1358 allow ip from any to any
и с восторгом наблюдаю, как бодро пакеты побежали через NAT. Надо признаться, что первый конфиг IPFW я скопипастил из боевого шлюза на 9.1, который до сих пор работает, только там у меня такая связка: NATD, BIND, DHCPD. Я просто убрал оттуда divert natd и задействовал ipfw nat, но что-то пошло не так. Мораль такова, что не стоит вот так запросто копипастить конфиги и надеяться, что всё будет работать, особенно, если реализован тот же NAT разными способами, возможно не стоит если версии FreeBSD разные. Предполагаю, что конфигурация с которой стоит начать — это та самая на которой у меня благополучно всё взлетело, но мне на хватит смелости утверждать, что она идеальная для начала, но тем не менее в ней минимум правил, а значит её дебажить куда легче, чем мою. Дальше я просто пошёл по всем своим правилам из старой конфигурации и начал их по одному добавлять, каждый раз перезапуская IPFW и проверяя работу интернета на клиентской ubuntu, как только меня выкидывало по ssh или отваливался интернет на клиенте, я заходил в vmware и руками ставил комментарий на правило и дальше с ним работал, пробуя различные варианты. Проблемные оказались правила:
# Allow outgoing traffic
${fwcmd} add 63800 allow ip from any to any out xmit ${if_inet}
# Allow established connects
${fwcmd} add 63900 allow tcp from any to any established
как выяснилось их нужно ставить после правил NAT, иначе нет интернета. Также до сих пор не решил проблему как быть с правилами, в которых должен быть указан внешний IP адрес, у меня он динамический, поэтому если укажу, то в момент смены адреса последствия непредсказуемы, но скорее всего будет что-то не работать.
Переводим IPFW из открытого режима в закрытый:
Убедились, что после окончательного конфига IPFW ничего не отвалилось и всё, что нужно, работает. Пишем в файл /boot/loader.conf строку: net.inet.ip.fw.default_to_accept=0
перезагружаем сервер:
sudo shutdown -r now
Резюме.
В rc.conf
clear_tmp_enable="YES"
syslogd_flags="-ss"
sendmail_enable="NONE"
hostname="Gateway"
ifconfig_em0="DHCP"
ifconfig_em1="inet 10.20.30.1 netmask 255.255.255.0"
defaultrouter="10.0.0.1"
local_unbound_enable="NO"
sshd_enable="YES"
ntpd_enable="YES"
powerd_enable="YES"
gateway_enable="YES"
firewall_nat_enable="YES"
firewall_nat_interface="em0"
firewall_enable="YES"
firewall_script="/usr/local/etc/ipfw/rc.firewall"
dnsmasq_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
После всех манипуляций с правилами у меня получился такой /usr/local/etc/ipfw/rc.firewall:
#!/bin/sh -
fwcmd="/sbin/ipfw"
${fwcmd} -f flush
${fwcmd} -f queue flush
${fwcmd} -f pipe flush
${fwcmd} table all flush
${fwcmd} nat 1 delete
# VAR
if_lan="em1"
if_inet="em0"
ssh="2299"
# Check dynamic rules
${fwcmd} add 00100 check-state
# localhost internal activity
${fwcmd} add 00200 allow all from any to any via lo0
${fwcmd} add 00210 deny all from any to 127.0.0.0/8
${fwcmd} add 00220 deny all from 127.0.0.0/8 to any
# ssh
${fwcmd} add 00300 allow tcp from any to any ${ssh} via ${if_lan}
${fwcmd} add 00310 allow tcp from any ${ssh} to any via ${if_lan}
# BLOCKED private network
#${fwcmd} add 00400 deny ip from any to 10.0.0.0/8 in via ${if_inet}
${fwcmd} add 00410 deny ip from any to 172.16.0.0/12 in via ${if_inet}
${fwcmd} add 00420 deny ip from any to 192.168.0.0/16 in via ${if_inet}
${fwcmd} add 00430 deny ip from any to 0.0.0.0/8 in via ${if_inet}
# BLOCKED autoconfig private network
${fwcmd} add 00500 deny ip from any to 169.254.0.0/16 in via ${if_inet}
# BLOCKED TV, IPTV
${fwcmd} add 00600 deny ip from any to 240.0.0.0/4 in via ${if_inet}
# Deny fragmented icmp packets
${fwcmd} add 00700 deny icmp from any to any frag
# Deny connections to internal network from external network.
${fwcmd} add 00800 deny ip from any to 10.20.30.1 in via ${if_inet}
# Deny broadcast icmp on external interface
${fwcmd} add 00900 deny log icmp from any to 255.255.255.255 in via ${if_inet}
${fwcmd} add 00910 deny log icmp from any to 255.255.255.255 out via ${if_inet}
#Deny virus
${fwcmd} add 01000 deny { tcp or udp } from any to any dst-port 135-139,445 via ${if_inet}
#Allow Steam & GTAOnline connection
${fwcmd} add 03000 allow udp from any to any 4444, 4445, 6672, 1988, 61455, 61457, 61456, 61458, 27000, 27015, 27030, 27014, 27050 in via ${if_inet}
${fwcmd} add 03100 allow udp from any to 10.20.30.10 4444, 4445, 6672, 1988, 61455, 61457, 61456, 61458, 27000, 27015, 27030, 27014, 27050 via ${if_lan}
#Allow TORRENTS connection 10.20.30.10
${fwcmd} add 04000 allow udp from any to any 30341 in via ${if_inet}
${fwcmd} add 04100 allow udp from any to 10.20.30.10 30341 via ${if_lan}
# Allow icmp echo request, echo reply and expire packet TTL
${fwcmd} add 05000 allow icmp from any to any icmptypes 0,8,11
# Allow connects from localnetwork
${fwcmd} add 06000 allow all from any to any via ${if_lan}
# NAT
${fwcmd} nat 1 config if ${if_inet} same_ports reset log
${fwcmd} add 63000 nat 1 ip from "table(0)" to any out via ${if_inet}
${fwcmd} add 63100 nat 1 ip from any to any in via ${if_inet}
# Allow outgoing traffic
${fwcmd} add 63800 allow ip from any to any out xmit ${if_inet}
# Allow established connects
${fwcmd} add 63900 allow tcp from any to any established
# add in table 0 NAT network
${fwcmd} table 0 add 10.20.30.0/24
# Deny other activity
${fwcmd} add 65534 deny log logamount 10000 ip from any to any
В /boot/loader.conf:
net.inet.ip.fw.one_pass=1
net.inet.ip.fw.default_to_accept=0
В /usr/local/etc/dnsmasq.conf:
domain-needed
bogus-priv
interface=em1
resolv-file=/etc/resolv.conf
dhcp-range=10.20.30.5,10.20.30.150,24h
В /etc/resolv.conf:
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 10.0.0.1
Ядро скомпилировано с добавленными опциями:
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=50
options IPFIREWALL_NAT
options LIBALIAS
options IPDIVERT
options IPSTEALTH
options DUMMYNET
options DEVICE_POLLING
options HZ="1000"
options ROUTETABLES=2
options MROUTING
device coretemp
P.S.
Далее будет перенос всего на физическую машину (core i5 + 32GB RAM), которая уже заждалась сменить на боевом посту своего старичка (core 2 duo + 4GB RAM). Настройка VirtualBox и запуск гостевой Debian на ней iVideon server. Следующим шагом поднятие VPN.
Если кому-то понадобится образ настроенных виртуалок, могу поделиться, напишите мне.
К моменту. когда я закончил писать статью у меня на Ubuntu отвалился интернет, судя по логам постоянно блочился проходящий траффик с боевого шлюза на 9.1, попробовал отключать разные правила, перезапускать IPFW и в итоге инет появился, при этом все правила снова работают, я с самого начала закомментировал правило запрещающее приватную сеть 10.0.0.0, но у меня сложилось впечатление, что дело именно в том, что текущий шлюз у меня 10.0.0.1. В общем время покажет, особенно когда перееду на новую 11.1 физически.
Добавка-поправка.
Пока суть да дело, до дома доехал опять инет отвалился на клиенте, понял в чем проблема, у меня было задублировано одно правило:
# Allow connects from localnetwork
${fwcmd} add 06000 allow all from any to any via ${if_lan}
один раз стояло до NAT, второй раз после NAT, убрал то что после, полёт нормальный.
Такого NATа нам не NATо
Я долго думал куда отнести эту историю. Вроде как по прошествии небольшого периода времени она юмористическая, а вроде и достаточно грустная. Но, пожалуй, начну по порядку. Наша компания (дабы не делать рекламы) является дистрибуцией определенного программного обеспечения. Помимо продажи, мы еще занимаемся и его технической поддержкой. Кроме того у нас есть и еще масса видов деятельности, ну да ладно.
Субботним утром, когда я никого не трогая выполз из под теплого одеяла, у меня раздался звонок на телефон. Смотрю, номер не известный, ну…. Куда деваться, вдруг у людей мнова надо нажать на кнопку RESET. Снимаю трубку и состоится следующий диалог:
- Алло, здравствуйте, это Сергей.
- Да.
- Меня тоже зовут Сергей.
- Ничего страшного, много с кем бывает.
- Да я хотел уточнить, Вы находитесь там-то там-то…
- Ну да.
И тут голос собеседника меняется на агрессивный и
- У тебя есть максимум пол часа. Беги из дома, а лучше из города
Я, стараясь не смотря ни на что, сохранять спокойствие и рассудительность говорю.
- Я конечно извиняюсь, но мне и дома не плохо, зачем мне куда-то бежать?
- Мы тебе сказали, сейчас мы вычислим твой адрес и тебе ппц.
Бросают трубку. Я немного прифигевший, так как услышать такое в субботнее утро как-то не очень приятно, гляжу на мобильник. Номер определился, думаю странный какой-то звонящий. Беру и перезваниваю ему. Спрашиваю.
- Товарищ, я конечно понимаю, что у Вас там что-то случилось, а я то тут причем?
- Ты все прекрасно знаешь, не прикидывайся. Будешь знать, как заниматься такой фигней (весь мат и не цензуру я выкидываю)
- Не, я то не против огрести за что-то, если я действительно накосячил, но как-то обидно огребать не зная за что.
- Ты вымогатель, ты зачем заблокировал наш сервер? Или разблокируй его сейчас или тебе ппц.
- А я извиняюсь, какой сервер-то? Я кроме как в своем офисе, на этой неделе ни к одному серверу не прикасался?
- Ты все знаешь.
Снова бросают трубку. Чтобы не переписывать весь долгий диалог, перезвоны, выяснения, я прокину эти 2 часа нервотрепки и перейду к сути.
- Мы у вас купили Ваш программный продукт, сделали проброс порта 3389 и после этого через несколько часов всю нашу информацию заархивировали и удалили с компьютера без возможности восстановления.
- Так теперь понятно становится. А с чего Вы взяли что это я?
- А кто? А кто еще знал, что поставил Ваш продукт?
- Ну для начала, мне не достаточно знать, что вы его установили, мен надо знать Ваш внешний IP логин, пароль…..
- А чего их знать. Логин был администраор, пароль 123. Вы его подобрали….
Вот тут я совсем выпал в осадок и буквально на следующий день решил записать видеоролик про то, как не надо использовать внешний доступ. Ссылка на ролик будет в самом конце.
Дело закончилось тем. что они выяснили все-таки кто их взломал и выплатили ему за пароль 2000р. Только вот извинений от них я так и не услышал.
Уважаемые пользователи и кул админы, ссылка на это видео для Вас. И не надо винить в своих проблемах кого-то. https://youtu.be/xUzvUfAZq8g
Конкурс для мемоделов: с вас мем — с нас приз
Конкурс мемов объявляется открытым!
Выкручивайте остроумие на максимум и придумайте надпись для стикера из шаблонов ниже. Лучшие идеи войдут в стикерпак, а их авторы получат полугодовую подписку на сервис «Пакет».
Кто сделал и отправил мемас на конкурс — молодец! Результаты конкурса мы объявим уже 3 мая, поделимся лучшими шутками по мнению жюри и ссылкой на стикерпак в телеграме. Полные правила конкурса.
А пока предлагаем посмотреть видео, из которых мы сделали шаблоны для мемов. В главной роли Валентин Выгодный и «Пакет» от Х5 — сервис для выгодных покупок в «Пятёрочке» и «Перекрёстке».
Реклама ООО «Корпоративный центр ИКС 5», ИНН: 7728632689