Собсна управление пакетами в ubuntu реализовано через iptables. Очень мощный инструмент, но кнопать команды из консоли долго и трудоемко.
Дабы упростить управление пакетами через iptables есть замечательная обертка shorewall.
Итак, приступим-с...
Ставим shorewall:
$sudo apt-get install shorewall
Настраиваем. Настройки хранятся в /etc/shorewall. По началу он этот каталог "голый": есть только 2 файла. Начинаем настройку:
$sudo mcedit /etc/shorewall/shorewall.conf
устанавливаем два параметра: STARTUP_ENABLED=Yes и IP_FORWARDING=Yes
Определяем "зоны", с которыми будет общаться shorewall.Первая зона - локальная сеть, вторая зона - монструозный интернет, ну и служебная зона shorewall. О зонах shorewall узнает из файла zones. Как я уже говорил, shorewall изначально "голый", доп файло конфигурации можно взять в /usr/share/doc/shorewall-common/examples/.
Копипастим /usr/share/doc/shorewall-common/examples/two-interfaces/zones в к себе в конфиги (/etc/shorewall), ну и подправим как нам надо. Собсна, прописываем зоны shorewall`у
$sudo mcedit /etc/shorewall/zones fw firewall net ipv4 loc ipv4
loc - зона локальной сети. Вся локальная сеть за исключением интернет-шлюза
net - любой компьютер вне локалки.
fw - firewall. Наш интернет-шлюз.
По умолчанию, политика shorewall: "запрещено все, что не разрешено". Эти политики определяются файлом policy. По этому копируем его к себе в /etc/shorewall
Политика по умолчанию нас вполне устраивает, доп разрешения определим позже. Итак, файл /etc/shorewall/policy должен выглядеть следующим образом:
loc net ACCEPT # разрешены запросы из локальной сети в интернет loc $FW REJECT info # будут отвергнуты запросы любого локального компьютера к файрволу $FW net ACCEPT $FW loc ACCEPT # файрволу вообще все разрешено net all DROP # все запросы из интернета просто дропаются all all REJECT info # все что не попало под предыдущее правило, запрещено
ключ info означает политику логирования (/var/log/messages).
Концептуальные запреты определены, принцип "запрещено все, что не разрешено" сохраняется. Определим теперь управление "разрешено/запрещено". Для этого есть управляющий файл rules. При анализе пакета сначала ищется правило с этом файле, если там ничего нет - тогда срабатывают правила из policy.
Создаем управляющие правила:
sudo mcedit /etc/shorewall/rules #ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ # PORT PORT(S) DEST LIMIT GROUP #Разрешаем пинговать между всеми сетями firewall ACCEPT all fw icmp 8 - ACCEPT fw all icmp 8 - #Открытие http, https портов из шлюза в мир Web(ACCEPT) fw net #открываем ssh SSH(ACCEPT) loc fw #разрешаем DNS запросы DNS/ACCEPT loc fw DNS/ACCEPT loc net DNS/ACCEPT fw net #разрешаем mysql запросы ACCEPT fw fw tcp 3306 ACCEPT fw fw udp 3306 #разрешаем amavisd запросы ACCEPT fw fw tcp 10025,10026 ACCEPT fw fw udp 10025,10026 #разрешаем синхронизацию времени ntpdate ACCEPT fw loc:PDC_IP udp 123 #domain logons #Разрешаем полный доступ со стороны контроллера домена и обратно #The next 4 lines enable unlimited access from the Primary Domain Controller ACCEPT loc:PDC_IP fw tcp #135,139,1024:65535 ACCEPT loc:PDC_IP fw udp #137,138,1024:65535 ACCEPT fw loc:PDC_IP tcp #135,139,1024:65535 ACCEPT fw loc:PDC_IP udp #137,138,1024:65535 #Разрешаем доменную аутентификацию # The next 4 lines open the box for share browsing, authentication # and other MS stuff ACCEPT loc fw tcp 135,139 ACCEPT loc fw udp 137,138 ACCEPT fw loc tcp 135,139 ACCEPT fw loc udp 137,138 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Основная настройка практически завершена. Осталось связать сетевые карты и зоны. Это определяется в interfaces.
$sudo mcedit /etc/shorewall/interfaces ############################################################################### #ZONE INTERFACE BROADCAST OPTIONS net ppp0 detect dhcp,tcpflags,routefilter,nosmurfs,logmartians loc eth0 detect tcpflags,nosmurfs #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Осталось настроить преобразования адресов. Для того, чтобы оно работало, правим файл masq
$sudo mcedit /etc/shorewall/masq ############################################################################### #INTERFACE SOURCE ADDRESS PROTO PORT(S) IPSEC MARK ppp0 eth0 #LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE
На этом все! Проверяем конфиг shorewall
$sudo shorewall check
ошибок быть не должно)
Чтобы shorewall запустился при старте, надо еще поправить файл:
$sudo mcedit /etc/default/shorewall startup = 1;
Перегружаем shorewall
$sudo shorewall restart
Чтоб компьютеры из локалки могли спокойно серфить по инету, нам нужен pdnsd - кеширующий dns-сервер:
$sudo apt-get install pdnsd
При установке будет задан вопрос про тип конфигурации. Выбираем Manual и правим:
$sudo mcedit /etc/defaults/pdnsd START_DAEMON = yes AUDO_MODE
затем
$sudo mcedit /etc/pdnsd.conf секция global: меняем значение параметра server_ip на 192.168.10.1 (т.е. на IP-адрес карты eth0, которая смотрит в локальную сеть) добавляем секции: rr { name = server_name; ns = localhost; a = 192.168.0.1; } server { label = "mydns"; ip = 208.67.222.222; - это IP-адрес OpenDNS-сервера, сюда можно записать адрес, выдаваемый провайдером proxy_only = off; }
Все остальное из файла убираем
- секция rr определяет разрешение локальных ресурсов
- секция servers указывает на внешние dns-сервера
Добавим защиту от "особо умных" кулхацкеров. Будем помещать этих умников в blacklist`ы.
Копируем /usr/share/doc/shorewall/default-config/blacklist в к себе в конфиги (/etc/shorewall) и правим:
$sudo mcedit /etc/shorewall/blacklist #ADDRESS/SUBNET PROTOCOL PORT 85.105.121.99 189.7.89.84 93.178.192.105 113.88.50.71 59.58.240.104
- загоняем IP адреса всех "умников" и спамеров, которые мешают нам жить
Далее настраиваем политики обработки blacklist`a shorewall`лом:
$sudo mcedit /etc/shorewall/shorewall.conf BLACKLIST_DISPOSITION=REJECT BLACKLIST_LOGLEVEL = BLACKLISTNEWONLY=Yes
BLACKLISTNEWONLY=Yes - проверка осуществляется только для новых запросов на установление соединения (Yes), проверка осуществляется для всех запросов на установление соединения + распространяется на уже установленные соединения.
BLACKLIST_DISPOSITION=REJECT - Пакеты с хостов из чёрного списка будут отбрасываться без уведомления (drop) или с уведомлением (reject).
Теперь указываем какие интерфейсы необходимо пропускать через blacklist:
На этом все! Интернет-шлюз готов к использованию!!!
$$sudo mcedit /etc/shorewall/interfaces #ZONE INTERFACE BROADCAST OPTIONS net ppp0 detect dhcp,tcpflags,nosmurfs,routefilter,logmartians,blacklist loc eth0 detect tcpflags,nosmurfs,routefilter,logmartians
На этом все! Интернет-шлюз готов к использованию!!!
Комментариев нет:
Отправить комментарий