Настройка фаервола
Для управления правилами фаервола я использую скрипт. Создадим его:
Далее будем наполнять его необходимыми правилами. Я буду разбирать все значимые части скрипта, а полностью его приведу в виде текстового файла в конце статьи. Правила сделаны в виде картинок, чтобы запретить копирование и вставку. Это может привести к ошибкам в работе правил, с чем я сам столкнулся во время подготовки статьи.
Мы рассмотрим ситуацию, когда сервер является шлюзом в интернет для локальной сети.
Первым делом зададим все переменные, которые будем использовать в скрипте. Это не обязательно делать, но рекомендуется, потому что удобно переносить настройки с сервера на сервер. Достаточно будет просто переназначить переменные.
Перед применением новых правил, очищаем все цепочки:
Блокируем весь трафик, который не соответствует ни одному из правил:
Разрешаем весь трафик локалхоста и локалки:
Разрешаем делать ping:
Если вам это не нужно, то не добавляйте разрешающие правила для icmp.
Открываем доступ в инет самому серверу:
Если вы хотите открыть все входящие соединения сервера, то добавляйте дальше правило:
Делать это не рекомендуется, привожу просто для примера, если у вас появится такая необходимость.
Дальше разрешим все установленные соединения и дочерние от них. Так как они уже установлены, значит прошли через цепочки правил, фильтровать их еще раз нет смысла:
Теперь добавим защиту от наиболее распространенных сетевых атак. Сначала отбросим все пакеты, которые не имеют никакого статуса:
Блокируем нулевые пакеты:
Закрываемся от syn-flood атак:
Следом за этими правилами рекомендуется поставить правила на запрет доступа с определенных IP, если у вас имеется такая необходимость. Например, вас задолбал адрес 84.122.21.197 брутом ssh. Блокируем его:
Если вы не ставите ограничений на доступ из локальной сети, то разрешаем всем выход в интернет:
Следом запрещаем доступ из инета в локальную сеть:
Чтобы наша локальная сеть пользовалась интернетом, включаем nat:
Чтобы не потерять доступ к серверу, после применения правил, разрешаем подключения по ssh:
И в конце записываем правила, чтобы они применились после перезагрузки:
Мы составили простейший конфиг, который блокирует все входящие соединения, кроме ssh и разрешает доступ из локальной сети в интернет. Попутно защитились от некоторых сетевых атак.
Сохраняем скрипт, делаем исполняемым и запускаем:
Выполним просмотр правил и проверим, все ли правила на месте:
Обращаю ваше внимание — применять правила нужно лишь в том случае, если у вас имеется доступ к консоли сервера. При ошибке в настройках вы можете потерять доступ
Убедитесь, что в нештатной ситуации вы сможете отключить фаервол и скорректировать настройки.
Как отключить IPv6 в CentOS?
На время написания статьи активного использования ipv6 в России нет, да и зачастую если таковая возможность имеется, администраторы предпочитают протокол ipv4. Поэтому если вы все же не используете данный протокол, его нужно отключить на сервере. Если вы точно уверены, что ни один из сервисов не настроен под работу с ipv6, можете сразу перейти к настройке сетевого интерфейса, если же нет, то начните с проверки. Нам нужно проверить, какие сервисы используют ipv6 и отключить данный протокол в конфигурации сервиса. Запустим команду:
У меня сервер тестовый, поэтому ipv6 используется только для sshd и cronyd. Это можно определить по “:::”.
Чтобы не возникало проблем после отключения ipv6 в конфигурации сети, отключите данный протокол в сервисах, в которых они используются на вашем сервере. Например для sshd, нужно открыть конфигурационный файл:
И раскомментируйте строки:
#AddressFamily any #ListenAddress 0.0.0.0
После чего перезапустите сервис:
Как видим, для sshd протокол ipv6 теперь недоступен. Проделайте аналогичные настройки со всеми сервисами.
Перейдем к отключению протокола ipv6 в настройках сети. Откройте файл /etc/sysctl.conf:
И добавьте туда следующие строки:
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
Сохраните файл и примените через:
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
Перейдем к файлу /etc/sysconfig/network. Добавьте в него следующую конфигурацию:
NETWORKING_IPV6=no IPV6INIT=no
Из файла конфигурации сетевого интерфейса /etc/sysconfig/network-scripts/ifcfg-eth0 удалите строку:
IPV6INIT="yes"
И наконец добавим запрет на работу ipv6 в grub:
В конец строки GRUB_CMDLINE_LINUX, добавляем:
ipv6.disable=1
После всех настроек, сохраните файл и обновите grub:
Выполните перезагрузку сервера и проверьте конфигурацию сети:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 185.*.*.* netmask 255.255.255.0 broadcast 185.*.*.255 ether 52:54:00:d3:1c:3e txqueuelen 1000 (Ethernet) RX packets 10068 bytes 613092 (598.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 32 bytes 5399 (5.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Протокол ipv6 на сервере отключен.
Установка и запуск FreeIPA
Установка выполняется из репозитория. Команды немного отличаются в зависимости от версии CentOS.
а) для Rocky Linux / CentOS 8:
dnf install @idm:DL1
dnf install ipa-server
* первая команда установит модуль DL1 Stream-репозитория. Вторая — сам freeipa.
б) для CentOS 7:
yum install ipa-server
Если мы хотим использовать наш сервер еще и как DNS, то устанавливаем:
yum install ipa-server-dns
После выполняем конфигурирование сервиса:
ipa-server-install
* если система ругнется на IPv6, .
Отвечааем на первый вопрос, хотим ли мы использовать и сконфигурировать DNS-сервер BIND:
Do you want to configure integrated DNS (BIND)? : yes
* в случае, если мы не хотим, чтобы сервер DNS был установлен вместе с сервером IPA, просто нажимаем Enter.
На остальные запросы можно ответить по умолчанию, нажав Enter и оставив подставленные значения. Если возникнут ошибки, решение посмотрите .
Когда система запросит пароль для Directory Manager, необходимо придумать и ввести его дважды:
Directory Manager password:
Password (confirm):
… будет создана учетная запись для подключения к LDAP.
Затем также нужно придумать и задать пароль для IPA admin:
IPA admin password:
Password (confirm):
… будет создана учетная запись IPA Administrator для первого пользователя FreeIPA с правами администратора.
Для настройки DNS на первый запрос, хотим ли мы настроить перенаправления, отвечаем да:
Do you want to configure DNS forwarders? :
Система предложит сначала использовать DNS-серверы из настроек сети (если они прописаны) — если нас это устроит, оставляем значение по умолчанию:
Do you want to configure these servers as DNS forwarders? :
… также можно добавить дополнительные серверы:
Enter an IP address for a DNS forwarder, or press Enter to skip: 8.8.8.8
Также оставляем значение по умолчанию для попытки найти обратные зоны:
Do you want to search for missing reverse zones?
После система выведет информацию о конфигурации и попросит ее подтвердить — вводим yes:
Continue to configure the system with these values? : yes
Начнется процесс конфигурации. После его завершения мы увидим подсказку со следующими шагами:
Next steps:
1. You must make sure these network ports are open:
TCP Ports:
* 80, 443: HTTP/HTTPS
* 389, 636: LDAP/LDAPS
* 88, 464: kerberos
* 53: bind
UDP Ports:
* 88, 464: kerberos
* 53: bind
* 123: ntp
2. You can now obtain a kerberos ticket using the command: ‘kinit admin’
This ticket will allow you to use the IPA tools (e.g., ipa user-add)
and the web user interface.
… и так как порты мы уже настраивали, переходим ко второму шагу — проверим, что система может выдать билет:
kinit admin
… после вводим пароль администратора, который указывали при конфигурировании FreeIPA.
Проверяем, что билет получен:
klist
Ответ должен быть, примерно, следующим:
Ticket cache: KEYRING:persistent:0:0
Default principal: admin@DMOSK.LOCAL
Valid starting Expires Service principal
23.07.2019 08:53:02 24.07.2019 08:52:55 krbtgt/DMOSK.LOCAL@DMOSK.LOCAL
* где DMOSK.LOCAL — домен в моей системе. В данном примере мы получили билет для пользователя admin.
Изменения 8-й версии
Пройдемся по основным нововведениям CentOS 8, которые показались интересными лично мне. Функционально это полная копия RHEL 8, поэтому все его изменения на 100% актуальны для центос. Вот список наиболее интересных изменений:
- Разделение основного репозитория на 2 — BaseOS и AppStream. Первый будет работать как и раньше, а второй — appstream, сделали для того, чтобы была возможность устанавливать разные версии пакетов на сервер. Этот репозиторий поддерживает новый модульный формат rpm пакетов.
- Переход на пакетный менеджер DNF, который поддерживает модульный формат пакетов. Прощай YUM. Теперь это просто алиас для запуска dnf.
- Традиционно обновился весь софт и ядро (4.18) Linux. Теперь мы какое-то время будем иметь свежий софт. Прощай php5.4 из базового репозитория Я не буду по тебе скучать. Здравствуй php 7.2 и Python 3.6 из коробки.
- Замена iptables на nftables. Тут для меня самые серьезные изменения. Iptables я активно использую и настраиваю почти на всех серверах. С nftables не знаком вообще. Надо срочно переучиваться и осваивать новый функционал. Будут статьи на эту тему. Пожалуй этому нововведению я совсем не рад. Лично меня iptables устраивали целиком и полностью в первую очередь тем, что они используются почти везде. Можно брать готовый набор правил и спокойно переносить между серверами с разными ОС. Именно поэтому я всегда пользуюсь голыми iptables, а не надстройками над ними в виде firewalld или ufw. Мне достаточно знать только iptables, чтобы настроить firewall на любом linux сервере.
- Убрана поддержка Btrfs. Лично я ей никогда не пользовался, но я знаю, что это популярная штука и удаление ее поддержки значительное событие.
- До кучи обновился openssl и tls до последних версий 1.1.1 и 1.3. Некоторое время назад приходилось отдельно собирать пакеты для использования свежих версий. Теперь это на некоторое время ушло в прошлое, пока текущий релиз CentOS 8 не устареет. Года 2-3 будем жить спокойно.
- Network scripts для настройки сети объявлены устаревшими и по дефолту не поддерживаются. Можно поставить отдельно пакет для их работы. Для настройки сети надо использовать исключительно NetworkManager, который лично я предпочитаю отключать сразу после установки сервера. Не знаю, чем network-scripts не угодили. Простой и удобный инструмент.
Более подробно с изменениями 8-й версии можете познакомиться на opennet или почитать полный список в оригинале на сайте redhat. Я полистал последний. Там в overview есть ссылки на подробное описание по каждому компоненту системы.
Установка KDE на RedHat/CentOS/Fedora
KDE (K Desktop Environment) является альтернативой GUI для Gnome, некоторые люди предпочитают KDE чем Gnome они в основном похожи. Чтобы установить KDE на Centos, используйте эту команду в терминале:
# yum groupinstall "X Window System" "KDE desktop"
Для удаления, используйте:
# yum groupremove "X Window System" "KDE desktop"
Для Centos 7 нужно выполнить немного по другому:
# yum groupinstall -y ‘X Window System’ # yum groupinstall "kde" # ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target # reboot
Для удаления, используйте:
# yum groupremove 'X Window System' "kde"
Открытие портов
Теперь немного расширим нашу конфигурацию и откроем в iptables порты для некоторых сервисов. Допустим, у нас работает веб-сервер и необходимо открыть к нему доступ из интернета. Добавляем правила для веб-трафика:
Было добавлено разрешение на входящие соединения по 80-му и 443-му портам, которые использует web сервер в своей работе.
Если у вас установлен почтовый сервер, то нужно разрешить на него входящие соединения по всем используемым портам:
Для корректной работы DNS сервера, нужно открыть UDP порт 53
И так далее. По аналогии можете открыть доступ для всех необходимых сервисов.
System config network tui
Для управления сетевыми настройками в CentOS можно воспользоваться графической утилитой nmtui. Проверить ее наличие в системе очень просто. Достаточно запустить ее в консоли:
Если она у вас не установлена, то исправить это очень просто. Устанавливаем в CentOS system config network tui:
С помощью tui можно указать любые сетевые настройки, которые мы делали раньше через командную строку и редактирование конфигурационных файлов network-scripts. Давайте сделаем это. Вызываем программу:
Выбираем первый пункт Edit a connection, затем выбираем сетевой интерфейс и жмем «Edit»:
Здесь мы можем изменить имя сетевой карты, mac адрес, указать тип сетевых настроек — ручной или dhcp, указать вручную ip адрес, адрес шлюза, днс сервера, добавить маршруты и некоторые другие настройки:
После завершения редактирования сохраняем настройки, нажимая ОК.Если в первом экране утилиты выбрать пункт Set System Hostname, то можно быстро указать имя хоста. Результат будет такой же, как мы делали раньше в консоли.
Если вы будете готовиться к сдаче сертификации по RHEL, то везде будете видеть рекомендацию использовать nmtui для настройки сети. Суть в том, что на экзамене время ограничено, а с помощью network manager его можно и нужно экономить. Считается, что так настраивать сеть быстрее.
Проброс (forward) порта
Рассмотрим ситуацию, когда необходимо выполнить проброс портов с внешнего интерфейса на какой-то компьютер в локальной сети. Допустим, вам необходимо получить rdp доступ к компьютеру 10.1.3.50 из интернета. Делаем проброс TCP порта 3389:
Если вы не хотите светить снаружи известным портом, то можно сделать перенаправление с нестандартного порта на порт rdp конечного компьютера:
Если вы пробрасываете порт снаружи внутрь локальной сети, то обязательно закомментируйте правило, которое блокирует доступ из внешней сети во внутреннюю. В моем примере это правило:
Либо перед этим правилом создайте разрешающее правило для доступа снаружи к внутреннему сервису, например вот так:
Cистемные требования CentOS 8
Принципиальных отличий в системных требованиях CentOS 8 по сравнению с предыдущими редакциями нет. Я смог установить и запустить ее на виртуальной машине с 1CPU/512Mb. Однако появились нюансы. Для начала табличка системных требований.
CPU | Memory | Disk | |
Минимальные | 1 | 512 Mb | 10 G |
Рекомендуемые | 2 | 4 G | 20 G |
Я попробовал несколько раз установить Centos 8 на 1CPU/512Mb. При локальной установке все получилось, хотя графический интерфейс инсталлятора прилично тормозил. Установить на виртуальную машину с этими же характеристиками по сети у меня не получилось. Пробовал несколько раз и каждый раз установка зависала на 44% в момент загрузки пакетов из удаленного репозитория. Как только добавлял памяти установка проходила нормально. Так что можно сказать, что минимальные системные требования для установки CentOS 8 по сети — 1 CPU и 1024 Мб оперативной памяти. Для локальной установки хватит и 512.
Заметил еще один интересный момент, которого не было в прошлых версиях. Если вы устанавливаете систему на 512 Мб оперативной памяти и не выделяете раздел под swap при разметке диска, установщик говорит вам, что ему надо хотя бы 600 мб оперативной памяти, чтобы выполнить установку без swap.
Так что имейте ввиду, что если будете ставить CentOS 8 на минимальные системные требования, отказаться от отдельного раздела под swap не получится. Я обычно отказываюсь и подключаю swap в виде отдельного файла позже. Так просто удобнее. Теперь с 512 мб памяти это сделать не получится. Проще всего выделить во время установки побольше памяти, а потом уменьшить ее количество. Хотя надо будет еще понаблюдать, как система станет себя вести с таким количеством ресурсов. На 7-й версии центос тот же nginx в режиме proxy_pass отлично работает с минимальными системными требованиями.
Включить логи iptables
Iptables позволяет записывать информацию о проходящих ip пакетах в системный журнал. Реализуется это с помощью специфичного действия LOG над соединением, после которого, ip пакет продолжает движение по цепочке нетронутым. Для примера, создадим правило, которое будет записывать в системный журнал все события соединений на порт 445 (tcp):
здесь —log-prefix задает префикс для всех сообщений, логируемых нашим правилом. Это удобно, если у вас несколько разных правил логирования, или для дальнейшей программной обработки. Если теперь попробовать подключиться снаружи к нашему серверу на порт 445, например через telnet, в файле /var/log/messages появятся записи:
Разберем вывод:
- : префикс, который мы задали опцией —log-prefix
- интерфейс, на который принят ip пакет, для исходящих соединений содержит пустое значение
- интерфейс, с которого отправлен ip пакет, для входящих соединений, содержит пустое значение
- соединенные вместе в следующем порядке: MAC-адрес назначения, MAC-адрес источника, EtherType — 08:00 соответствует IPv4.
- ip адрес источника, от которого отправлен ip пакет
- ip адрес назначения, на который отправлен ip пакет
- размер ip пакета в байтах
- порт источника, от которого отправлен ip пакет
- порт назначения, на который отправлен ip пакет
Базовая настройка сети
Смотрим все установленные сетевые адаптеры в системе:
ip a
В результате получаем что-то подобное:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:81:28:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.156.22/22 brd 192.168.159.255 scope global ens32
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:81:3f:22 brd ff:ff:ff:ff:ff:ff
inet 10.243.254.68/26 brd 10.243.254.127 scope global ens34
valid_lft forever preferred_lft forever
* Из примера видно, что в моем CentOS есть 3 сетевых карты — lo (локальная петля), ens32 и ens34 — сетевые Ethernet адаптеры.
Если нужно настроить сеть для адаптера ens32, открываем на редактирование следующий конфигурационный файл:
vi /etc/sysconfig/network-scripts/ifcfg-ens32
И приводим его к следующему виду:
DEVICE=ens32
BOOTPROTO=static
IPADDR=192.168.0.155
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.54
DNS2=192.168.0.11
ONBOOT=yes
… а также для CentOS 8 добавим:
NM_CONTROLLED=yes
Основные опции
Опция | Описание | Возможные значения |
---|---|---|
DEVICE | Имя сетевого адаптера | Должно совпадать с именем в системе. В данном примере ens32 |
BOOTPROTO | способ назначения IP-адреса | static: ручное назначение IP, dhcp: автоматическое получение IP |
IPADDR | IP-адрес | адрес, соответствующий вашей сети |
NETMASK | Сетевая маска | должна соответствовать вашей сети |
GATEWAY | Шлюз по умолчанию | IP-адрес сетевого шлюза |
DNS1 | Основной DNS-сервер | IP-адрес сервера имен |
DNS2 | Альтернативный DNS-сервер | IP-адрес сервера имен |
ONBOOT | Способ запуска сетевого интерфейса | yes: автоматически при старте сервера, no: запускать вручную командой |
NM_CONTROLLED | Указываем, должен ли интерфейс управляться с помощью NetworkManager | yes: управляется NetworkManager, no: не может управляться NetworkManager |
Чтобы настройки применились, перезапускаем сетевую службу.
а) для CentOS 7:
systemctl restart network
б) для CentOS 8 вводим 2 команды:
systemctl restart NetworkManager
nmcli networking off; nmcli networking on
* в большей степени, это основное отличие версий 7 и 8. Чтобы команды смогли поменять настройки, для интерфейсов необходима настройка NM_CONTROLLED=yes.
Дополнительные опции (не обязательны для работы сети)
Опция | Описание | Возможные значения |
---|---|---|
DOMAIN | Указываем домен, который необходимо добавлять к имени хостов, если он не указан в запросе явно. | Строковое значение, соответствующее имени домена. |
IPV4_FAILURE_FATAL | Отключение сетевого интерфейса, если IP-адрес (v4) имеет неверную конфигурацию | yes: отключать, no: не отключать |
IPV6_FAILURE_FATAL | Отключение сетевого интерфейса, если IP-адрес (v6) имеет неверную конфигурацию | yes: отключать, no: не отключать |
IPV6_AUTOCONF | Разрешает или запрещает автоконфигурирование IPv6 с помощью протокола Neighbor Discovery | yes: разрешить автоконфигурирование, no: запретить |
IPV6INIT | Говорит о возможности использовать сетевой интерфейс для адресации IPv6 | yes: адресация может использоваться, no: не используется |
PEERROUTES | Задает приоритет настройки шлюза по умолчанию, полученного от DHCP | yes: маршрут от DHCP важнее, чем назначенный вручную, no: важнее маршрут, заданный вручную |
IPV6_PEERROUTES | Задает приоритет настройки шлюза по умолчанию, полученного от DHCP (для IPv6) | |
UUID | Уникальный идентификатор сетевого интерфейса. Его можно сгенерировать самостоятельно командой uuidgen | Строка из 32-х символов в формате 8-4-4-4-12. Например: fca8cc84-6f21-4bac-9ccb-36f281321ba4 |
Как отключить ipv6
В настоящее время активного использования протокола ipv6 в России нет и в обычной работе он чаще всего не нужен. Хотя нас уже много лет пугают, что свободных ip адресов уже практически не осталось, но на деле пока еще всем хватает. Так что с точки зрения практических соображений ipv6 в настоящее время на сервере не нужен и его можно отключить.
Перед отключением ipv6 в centos необходимо на всякий случай проверить, какие программы его используют в своей работе. Это нужно для того, чтобы избежать ошибок в их работе, предварительно отключив ipv6 в конфигурациях. Для того, чтобы увидеть, какие программы висят на ipv6 интерфейсе воспользуемся командой netstat:
Все строки с ::: это ipv6 протокол. В моем случае это sshd, postfix и chronyd. Отключим им ipv6 и оставим только ipv4.
Начнем с sshd. Открываем файл настроек /etc/ssh/sshd_config и находим строки:
Раскомментируем их и изменим. Должно получиться вот так:
Теперь открываем файл настроек постфикс /etc/postfix/main.cf. Ищем там строку:
Меняем на:
Отключаем ipv6 в chronyd. Для этого создаем файл /etc/sysconfig/chronyd и добавляем строку:
Теперь отключаем ipv6 в CentOS. Открываем файл /etc/sysctl.conf и добавляем туда строки:
Редактируем файл /etc/sysconfig/network, добавляя туда:
Добавляем запрет на работу ipv6 в конфигурацию grub. Открываем конфиг /etc/default/grub и добавляем к параметру GRUB_CMDLINE_LINUX еще одно значение ipv6.disable=1. Должно получиться примерно так:
После этого обновляем конфиг загрузчика.
Перезагружаемся и проверяем результат:
Нигде нет упоминания про inet6 и адреса формата ipv6. Значит все в порядке, мы отключили ipv6 в CentOS. Теперь проверим список открытых портов:
Все порты ipv4. Все в порядке, наша задача выполнена.
Предварительная настройка сервера
Любую настройку сервера я рекомендую начинать с обновления:
После этого я устанавливаю mc, так как привык к нему и постоянно пользуюсь:
Дальше отключаем selinux. Находим файл /etc/sysconfig/selinux и редактируем его:
Приводим строку с соответствующим параметром к следующему виду:
Чтобы применить изменения, перезагружаем сервер:
Более подробно о базовой настройке сервера CentOS 7 читайте отдельно. Мы же двигаемся дальше.
Теперь настроим сеть.
Сначала удаляем NetworkManager. Он нам не понадобится, выполним все настройки вручную. Иногда он может вызывать непонятные ошибки, я предпочитаю им не пользоваться:
Теперь включаем классическую службу сети в CentOS 7:
Настраиваем сетевые интерфейсы:
Перезапускаем службу сети:
Смотрим, что получилось:
Вы настраивайте сеть в зависимости от своих условий. Если внешний адаптер получает настройки не по dhcp, как у меня, а в статике, то не забудьте настроить шлюз по-умолчанию и dns сервер. Как это сделать написано в моей статье о сетевых параметрах, ссылку на которую я приводил выше.Прежде чем двигаться дальше, убедитесь, что вы все верно настроили — на сервере работает интернет, компьютеры из локальной сети пингуют сервер по адресу на eth1.
Конфигурация IPTABLES для веб-сервера
Конфигурация Iptables по умолчанию на CentOS не разрешает доступ к HTTP (TCP порт 80) и HTTPS (TCP ПОРТ 443 )которые использует веб-сервер (например Apache).
Шаг 1: Flush или удалите все IPTABLES правила
# iptables -F # iptables -X # iptables -t nat -F # iptables -t nat -X # iptables -t mangle -F # iptables -t mangle -X
Шаг 2: Установите правила по дефолту
# iptables -P INPUT DROP # iptables -P FORWARD ACCEPT # iptables -P OUTPUT ACCEPT
Шаг 3: Разрешить доступ к SSH и HTTP для 80 порта и HTTPS для 443 порта
# iptables -A INPUT -i lo -j ACCEPT (Данная команда говорит добавить (-А) правило в фильтр входящих соединений (INPUT), разрешающее (-j ACCEPT) любой трафик, поступающий на локальный интерфейс (-i lo). Локальный хост часто используется для размещения базы данных, к которой подключаются веб-сайт и почтовый сервер. Таким образом, VPS имеет доступ к базе данных, но взломать ее через интернет нельзя.) # iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT (еще одно правило, которое позволит устанавливать исходящие соединения) # iptables -A INPUT -p icmp -j ACCEPT (разрешить пинговать этот сервер) # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
Что делать, если CentOS не видит сетевую карту?
Вы установили сервер, загрузились и обнаружили, что в системе нет ни одной сетевой карты. Что в таком случае делать? Первым делом посмотрите вывод команды dmesg и поищите там поминание о своей карте. Возможно, она в системе есть, просто не активирована. Активировать ее можно с помощью nmtui, а котором я рассказывал выше.
Там есть пункт меню Activate connection, нужно в него зайти и активировать вашу сетевую карту. После этого ее можно будет настраивать.
Если же вашей сетевой карты нет в системе, то нужно поискать в интернете по модели информацию об этой сетевой карте. Возможно в репозиториях будут драйвера для нее. Это достаточно распространенная ситуация. Чаще всего драйвера найдутся и их необходимо будет правильно установить.
Есть еще вероятность, что вы не увидите своей карточки при выводе команды ifconfig, если в эту карту не воткнут сетевой провод. Чтобы наверняка посмотреть все интерфейсы, необходимо использовать ключ -a:
Есть еще один способ поискать сетевую карту в системе. Установите пакет pciutils:
И посмотрите вывод команды:
Если сетевая карта видится системой, то должно быть что-то в этом роде:
Если в выводе пусто, значит сетевая карта не определена.
Заключение
С помощью бесплатного дистрибутива Linux мы смогли за считанные минуты настроить шлюз для организации доступа в интернет компьютеров из локальной сети. У меня ушло минут 10 на настройку шлюза по этой инструкции. Если вы делаете это первый раз, то конечно у вас уйдет гораздо больше времени. Нужно будет разобраться в нюансах, к тому же я дал много ссылок на дополнительный материал.
Давайте разберемся в том, что мы сделали:
- Выполнили предварительную настройку сервера, подготовили его к работе.
- Включили маршрутизацию.
- Настроили firewall.
- Включили NAT.
- Установили и настроили dnsmasq для организации служб dns и dhcp.
- Проанализировали сетевую активность шлюза, узнали кто загружает канал интернета.
Это минимально необходимый функционал для организации работы шлюза на CentOS 7. Следующим этапом может быть настройка прокси сервера, шейпера траффика, настройка 2-х и более провайдеров и много другое. Что-то из этого я рассмотрю в своих будущих статьях.