"Интеллект - это способность избегать выполнения работы, но так, чтобы она при этом была сделана." Линус Торвальдс
"Интеллект - это способность избегать выполнения работы, но так, чтобы она при этом была сделана." Линус Торвальдс
Join Us
Открытие:
nano /etc/fstab
/dev/sda2
/dev/sda3
/dev/sda4
/dev/sda5
/boot/efi
none
/
/home
vfat
swap
ext4
btrfs
umask=0077
sw
defaults,noatime
defaults,noatime
0 2
0 0
0 1
0 0
Установка имени узла:
nano /etc/conf.d/hostname
(присвойте переменной hostname имя своего узла)
hostname="tux"
Сервер DHCP предоставляет клиенту динамический IP-адрес, маску подсети, IP-адрес шлюза по умолчанию и опционально - сервер имён DNS.
Установка dhcpcd:
emerge --ask dhcpcd
Вместо отдельного DHCP-клиента можно воспользоваться одним из сетевых менеджеров - некоторые из них имеют встроенный DHCP-клиент.
Сетевой менеджер (NetworkManager, systemd-networkd и т.д.) позволяет создавать т.н. "сетевые профили" с настройками подключений, что облегчает переключение между сетями.
Выбор приложений довольно широк, но нужно помнить, что все варианты взаимоисключают друг друга. Запускать два сетевых демона одновременно запрещено.
Для подключения сети загружаем пакет net-dialup/ppp:
emerge --ask net-dialup/ppp
Пароль root:
passwd
Password: (введите пароль)
Re-enter password: (повторно введите пароль)
Для настройки параметров часов открываем /etc/conf.d/hwclock
nano /etc/conf.d/hwclock
Если аппаратные часы системы настроены не на часовой пояс UTC (Гринвич),
в файл необходимо добавить строку
clock="local".
В противном случае будет сдвиг часового пояса.
Установка системной службы журналирования:
emerge syslog-ng
Для syslog-ng рекомендуется установить app-admin/logrotate:
emerge app-admin/logrotate
rc-update add syslog-ng default
Проверяем, включён ли режим UEFI, посмотрев содержимое каталога efivars:
ls /sys/firmware/efi/efivars
Отсутствие такого каталога, говорит что система загружена в режиме BIOS или CSM.
При использовании UEFI, если в make.conf ранее не установлено, добавляем:
echo GRUB_PLATFORMS="efi-64" >> /etc/portage/make.conf
Загружаем Grub:
emerge --ask sys-boot/grub
Устанавливаем файлы GRUB в /boot/grub:
Когда используется BIOS:
grub-install /dev/sda
Если нужно установить BIOS - версию загрузчика из-под системы, загруженной в режиме UEFI, требуется принудительно задать программе установки нужную сборку GRUB:
grub-install --target=i386-pc /dev/sda
Когда используется UEFI:
grub-install --target=x86_64-efi --efi-directory=/boot/efi /dev/sda
Генерируем конфигурацию GRUB:
grub-mkconfig -o /boot/grub/grub.cfg
В выводе команды хотя бы одно ядро Linux должно быть найдено.
Для настройки конфигурации Grub, используется файл /etc/default/grub.
Чтобы попасть в консоль, нужно нажать клавишу "c" во время отображения меню загрузки.
Команда для отображения списка жёстких дисков и разделов:
ls
В GRUB2 используются обозначения дисков вида hdX и разделов вида hdX,Y , где X номер диска, Y номер раздела на нём. Нумерация разделов начинается с единицы, нумерация дисков – с нуля.
ls позволяет получить информацию о любом разделе:
ls (hd0,gpt3)
сообщит тип файловой системы на разделе, метку раздела (если таковая имеется), UUID и дату последнего изменения данных на разделе (в формате UTC).
Может быть использована для вывода содержимого директории, например:
ls (hd0,gpt3)/boot/grub
cat - выводит содержимое заданного файла
linux - загружает указанное Linux-ядро: linux файл_ядра опция1=значение опция2 опция3
Например:
linux /boot/vmlinuz-3.14.14-gentoo root=/dev/sda3 single
initrd - загружает указанный initrd-образ:
Например:
initrd /boot/initrd.img-3.14.14-gentoo
Версия initrd должна соответствовать версии загружаемого ядра!
chainloader - передает управление загрузкой по цепочке другому загрузчику (загрузчик ищется на заданном в качестве root разделе). В общем случае требует указания файла для загрузки:
chainloader /путь/имя_файла
Для загрузчика Windows можно использовать:
chainloader +1
root - (<тип_устройства><номер_устройства>,<раздел>), настраивает и подключает корневой раздел, например:
root (hd0,gpt3)
После задания раздела команда сообщит новый root-раздел и тип файловой системы. «root hd(*,*)» не всегда корректно срабатывает, более предпочтительным вариантом является «set root».
boot - загружает операционную систему или последний загруженный последовательный загрузчик.
set - команда для изменения различных параметров. Служит для задания значений переменных и используется в формате:
set переменная=значение
Наиболее необходимое её применение - для задания root-раздела, например:
set root=(hd0,gpt3)
Также с её помощью можно, например, «на лету» изменить цвет текста в меню и консоли, что позволяет опробовать цветовую схему перед установкой её в качестве основной. Для этого изменяем переменные «color_normal» - для обычного пункта (и текста в консоли) и «color_highlight» для выделенного пункта соответственно.
Например:
set color_normal=magenta/green
set color_highlight=light-blue/black
search - служит для поиска раздела по UUID, метке или заданному файлу. Имеет следующие ключи:
-u (или –fs-uuid) - поиск раздела по UUID
-l (или –label) - поиск по метке раздела
-f (или –file) - поиск по указанному файлу
-n (или –no-floppy) - не проверять флоппи-дисковод (чтоб не трещал)
-s (или –set) - установить найденный раздел в качестве значения заданной переменной.
help - при использовании в чистом виде выведет список доступных команд.
help r
Выведет справку по всем командам, начинающимся на «r».
help search
Отобразит справку по команде «search»
halt
Выключение компьютера.
reboot
Перезагрузит компьютер.
При отсутствии загрузочного диска, можно восстановить Grub из его консоли. Восстановление происходит следующим образом: сначала нужно подгрузить все модули, чтобы стала доступна вся функциональность Grub, а затем уже запустится с нужного раздела. Как известно, Grub состоит из двух частей. Первая часть записана в MBR диска. Она содержит базовую функциональность, то есть в ней есть консоль в rescue mode и ничего больше. Вначале нужно определить, на каком разделе находится вторая часть груба (она лежит в каталоге /boot/grub), подгрузить недостающие модули. И только потом можно будет дать команду запуска с нужного раздела. В rescue mode доступно всего четыре команды: ls; set; unset; insmod.
Даём команду:
ls
она отобразит списка жёстких дисков и разделов. Зная структуру своих дисков несложно определить нужный диск.
Предположим, что Linux установлен на первый диск в третий раздел, то есть (hd0,gpt3). Даём команду:
set prefix=(hd0,gpt3)/boot/grub
set root=(hd0,gpt3)
Этими командами мы указываем использовать диск (hd0,gpt3) для дальнейших команд. После чего нужно проверить, действительно ли на этом разделе есть то, что нам нужно:
ls /boot/grub
если в ответ получаем список всех необходимых файлов в этой директории, то диск и раздел выбраны правильно. Подгружаем модули:
insmod ext2
insmod normal
normal
Проверяем правильность написания первой команды для файловых систем ext3 и ext4
Если ОС расположена на разделе, отформатированном в btrfs, то выполняем следующие команды:
set prefix=(hd0,gpt3)/@/boot/grub
set root=(hd0,gpt3)
подгружаем модули:
insmod btrfs
insmod normal
запускаем GRUB:
normal
После чего Grub перейдёт в полнофункциональный режим. Он автоматически найдёт все ОС, которые можно подгружать, и покажет своё Grub-меню.
Дальнейшее восстановление сводится к тому, чтобы загрузить нужный нам Linux, и в нем от рута дать команду:
grub-install /dev/sdX
Где sdX, диск, на который нужно установить Grub.
exit
перезагружаем компьютер:
reboot
Удаляем загрузочный носитель.
Добавление учётной записи для повседневной работы:
Login: User Password: (ваш пароль user)
useradd -m -G users,wheel,audio,video -s /bin/bash username
passwd username
Password: (введите пароль для username)
Re-enter password: (повторно введите пароль для подтверждения)
Удаляем tar-архив со stage3
rm /stage3-*.tar.bz2*
Настраиваем сеть.
Просмотр существующих сетевых интерфейсов:
ls /sys/class/net
enp3s0 lo
Открытие /etc/conf.d/net для автоматического получения адреса IP для enp0s3:
nano /etc/conf.d/net
config_enp3s0="dhcp"
Автоматический запуск сетевого подключения при загрузке.
Добавление net.enp3s0 в уровень запуска default:
cd /etc/init.d
ln -s net.lo net.enp3s0
rc-update add net.enp3s0 default
/etc/init.d/net.enp3s0 restart
Для systemd
настройка проводного и беспроводного адаптеров на одной машине:
для проводной сети с простой конфигурацией DHCP
nano /etc/systemd/network/50-dhcp.network
[Match]
Name=enp3s0
[Network]
DHCP=yes
[DHCP]
RouteMetric=10
для беспроводной сети
nano /etc/systemd/network/60-dhcp.wireless.network
[Match]
Name=wlan0
[Network]
DHCP=yes
[DHCP]
RouteMetric=20
Cлужба dhcpcd.service запускает клиент для всех сетевых интерфейсов:
systemctl enable dhcpcd.service
systemctl start dhcpcd.service
Включаем в автозапуск и запускаем следующие службы:
systemctl enable systemd-networkd.service
systemctl start systemd-networkd.service
Чтобы systemd управлял настройками DNS, заменим resolv.conf на символическую ссылку и запустим systemd-resolved:
ln -snf /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl enable systemd-resolved.service
systemctl start systemd-resolved.service.
systemd-machine-id-setup - Инициализировать идентификатор машины в /etc/machine-id.
Команда systemd-machine-id-setup также влияет на службу systemd-networkd.
Если не запустить эту команду, может произойти странное, например, сетевые интерфейсы не будут работать или сетевые адреса не будут применены.
Синхронизация системного времени с помощью ядра:
Device Drivers --->
[*] Real Time Clock --->
[*] Set system time from RTC on startup and resume
(rtc0) RTC used to set the system time
[*] Set the RTC time based on NTP synchronization
(rtc0) RTC used to synchronize NTP adjustment
[*] /sys/class/rtc/rtcN (sysfs)
[*] /proc/driver/rtc (procfs for rtc0)
[*] /dev/rtcN (character devices)
<*> PC-style 'CMOS'
Скрипт hwclock не следует запускать при использовании часов реального времени ядра. Отключаем его:
rc-update delete hwclock boot
Если необходимо синхронизировать время с помощью OpenRC, в файле /etc/conf.d/hwclock устанавливаем:
clock_hctosys="YES"
clock_systohc="YES"
# clock="local"
Перезапускаем сервис hwclock и добавляем его init-скрипт в уровень запуска boot:
rc-service hwclock restart
rc-update add hwclock boot
Для установки системного времени в systemd используем команду timedatectl.
Вывод текущего времени аппаратных часов:
$ timedatectl | grep "RTC time"
Устанавливаем аппаратные часы в соответствии с системным временем (в стандарте времени UTC):
timedatectl set-local-rtc 0
Для установки аппаратных часов в соответствии с системным временем в стандарте времени localtime (местное время):
timedatectl set-local-rtc 1
Загружаем (при необходимости) файловый редактор "vim":
emerge vim
Для получения обучающих инструкций набираем:
$ vimtutor
Утилиты необходимые для работы с файловыми системами
VFAT: emerge sys-fs/dosfstools
NTFS: В ядре отключаем поддержку NTFS.
File systems --->
DOS/FAT/EXFAT/NT filesystems --->
< >NTFS file system support
emerge sys-fs/ntfs3g
Btrfs: emerge sys-fs/btrfs-progs
Немного о Btrfs:
Btrfs имеет ряд функций, общих с ZFS.
Имеются и другие функции:
Можно сконвертировать файловые системы ext2, ext3 и ext4 в Btrfs с помощью утилиты btrfs-convert, убедившись, что отмонтирован раздел:
umount <mounted_device>
Проверяем целостность файловой системы с помощью утилиты fsck:
fsck.ext4 -f <unmounted_device>
Конвертируем отформатированное ext* устройство в Btrfs:
btrfs-convert <unmounted_device>
Не забываем отредактировать файл /etc/fstab и изменить значение в колонке файловая система с ext4 на Btrfs
Полезная функция Btrfs это онлайн дефрагментация:
btrfs filesystem defragment -r -v /home
Btrfs поддерживает прозрачное сжатие с помощью алгоритмов zlib, lzo и zstd:
btrfs filesystem defragment -r -v -clzo /home
Можно использовать алгоритм сжатия zlib вместо lzo, zlib более медленный, но имеющий более высокую степень сжатия:
btrfs filesystem defragment -r -v -czlib /home
Обновление дерева Portage:
emerge --sync
Обновление новой версии Portage:
emerge --oneshot portage
Обновление пакетов:
emerge -auvDN world
Не всегда имеется возможность дождаться полной установки и компиляции всех пакетов.
Можно выполнить команду:
emerge -auvDN world; poweroff
После окончания обновления, компьютер выключится сам.
При этом сообщения от Portage теряются. Они могут содержать важную информацию от разработчиков Gentoo.
Данную информацию, можно найти в файле:
less /var/log/portage/elog/summary.log
Чтобы перейти в нижнею часть сообщения, нажимаем на клавиатуре клавишу "End", в верхнею часть, нажимаем "Home", переход по строкам, стрелками вниз - вверх. Для выхода из less, нажимаем клавишу "Q".
Так же установка флага -f позволяет загрузить пакеты без компиляции. В дальнейшем, можно откомпилировать загруженные пакеты в удобное время даже, при отсутствии интернета.
Флаг --emptytree, -e переустанавливает целевые атомы и всё их дерево зависимостей, как будто никакие пакеты в настоящее время не установлены. Рекомендуется с этим флагом запустить флаг --pretend, чтобы убедиться в ожидаемом результате.
После обновления библиотек, старые версии часто сохраняются, по тому что другие пакеты всё ещё создаются для этих библиотек. emerge может решить эту проблему, обновив все эти пакеты, которые построены на основе старой версии. Однако это может иметь нежелательный эффект, например, долгую установку при обновлении библиотек. Таким образом, emerge не обновляет зависимые библиотеки, а вместо этого помещает их в набор: @saved-rebuild.
Можно выполнить следующую команду, если необходимо очистить старые версии библиотек:
emerge --ask @preserved-rebuild
Некоторые ebuild требуют определённые комбинации USE -флагов.
Пример: | Описание: |
---|---|
REQUIRED_USE="foo? ( bar )" | Если foo установлен, то bar должен быть установлен. |
REQUIRED_USE="foo? ( !bar )" | Если foo установлен, то bar не должен быть установлен. |
REQUIRED_USE="foo? ( || ( bar baz ) )" | Если foo установлен, то bar или baz должен быть установлен. |
REQUIRED_USE="^^ ( foo bar baz )" | Только один из foo, bar или baz должен быть установлен. |
REQUIRED_USE="|| ( foo bar baz )" | Хотя бы один из foo, bar или baz должен быть установлен (но можно больше). |
REQUIRED_USE="?? ( foo bar baz )" | Установка необязательна, но только один из foo, bar или baz может быть установлен. |
При возникновении проблемы "!!!Problem with sandbox binary. Disabling...", устанавливаем sandbox с переменной:
CFLAGS_x86="-m64" emerge sys-apps/sandbox
Программы установленные пользователем, находятся в файле /var/lib/portage/world
Обработка изменений конфигурационных файлов:
etc-update
Сканирование файлов конфигурации ...
Ниже приведён список файлов, которые необходимо обновить.
После файла конфигурации следует список возможных файлов для замены.
1) ...
2) ...
...
Выберите файл для редактирования, введя соответствующий номер.
(не используйте -3, -5, -7 или -9, если вы не знаете, что делать)
(-1 для выхода) (-3 для автоматического объединения всех файлов)
(-5 для автоматического объединения И не использовать 'mv -i')
(-7 для отмены всех обновлений)
(-9, чтобы отменить все обновления И не использовать 'rm -i'):
Для сравнения старого и нового конфига, набираем номер конфигурационного файла.
- - - и + + + соответственно означает что будет удалено, а что добавлено.
После ознакомления нажимаем q для выхода и система предлагает нам несколько вариантов.
Набираем то что нам подходит:
1) - заменит полностью старый конфиг новым,
2) - удалит новый конфиг и оставит старый,
3) - попытается слить 2 конфига в один,
4) - ещё раз покажет различия,
5) - сохранить обновление в качестве примера конфигурации.
Определяем UUID:
blkid
В /etc/fstab заменяем /dev/sdaX на соответсвующий UUID=XXXX....
ОШИБКА: при системе инициализации OpenRC, во время загрузки появляется уведомление типа:
* /etc/init.d/ ... User Runscript, pleas convert to openrc-run, необходимо выполнить следующее:
cd /etc/init.d/
sed -i "s/runscript/openrc-run/" *
При этом нужно быть очень внимательным, так как потом исправить что либо будет очень сложно!
ОШИБКА:
There is NOT at least 11520 MiB disk space at "/var/tmp/portage/dev-lang/rust-1.81.0-r100/temp"
*
* Memory or space constraints set in the ebuild were not met!
* The build will most probably fail, you should:
* - enhance the memory (reduce MAKEOPTS, add swap), or
* - add more space
* as required depending on the failed tests.
*
* ERROR: dev-lang/rust-1.81.0-r100::gentoo failed (pretend phase):
* Build requirements not met!
НЕТ по крайней мере 11520 МБ дискового пространства в "/var/tmp/portage/dev-lang/rust-1.81.0-r100/temp"
*
* Ограничения памяти или пространства, установленные в ebuild, не были соблюдены!
* Сборка, скорее всего, не удастся, вам следует:
* - увеличить память (уменьшить MAKEOPTS, добавить swap) или
* - добавить больше места
* по мере необходимости в зависимости от неудачных тестов.
*
* ОШИБКА: dev-lang/rust-1.81.0-r100::gentoo не удалось (фаза имитации):
* Требования к сборке не выполнены!
Определяем свободное/доступное место на диске, файловой системы раздела:
df -h -T # -T к выводу добавится тип файловой системы.
du - команда отображающая размер директории:
du -h /var/ | sort -rn # выводим размер всех вложенных каталогов в /var/log и отсортируем вывод от большего к меньшему.
Для очистки репозитория от неиспользуемых архивов исходного кода и бинарных пакетов используем утилиту eclean, входяшею в app-portage/gentoolkit.
Устанавливаем gentoolkit:
emerge --ask app-portage/gentoolkit
Очищаем директорию архивов исходных файлов:
eclean distfiles
Краткий вариант:
eclean-dist
Очитка директории бинарных пакетов:
eclean packages
Краткий вариант:
eclean-pkg
Для освобождения большего места на диске добавляем опцию --deep: каждый архив исходных файлов или же бинарный пакет, который не соответствует какому-либо "установленному в данный момент" пакету (версия не имеет значения), будет удалён. В данном случае пользователи не защищены от необходимости повторного скачивания, в случае, если они должны понизить версию пакета или переустановить удалённый ранее пакет.
В качестве альтернативы можно использовать сразу две опции: --deep и --package-names. Каждый архив исходных кодов или бинарный пакет, не связанный с сейчас установленным пакетом (версия не имеет значение) будет удалён. С такими опциями также потребуется снова скачать исходные файлы, когда необходимо снова установить ранее удалённый пакет, но, в этом случае, останутся исходные файлы для возможности понижения версии пакета.
Обновляем GCC:
emerge --ask --oneshot sys-devel/gcc
Проссматриваем установленные профили:
gcc-config --list-profiles
[1] x86_64-pc-linux-gnu-7.3.0 *
[2] x86_64-pc-linux-gnu-8.2.0
Выбираем необходимый профиль:
gcc-config 2
source /etc/profile
и пересоберём libtool:
emerge --ask --oneshot --usepkg=n sys-devel/libtool
Проверяем номер текущей версии, а затем удаляем старую версию:
gcc --version
emerge --ask --depclean =sys-devel/gcc-7.3.0
Проверяем целостность системы, запустив:
revdep-rebuild
Все установленные пакеты, без их зависимостей, находятся в файле: /var/lib/portage/world
Очистка python.
При возникновении ошибки:
Invalid impl in /etc/python-exec/python-exec.conf: python3.6
Очищаем python:
eselect python cleanup
eselect python list
[1] python2.7
[2] python3.9 (fallback)
[3] python3.8 (fallback)
Затем обновляем его:
eselect python update
Switching to python3.9
eselect python list
[1] python3.9
[2] python2.7
[3] python3.8 (fallback)
USE-флаги LINGUAS="ru en" L10N="ru en" и "USE=nls unicode" уже установлены ранее.
vim /etc/rc.conf Устанавливаем:
unicode="YES"
В ядре проверяем, а если нет, то включаем:
vim /usr/src/linux/.config
CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_UTF8=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_850=y
CONFIG_NLS_KOI8_R=y
В make.conf устанавливаем:
LINGUAS="ru en"
L10N="ru en"
Конфигурация локалей:
Открываем /etc/locale.gen
vim /etc/locale.gen
Определяем локали:
en_US.UTF-8 UTF-8
ru_RU.KOI8-R KOI8-R
ru_RU.UTF-8 UTF-8
запускаем:
locale-gen
Эта программа сгенерирует все локали, которые определены в файле /etc/locale.gen.
Проссматриваем доступные локали:
eselect locale list
Устанавливаем необходимую локаль (ru_RU.UTF-8):
eselect locale set 6
Перезагружаем окружение оболочки:
env-update && source /etc/profile
Устанавливаем шрифты:
emerge terminus-font intlfonts freefonts cronyx-fonts corefonts kbd
Переменные окружения:
В файле /etc/env.d/02locale прописываем:
LC_ALL="ru_RU.utf8"
LANG="ru_RU.utf8"
перечитываем конфигурацию:
env-update && source /etc/profile
Выбор раскладки клавиатуры:
vim /etc/conf.d/keymaps устанавливаем:
keymap="-u ru"
windowkeys="YES"
extended_keymaps=""
dumpkeys_charset="koi8-r"
fix_euro="NO"
Добавляем /etc/init.d/keymaps в уровень запуска boot:
rc-update add keymaps boot
Перезапускаем раскладку клавиатуры для применения изменений:
rc-service keymaps restart
Консольные шрифты можно посмотреть:
ls /usr/share/consolefonts/
Задаём консольный шрифт:
vim /etc/conf.d/consolefont устанавливаем например:
consolefont="Cyr_a8x16"
после чего добавляем в уровень запуска boot:
rc-update add consolefont boot
* service consolefont added to runlevel boot
Принудительный просмотр русских манов:
$ man -L ru <man page>
Для systemd поверяем список доступных локалей:
localectl list-locales
устанавливаем требуемую локаль:
localectl set-locale LANG=ru_RU.utf8
проверяем результат:
localectl | grep "System Locale"
System Locale: LANG=ru_RU.utf8
проверяем доступные раскладки для консоли:
localectl list-keymaps
устанавливаем необходимую раскладку для консоли, например:
localectl set-keymap ruwin_alt-UTF-8
проверяем, что раскладка для консоли была установлена:
localectl | grep "VC Keymap"
VC Keymap: ruwin_alt-UTF-8
Консольные шрифты находятся в каталоге /usr/share/consolefonts/.
Выбираем понравившийся шрифт и добавляем его в /etc/vconsole.conf, например:
vim /etc/vconsole.conf
KEYMAP=us
FONT=UniCyr_8x16
Добавляем консольные шрифты в автозапуск:
systemctl enable systemd-vconsole-setup.service
Раскладки доступные для сервера X11 можно проверить:
localectl list-x11-keymap-layouts
устанавливаем необходимые раскладки для X11:
localectl set-x11-keymap "us ru"
проверяем, установленые раскладки для X11:
localectl | grep "X11 Layout"
X11 Layout: us ru
Модель, вариант и опции устанавливаем так:
localectl set-x11-keymap <LAYOUT> <MODEL> <VARIANT> <OPTIONS>
например:
localectl set-x11-keymap us,ru "" "" grp:alt_shift_toggle
Пакет net-dialup/ppp загружен ранее.
В /etc/rc.conf устанавливаем:
vim /etc/rc.conf
rc_depend_strict="YES"
В ядре подключаем:
Device Drivers -->
[*] Network device support -->
<*> PPP (point-to-point protocol) support
<> PPP BSD-Compress compression (NEW)
<*> PPP Deflate compression (NEW)
[*] PPP filtering (NEW)
<*> PPP MPPE compression (encryption) (EXPERIMENTAL) (NEW)
[ ] PPP multilink support (EXPERIMENTAL) (NEW)
<*> PPP over Ethernet (EXPERIMENTAL)
<*> PPP support for async serial ports (NEW)
<*> PPP support for sync tty ports (NEW)
Компилируем ядро.
Добавляем в файл /etc/conf.d/net:
vim /etc/conf.d/net
config_enp3s0="dhcp"
config_ppp0="ppp"
link_ppp0="enp3s0" #(Specify your ethernet interface)
plugins_ppp0="pppoe"
username_ppp0='1234' #(логин сети)
password_ppp0='5678' #(пароль сети)
pppd_ppp0="
noauth
defaultroute
usepeerdns
holdoff 3
child-timeout 60
lcp-echo-interval 15
lcp-echo-failure 3
noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp"
rc_net_ppp0_need="net.enp3s0"
Добавляем символическую ссылку в /etc/init.d:
ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0
Запускаем PPPoE
/etc/init.d/net.ppp0 start
Для systemd
Создаём файл настроек соединения:
vim /etc/ppp/peers/provider
следующего содержания:
plugin rp-pppoe.so
# rp_pppoe_ac 'имя концентратора доступа'
# rp_pppoe_service 'имя службы PPPoE'
# сетевой интерфейс
enp3s0
name "логин провайдера"
usepeerdns
persist
# раскомментируйте, если вам нужен автодозвон "по требованию"
#demand
#idle 180
defaultroute
hide-password
noauth
Добавляем запись с паролем соединения в /etc/ppp/pap-secrets или /etc/ppp/chap-secrets, в зависимости от типа аутентификации, используемого вашим провайдером.
Если не уверены, можно добавить запись в оба файла, pppd выберет нужный самостоятельно.
логин провайдера * пароль провайдера
Пробуем установить соединение:
pppd call provider
или
pon provider (в данном случае просто pon)
где provider — имя файла настроек, созданного в /etc/ppp/peers.
Чтобы убедиться, что соединение PPPoE установлено, проверяем вывод pppd в системном логе:
journalctl -b --no-pager | grep pppd
Файл настроек /etc/ppp/peers/provider используется по умолчанию.
Если при вызове pppd было указано другое имя файла, вместо явного указания имени файла можно просто добавить символическую ссылку на этот файл:
ln -s /etc/ppp/peers/имя_соединения /etc/ppp/peers/provider
Теперь можно устанавливать соединение одной командой:
pon
Чтобы разорвать соединение, выполняем:
poff имя_соединения
Для клиентских компьютеров в ядре должны быть активированы основные параметры:
[*] Networking support --->
Networking options --->
...
[*] TCP/IP networking
...
<*> Virtual (secure) IP: tunneling
...
<*> IP: IPsec transport mode (obsolete in kernel 5.4)
<*> IP: IPsec tunnel mode (obsolete in kernel 5.4)
...
<*> INET: socket monitoring interface
...
<*> The IPv6 protocol --->
...
[*] Network packet filtering framework (Netfilter) --->
...
Core Netfilter Configuration --->
-*- Netfilter LOG over NFNETLINK interface
<*> Netfilter connection tracking support
...
-*- Netfilter Xtables support (required for ip_tables)
*** Xtables combined modules ***
...
*** Xtables matches ***
<*> "conntrack" connection tracking match support
...
IP: Netfilter Configuration --->
<*> IP tables support (required for filtering/masq/NAT)
<*> Packet filtering
<*> REJECT target support
...
<*> iptables NAT support
...
IPv6: Netfilter Configuration --->
<*> IP6 tables support (required for filtering)
< > "ipv6header" IPv6 Extension Headers Match
<*> Packet filtering
<*> REJECT target support
<*> iptables NAT support
...
<*> IPV4/IPV6 bridge connection tracking support
Для Router следующие параметры:
[*] Networking support --->
Networking options --->
[*] TCP/IP networking
[*] IP: multicasting
[*] IP: advanced router
...
[*] IP: ARP daemon support
[*] IP: TCP syncookie support
<M> IP: AH transformation
<M> IP: ESP transformation
<M> IP: IPComp transformation
<M> IP: IPsec transport mode
<M> IP: IPsec tunnel mode
<M> IP: IPsec BEET mode
<*> Large Receive Offload (ipv4/tcp)
Netfilter
<*> INET: socket monitoring interface
<M> UDP: socket monitoring interface
[ ] TCP: advanced congestion control --->
...
<M> The IPv6 protocol --->
...
[*] Network packet filtering framework (Netfilter) --->
[*] Advanced netfilter configuration
Core Netfilter Configuration --->
<M> "addrtype" address type match support
<M> "comment" match support
<M> "hl" hoplimit/TTL match support
<M> "limit" match support
<M> "multiport" Multiple port match support
<M> "recent" match support
Установка Iptables:
emerge --ask net-firewall/iptables
Программа nmap, которую обычно используют взломщики:
emerge --ask net-analyzer/nmap
Подсистема iptables и Netfilter встроена в ядро Linux.
Все сетевые пакеты, которые проходят через компьютер, отправляются компьютером или предназначены компьютеру, ядро направляет через фильтр iptables. Там эти пакеты поддаются проверкам и затем для каждой проверки, если она пройдена выполняется указанное в ней действие. Например, пакет передается дальше ядру для отправки целевой программе, или отбрасывается.
Все пакеты делятся на три типа: входящие, исходящие и проходящие.
Все пакеты делятся на три цепочки:
input - обрабатывает входящие пакеты и подключения. Например, если какой-либо внешний пользователь пытается подключиться к компьютеру по ssh или любой веб-сайт отправит свой контент по запросу браузера. Все эти пакеты попадут в эту цепочку;
forward - эта цепочка применяется для проходящих соединений. Сюда попадают пакеты, которые отправлены на ваш компьютер, но не предназначены ему, они просто пересылаются по сети к своей цели. Такое наблюдается на маршрутизаторах или, например, если компьютер раздает wifi;
output - эта цепочка используется для исходящих пакетов и соединений. Сюда попадают пакеты, которые были созданы при попытке выполнить ping или когда вы запускаете браузер и пытаетесь открыть любой сайт.
Для каждого типа пакетов можно установить набор правил, которые по очереди будут проверяться на соответствие с пакетом и если пакет соответствует, то применять к нему указанное в правиле действие. Правила образуют цепочку, поэтому input, output и forward называют цепочками, цепочками правил. Действий может быть несколько:
ACCEPT - разрешить прохождение пакета дальше по цепочке правил;
DROP - удалить пакет;
REJECT - отклонить пакет, отправителю будет отправлено сообщение, что пакет был отклонен;
LOG - сделать запись о пакете в лог файл;
QUEUE - отправить пакет пользовательскому приложению.
Правила могут проверять любые соответствия, например, по ip, по порту получателя или отправителя, заголовкам пакета и многому другому. Если пакет не подходит ни одному из правил, то к нему применяется действие по умолчанию, обычно ACCEPT.
Кроме перечисленных выше, есть еще две дополнительные цепочки правил:
prerouting - в эту цепочку пакет попадает перед обработкой iptables, система еще не знает куда он будет отправлен, в input, output или forward;
postrouting - сюда попадают все проходящие пакеты, которые уже прошли цепочку forward.
Над цепочками правил в iptables есть еще один уровень абстракции, и это таблицы. В системе есть несколько таблиц, и все они имеют стандартный набор цепочек input, forward и output. Таблицы предназначены для выполнения разных действий над пакетами, например для модификации или фильтрации. Фильтрация пакетов iptables осуществляется в таблице filter:
raw - предназначена для работы с сырыми пакетами, пока они еще не прошли обработку;
mangle - предназначена для модификации пакетов;
nat - обеспечивает работу nat, если вы хотите использовать компьютер в качестве маршрутизатора;
filter - основная таблица для фильтрации пакетов, используется по умолчанию.
Обычно команда имеет такой общий вид:
iptables [-t имя-таблицы] команда [шаблон] [-j действие]
имя-таблицы указывает таблицу, с которой нужно работать, этот параметр можно упустить, команда - нужное действие, например, создать или удалить правило, а дополнительные параметры описывают действие и правило, которое нужно выполнить.
Список команд:
-A имя-цепочки правило (добавить правило в конец цепочки; ключ --set-counters позволяет установить счётчики пакетов и байтов)
-I имя-цепочки номер правило (вставить правило в цепочку перед правилом с указанным номером, нумерация с 1; ключ --set-counters позволяет установить счётчики пакетов и байтов)
-R имя-цепочки номер правило (заменить; ключ --set-counters позволяет установить счётчики пакетов и байтов)
-D имя-цепочки номер (удалить правило с указанным номером, нумерация с 1)
-D имя-цепочки правило (удалить правило по текстуальному совпадению)
-C имя-цепочки пакет (тестировать прохождение пакета; исходящий адрес, адрес назначения, протокол, интерфейс, порты задаются соответствующими ключами)
-L [имя-цепочки] (показать список правил; дополнительные ключи:
-v (вывести дополнительную информацию, в частности, счётчики)
--exact (показывать счётчики без округления до KB, MB и т.д.)
--numeric (показывать адреса и номера портов в виде чисел)
--line-numbers (выводить номера правил)
-F имя-цепочки (удалить все правила из цепочки)
-Z имя-цепочки (обнулить счетчики)
-N имя-цепочки (создать цепочку)
-X имя-цепочки (удалить пустую цепочку, на которую нет ссылок)
-P имя-цепочки действие (изменить действие по умолчанию: ACCEPT, DROP, QUEUE, RETURN)
-E старое-имя-цепочки новое-имя-цепочки (переименовать цепочку)
Дополнительные опции для правил:
-p - указать протокол, один из tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp, mh;
-s - указать ip адрес устройства-отправителя пакета;
-d - указать ip адрес получателя;
-i - входной сетевой интерфейс;
-m, --match - указывает соответствие для использования, то есть модуль расширения, который проверяет конкретное свойство. Набор совпадений составляет условие, при котором вызывается цель. Match сначала оцениваются, как указано в командной строке, и работают в режиме короткого замыкания, т.е. если одно расширение дает ложное значение, оценка прекращается.
-o - исходящий сетевой интерфейс;
-j - выбрать действие, если правило подошло.
Просмотр правил iptables:
iptables -L -n
iptables -S
Можно указать нужную цепочку, чтобы вывести правила только для нее:
iptables -L INPUT
Нельзя просто так отключить iptables остановив сервис обновления правил iptables или даже удалив набор утилит для настройки. Подсистема работает на уровне ядра и не зависит от того, что там установлено. Поэтому если сделать что-то не так, нужно будет очистить правила:
iptables -F
Только для определенной цепочки:
iptables -F Input
Если для пакета не подходит ни одно правило, то для него применяется действие по умолчанию. Его можно задать с помощью опции -p:
iptables -p INPUT ACCEPT
iptables -p OUTPUT ACCEPT
iptables -p FORWARD DROP
В этом примере разрешаются цепочки INPUT и OUTPUT, но запрещается FORWARD.
Для блокировки пакетов можно использовать действие DROP, фильтровать пакеты, которые нужно заблокировать можно по множеству критериев, например, протоколу, ip адресу, маске сети, порту и многому другому.
Команда, которая позволяет добавить правило iptables для блокировки всех входящих пакетов от 10.10.10.10:
iptables -A INPUT -s 10.10.10.10 -j DROP
Блокировка исходящих пакетов на этот же адрес:
iptables -A OUTPUT -s 10.10.10.10 -j DROP
Блокировка диапазона ip выполняется подобным образом. Для этого нужно использовать маску сети 10.10.10.0/24. Это будут все адреса начиная от 10.10.10.0 до 10.10.10.255:
iptables -A INPUT -s 10.10.10.0/24 -j DROP
Или расширенный вариант маски:
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Также можно заблокировать все входящие соединения ssh:
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Для удаления правил iptables используется опцию D.
Так можно удалить правило iptables:
iptables -A OUTPUT -s 10.10.10.10 -j DROP
Запрет ICMP- сообщений, которые могут выдать дополнительную информацию о хосте или быть использованы для выполнения различных злонамеренных действий (например, модификации таблицы маршрутизации).
Таблица со списком возможных типов ICMP-сообщений:
0 — echo reply (echo-ответ, пинг)
3 — destination unreachable (адресат недосягаем)
4 — source quench (подавление источника, просьба посылать пакеты медленнее)
5 — redirect (редирект)
8 — echo request (echo-запрос, пинг)
9 — router advertisement (объявление маршрутизатора)
10 — router solicitation (ходатайство маршрутизатора)
11 — time-to-live exceeded (истечение срока жизни пакета)
12 — IP header bad (неправильный IP заголовок пакета)
13 — timestamp request (запрос значения счетчика времени)
14 — timestamp reply (ответ на запрос значения счетчика времени)
15 — information request (запрос информации)
16 — information reply (ответ на запрос информации)
17 — address mask request (запрос маски сети)
18 — address mask reply (ответ на запрос маски сети)
Ответ на некоторые ICMP-сообщения может привести к разглашению некоторой информации о хосте, в то время как другие — привести к модификации таблицы маршрутизации, поэтому их необходимо запретить.
Обычно выход во внешний мир разрешают ICMP-сообщениям 0, 3, 4, 11 и 12, в то время как на вход принимают только 3, 8 и 12.
Брутфорс.
Разведав информацию об открытых портах и ОС, взломщик предпринимает попытки проникновения в систему, которые могут быть основаны на эксплуатации дыр в сервисах, либо на подборе паролей.
Предотвратить возможность взлома сервисов брандмауэр не поможет, однако затормозить процесс перебора паролей — легко.
Для этого применяются возможности по ограничению количества пакетов, пришедших на машину с одного IP-адреса.
Вот как это можно сделать с помощью iptables:
# Цепочка для проверки соединений
iptables -N brute_check
# Блокировка адреса, если за 60 секунд он инициировал более 2-х соединений
iptables -A brute_check -m recent --update --seconds 60 --hitcount 2 -j DROP
# Если нет — разрешаем соединение и заносим адрес в список
iptables -A brute_check -m recent --set -j ACCEPT
# Очищаем цепочку INPUT
iptables -F INPUT
# Отправляем в цепочку brute_check всех, кто пытается подключиться к 22-му порту
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 22 -j brute_check
iptables -P INPUT DROP
При такой конструкции Iptables блокирует все соединения по IP, а не только 22 порт. Лучше защищать от брутфорса так:
iptables -A brute_check -p tcp --syn --dport 22 -m recent --name radiator --set
iptables -A brute_check -p tcp --syn --dport 22 -m recent --name radiator --update --seconds 120 --hitcount 2 -j DROP
iptables -A INPUT -j brute_check
Спуфинг.
Спуфинг (подмена адреса отправителя пакета) может быть использован для осуществления DoS-атак или обхода брандмауэра.
В первом случае спуфинг дает огромное преимущество атакующему, так как существенно затрудняет реакцию на атаку (пакеты, приходящие с совершенно разными адресами отправителя, не так просто классифицировать и заблокировать) и затягивает процесс закрытия новых соединений (обычно поддельный адрес недостижим, поэтому закрытие соединения происходит лишь по истечению таймаута).
Спуфинг, осуществляемый для обхода системы защиты, менее опасен и в большинстве случаев поддается контролю.
Достаточно часто, блокируя внешние сетевые сервисы хоста, системные администраторы оставляют их открытыми для определенного диапазона адресов (например, для подключения со своей домашней машины).
Вычислив один из этих адресов, взломщик может сформировать пакет, указав этот адрес в качестве обратного, и таким образом «проскользнуть » через брандмауэр. Далее он может угадать номера последовательности TCP-пакетов и сделать так, чтобы доверяющий обратному адресу сервис выполнил нужное ему действие. Это очень трудная в реализации атака, которая, тем не менее, может быть выполнена грамотным специалистом, а если речь идет о протоколе UDP, то это под силу и кулхацкеру.
Для защиты от подобных атак достаточно не открывать порты незащищенных сервисов во внешний мир, а в случае резкой необходимости использовать защитные системы самих сервисов (например, сертификаты ssh) или механизм «стука в порты».
Ситуация становится более сложной, когда дело касается сетевого моста, разделяющего внутреннюю и внешнюю сети (или две локальных сети).
Доверительные отношения внутри локальной сети — обычное дело. Сервисы доступны всем, никакой аутентификации, шифрования и т.д. — просто лакомый кусочек для взломщика.
Находясь во внешней сети, он может узнать сетевую маску внутренней сети и сформировать пакеты с соответствующим ей обратным адресом, что приведет к получению доступа ко всем ресурсам локалки. Это действительно опасная ситуация, но ее легко предотвратить с помощью правильной настройки брандмауэра или ОС.
Для этого достаточно запретить прохождение пакетов, обратные адреса которых соответствуют используемым во внутренней сети, с внешнего интерфейса:
iptables -A INPUT -i $outif -s 192.168.1.0/24 -j DENY
В качестве альтернативы или дополнительной меры защиты нужно использовать специальные директивы ipfw и pf и настройки ядра Linux:
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
Эти три команды приводят к одинаковым результатам. Все пакеты, обратные адреса которых соответствуют маске сети другого интерфейса, отбрасываются.
Удаленное управления брандмауэром, получившего имя «стук в порты» (port knoking).
Суть его заключается в том, чтобы заставить файервол выполнять определенные действия после подключения к заданному порту.
Ниже приведен пример правил, открывающих порт SSH на 10 секунд после «стука» в 27520-ый порт
iptables и port knocking.
# Цепочка для проверки соединений на защищаемый порт
iptables -N knock
# Разрешаем соединение, если стук был в течение последних 10 секунд
iptables -A knock -m recent --rcheck --seconds 10 -j ACCEPT
# Очищаем INPUT
iptables -F INPUT
# Разрешаем все, что относится к уже установленным соединениям
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Все попытки открыть соединение с 22-м портом отправляем на проверку в цепочку knock
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 22 -j knock
# Правило добавляет адрес стучащегося в список. Если та же машина в течение 10 секунд после стука обратится к 22-му порту, соединение будет установлено.
# Заносим адрес стучащегося в 27520-й порт в список
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 27520 -m recent --set
# При стуке в соседние порты удаляем адрес из списка
iptables -A INPUT -m conntrack --ctstate NEW -p tcp -m multiport --dport 27519,27521 -m recent --remove
# Запрещаем все
iptables -P INPUT DROP
iptables распространяется в пакете xtables-addons (patch-o-matic) и носит имя TARPIT. Это действие (такое же, как ACCEPT или DENY), которое «подвешивает» соединение, не позволяя атакующей стороне его закрыть.
Соединение, пакеты которого попадают в TARPIT, будет благополучно установлено, однако размер окна будет равен нулю, благодаря чему удаленная машина не сможет отправлять данные, расходуя свои ресурсы, а соединение будет закрыто только по истечению таймаута.
TARPIT можно использовать в экстренных случаях для защиты от DoS:
iptables -A INPUT -p tcp -m tcp -dport 80 -j TARPIT
Или же для введения атакующего в заблуждение и борьбы против сканеров портов (только обычное TCP-сканирование, '-sT'):
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -j TARPIT
Эти правила создают видимость системы, в которой открыты все порты, однако при попытке подключения к любому из них (кроме 80 и 25) соединения будут «подвисать».
Того же результата, но без «провисших» соединений, можно добиться с помощью действия DELUDE, которое правильно отвечает на все попытки инициации соединения, но посылает RST-пакет в ответ на все остальные пакеты.
Для еще большего запутывания атакующего можно использовать действие CHAOS, которое случайным образом активирует одно из двух описанных выше действий.
Выяснение, какие порты прослушиваются:
netstat -tuwpln
Команда netstat признана устаревшей и на смену ей пришла более быстрая и удобная в использовании команда ss.
Если запустить ss без аргументов командной строки или опций, она выведет полный список работающих соединений.
Команда ss (без опций) показывает очень много данных (подробности по всем соединениям, установленным по TCP, UDP и с помощью сокетов Unix), можно отправить вывод этой команды в файл для того, чтобы проанализировать его позже:
ss > ss_output
Выяснение, какие порты прослушиваются:
ss -tuwpln
С помощью grep можно выяснить, какое именно ПО занимается прослушиванием конкретного порта, какой порт прослушивается конкретным ПО и т.д.:
ss -tuwpln | grep "firefox"
Флаги для команды ss:
-h, --help Вывести справку.
-V, --version Вывести версию программы.
-n, --numeric Не раскрывать имена служб.
-r, --resolve Не раскрывать номера адресов/портов.
-a, --all Показывать все сокеты.
-l, --listening Показывать слушающие сокеты.
-o, --options Показывать информацию таймера.
-e, --extended Показывать детальные сведения о сокете.
-m, --memory Показывать использование памяти сокетом.
-p, --processes Показывать процесс, использующий сокет.
-i, --info Показывать внутреннюю информацию TCP.
-s, --summary Выводить сводку. Эта опция не обрабатывает список сокетов, а получает сведения из других источников. Полезно при огромном количестве сокетов, что делает обработку файла /proc/net/tcp слишком долгим.
-4, --ipv4 Показывать только сокеты IP версии 4 (аналогично -f inet).
-6, --ipv6 Показывать только сокеты IP версии 6 (аналогично -f inet6).
-0, --packet Показывать пакетные сокеты.
-t, --tcp Показывать только сокеты TCP.
-u, --udp Показывать только сокеты UDP.
-d, --dccp Показывать только сокеты DCCP.
-w, --raw Показывать только сокеты RAW.
-x, --unix Показывать только сокеты Unix.
-f ТИП, --family=ТИП Показывать только сокеты указанного ТИПА. Поддерживаются следующие типы: unix, inet, inet6, link, netlink.
-A ЗАПРОС, --query=ЗАПРОС Список таблиц сокетов, разделенных запятыми. Поддерживаются следующие идентификаторы: all, inet, tcp, udp, raw, unix, packet, netlink, unix_dgram, unix_stream, packet_raw, packet_dgram.
-D ФАЙЛ Не показывать ничего, вывести необработанные данные о сокетах TCP в ФАЙЛ с учетом фильтров. Если ФАЙЛ указан как -, вывести на стандартный вывод.
-F ФАЙЛ, --filter=ФАЙЛ Прочитать фильтр из ФАЙЛА. Каждая строка ФАЙЛА интерпретируется как отдельная опция командной строки. Если ФАЙЛ указан как -, получить содержимое из стандартного ввода.
FILTER := [ state ФЛАГ_TCP ] [ ВЫРАЖЕНИЕ ] Обратитесь к официальной документации (пакет iproute-doc в Debian) для описания фильтров.
Фильтрация сокетов с использованием состояний TCP, например:
ss -4 state FILTER-NAME-HERE
Где FILTER-NAME-HERE может быть любым из приведённых ниже:
established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listen
closing
all : все вышеперечисленные состояния;
connected : все состояния, за исключением прослушивания и закрытия;
synchronized : все подключенные состояния, за исключением syn-sent;
bucket : показывать состояния, которые поддерживаются как мини-сокеты, т.е. время ожидания и syn-recv;
big : Противоположно состоянию bucket.
Формировать правила брандмауэра можно в скрипте.
Нет необходимости запускать скрипт после каждой загрузки.
Пример скрипта Iptables:
#!/bin/bash
IPTB="/sbin/iptables"
GENTOOSYNC="160.116.15.34 89.238.71.6"
SKYPEPORTLIST="3478 3479 3480 3481"
# Очищаем цепочки таблиц filter
$IPTB -F
$IPTB -X
$IPTB -Z
# Политики по умолчанию для filter
$IPTB -t filter -P INPUT DROP
$IPTB -t filter -P FORWARD DROP
$IPTB -t filter -P OUTPUT DROP
# Разрешение форвардинга для QEMU
$IPTB -t filter -A OUTPUT -o tap0 -j ACCEPT
# Политики для внутренних интерфейсов
$IPTB -A INPUT -i lo -j ACCEPT
# Все входящие установленные и связанные соединения пропускаем
$IPTB -t filter -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Разрешим прохождение служебных пакетов типа ping
$IPTB -t filter -A OUTPUT -p icmp -j ACCEPT
# Открытие портов для различных служб
$IPTB -A INPUT -p icmp --icmp-type 3 -j ACCEPT
$IPTB -A INPUT -p icmp --icmp-type 11 -j ACCEPT
$IPTB -A INPUT -p icmp --icmp-type 12 -j ACCEPT
$IPTB -A INPUT -p tcp --syn --dport 113 -j REJECT --reject-with tcp-reset
$IPTB -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT # SSH
$IPTB -t filter -A INPUT -p tcp -s 192.XXX.X.00/24 --dport 22 -j ACCEPT # SSH на вход
$IPTB -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT # DNS (53 UDP)
$IPTB -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT # DNS (53 TCP )
$IPTB -t filter -A OUTPUT -p udp --dport 68 -j ACCEPT # dhcpcd
$IPTB -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT # HTTP client (80 TCP)
$IPTB -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT # POP3 (110 TCP)
$IPTB -t filter -A OUTPUT -p udp --dport 137 -j ACCEPT # nmbd Samba
$IPTB -t filter -A OUTPUT -p udp --dport 138 -j ACCEPT # nmbd Samba
$IPTB -t filter -A OUTPUT -p tcp --dport 139 -j ACCEPT # smbd Samba
$IPTB -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT # HTTPS client (443 TCP)
$IPTB -t filter -A OUTPUT -p tcp --dport 445 -j ACCEPT # smbd Samba
$IPTB -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT # Почта исходящие
$IPTB -t filter -A OUTPUT -p tcp --dport 631 -j ACCEPT # CUPS CLIENT (631 TCP)
$IPTB -t filter -A INPUT -p tcp -s 10.0.0.0/24 --dport 631 -j ACCEPT # CUPS SERVER (631 TCP)
$IPTB -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT # IMAP Почта входящие
$IPTB -t filter -A OUTPUT -p tcp --dport 995 -j ACCEPT # POP3 Почта входящие
$IPTB -t filter -A OUTPUT -p udp --dport 1194 -j ACCEPT # OpenVPN
$IPTB -t filter -A OUTPUT -p tcp --dport 3389 -j ACCEPT # qTox
$IPTB -t filter -A OUTPUT -p tcp --dport 5355 -j ACCEPT # systemd-resol
$IPTB -t filter -A OUTPUT -p tcp --dport 5900 -j ACCEPT # Spisy
$IPTB -t filter -A OUTPUT -p tcp --dport 5924 -j ACCEPT # Spisy
$IPTB -t filter -A OUTPUT -p udp --dport 6881 -j ACCEPT # ktorrent
$IPTB -t filter -A OUTPUT -p udp --dport 7881 -j ACCEPT # ktorrent
$IPTB -t filter -A OUTPUT -p udp --dport 8443 -j ACCEPT # PLESK rusonyx.ru
$IPTB -t filter -A OUTPUT -p udp --dport 8881 -j ACCEPT # ktorrent
$IPTB -t filter -A OUTPUT -p tcp --dport 9050 -j ACCEPT # Tor
$IPTB -t filter -A OUTPUT -p tcp --dport 33445 -j ACCEPT # qTox
$IPTB -t filter -A OUTPUT -p tcp --destination-port 33446:46353 -j ACCEPT # KeePass
for NFSSERV in $NFSSERVERS
do
$IPTB -t filter -A INPUT -f -s $NFSSERV # Разрешили фрагментированные пакеты
$IPTB -t filter -A INPUT -s $NFSSERV -j ACCEPT
$IPTB -t filter -A OUTPUT -d $NFSSERV -j ACCEPT
done
# UDP ports for Skype
for PORTADDR in $SKYPEPORTLIST
do
$IPTB -t filter -A OUTPUT -p udp --dport $PORTADDR -j ACCEPT
done
# Gentoo emerge --sync (873 TCP)
for GSYNC in $GENTOOSYNC
do
$IPTB -t filter -A OUTPUT -p tcp -d $GSYNC --dport 873 -j ACCEPT
done
# Все установленные и связанные соединения пропускаем
$IPTB -t filter -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
ip6tables -F
ip6tables -X
ip6tables -Z
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP
ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate INVALID -j DROP
ip6tables -A INPUT -s fe80::/10 -p ipv6-icmp -j ACCEPT
ip6tables -A INPUT -p udp -m conntrack --ctstate NEW -j REJECT --reject-with icmp6-port-unreachable
ip6tables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j REJECT --reject-with tcp-reset
ip6tables -t filter -A OUTPUT -p udp --dport 58 -j ACCEPT # dhcpcd
ip6tables -t filter -A OUTPUT -p tcp --dport 139 -j ACCEPT # smbd Samba
ip6tables -t filter -A OUTPUT -p tcp --dport 445 -j ACCEPT # smbd Samba
ip6tables -t filter -A OUTPUT -p udp --dport 1194 -j ACCEPT # OpenVPN
ip6tables -t filter -A OUTPUT -p tcp --dport 5355 -j ACCEPT # systemd-resol
ip6tables -t filter -A OUTPUT -p tcp --dport 6881 -j ACCEPT # ktorrent
ip6tables -t filter -A OUTPUT -p udp --dport 6881 -j ACCEPT # ktorrent
ip6tables -t filter -A OUTPUT -p udp --dport 7881 -j ACCEPT # ktorrent
ip6tables -t filter -A OUTPUT -p udp --dport 8881 -j ACCEPT # ktorrent
ip6tables -t filter -A OUTPUT -p udp --dport 33445 -j ACCEPT # qTox
Все настройки iptables с помощью команд или после запуска скрипта сохранятся только до перезагрузки. После перезагрузки компьютера все изменения будут стерты. По этому для сохранения правила iptables, нужно выполнить команду:
Для IPv4
$ rc-service iptables save
Правила сохраняются обычно в /var/lib/iptables/rules-save и /var/lib/ip6tables/rules-save
Запуск iptables:
$ rc-service iptables start
Добавляем iptables в автозагрузку:
$ rc-update add iptables default
Для IPv6
$ rc-service ip6tables save
$ rc-service ip6tables start
$ rc-update add ip6tables default
Для запуска в systemd создаём юнит
iptables | ip6tables |
---|---|
vim /etc/systemd/system/firewall.service | vim /etc/systemd/system/firewall6.service |
следующего содержания: | |
[Unit] | [Unit] |
Description=iptables | Description=ip6tables |
DefaultDependencies=false | DefaultDependencies=false |
[Service] | [Service] |
Type=oneshot | Type=oneshot |
RemainAfterExit=yes | RemainAfterExit=yes |
ExecStart=/sbin/iptables-restore /var/lib/iptables/rules-save | ExecStart=/sbin/ip6tables-restore /var/lib/ip6tables/rules-save |
[Install] | [Install] |
WantedBy=sysinit.target | WantedBy=sysinit.target |
Перезагружаем systemd для поиска новых или измененных юнитов: | |
systemctl daemon-reload | |
Сохранение правил: | |
systemctl start iptables-store | systemctl start ip6tables-store |
Включаем юнит в автозагрузку: | |
systemctl enable firewall.service | systemctl enable firewall6.service |
Запускаем юнит: | |
systemctl start firewall.service | systemctl start firewall6.service |
Николай: Люди тратили уйму своего времени и труда, чтобы создать этот софт и дарят его Вам. Найдите, пожалуйста, немного времени, чтобы прочитать документацию и научиться это использовать!
Николай: Не понравился сайт, хотите научить меня администрировать? Пожалуйста, с удовольствием буду учиться.
Отзывы в Вашем распоряжении!
Николай: Я знаю, у Вас уйма вопросов! На многие из них можете получить ответы прямо сейчас.