Centos 7, в отличие от CentOS 6, в базе идет с новым брандмауэром - firewalld. Его можно отключить и заменить на старый добрый iptables, но если к этому нет прямых предпосылок, то лучше привыкать к чему-то новому, а не упираться в старое. Это не значит, что Windows 10 лучше Windows 7, а Windows XP лучше Windows 7 ;) Хороший пример на эту тему - selinux. Если вначале почти все (и я тоже) его отключали и даже немного ругали, то теперь почти никто это не советует, только если есть уверенность, что так надо. Напротив, многие уже привыкли (или привыкают) пользоваться semanage. Не будем и мы сразу отключать firewalld, а попробуем, как он на вкус.
Firewalld - это не принципиально иной брандмауэр. Это другая надстройка над netfilter, поэтому если вы обладаете опытом работы с iptables, то помучившись немного вы спокойно начнете пользоваться новым инструментом.
Запуск и остановка firewalld
Проверим, запущен ли firewalld:
# systemctl status firewalld
Тут будет расширенная информация. Чтобы коротко, да (работает) или нет можно так:
# firewall-cmd --state
running
Ок, работает.
Остановка firewalld:
# systemctl stop firewalld
Запрет автостарта:
# systemctl disable firewalld
Запуск firewalld:
# systemctl start firewalld
Включение автостарта:
# systemctl enable firewalld
Зоны firewalld
В firewalld широко используется понятие зоны. Список всех допустимых зон по-умолчанию:
# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
Назначение зон (условно, конечно):
- drop - все входящие пакеты отбрасываются (drop) без ответа. Разрешены только исходящие соединения.
- block - входящие соединения отклоняются (rejected) с ответом icmp-host-prohibited (или icmp6-adm-prohibited). Разрешены только инициированные системой соединения.
- public - зона по-умолчанию . Из названия ясно, что эта зона нацелена на работу в общественных сетях. Мы не доверяем этой сети и разрешаем только определенные входящие соединения.
- external - зона для внешнего интерфейса роутера (т.н. маскарадинг). Разрешены только определенные нами входящие соединения.
- dmz - зона DMZ, разрешены только определенные входящие соединения.
- work - зона рабочей сети. Мы все еще не доверяем никому, но уже не так сильно, как раньше:) Разрешены только определенные входящие соединения.
- home - домашняя зона. Мы доверяем окружению, но разрешены только определенные входящие соединения
- internal - внутренняя зона. Мы доверяем окружению, но разрешены только определенные входящие соединения
- trusted - разрешено все.
Список всех активных зон:
# firewall-cmd --get-active-zones
public
interfaces: enp1s0
Ага, зона public, к которой присоединен сетевой интерфейс enp1so. Дальше в зону public добавим новый порт, на котором будет висеть sshd.
Зная имя сетевого интерфейса (например, enp1s0), можно узнать, к какой зоне он принадлежит:
# firewall-cmd --get-zone-of-interface=enp1s0
public
А можно узнать, какие интерфейсы принадлежат конкретной зоне:
# firewall-cmd --zone=public --list-interfaces
enp1s0
Пример: разрешаем ssh на нестандартном порте
Давайте разрешим доступ к серверу по ssh на порте 2234/tcp, а не на 22/tcp, как по-умолчанию. Попутно чуть-чуть коснемся selinux.
Сначала посмотрим, что вообще разрешено постоянно на нашем сервере:
# firewall-cmd --permanent --list-all
public (default)
interfaces:
sources:
services: ssh dhcpv6-client
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
Я не использую пока ipv6, поэтому сразу уберу соотв. правило из firewalld:
# firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
Разрешим на постоянной основе (чтобы после перезагрузки не потерлось) соединение на порт 2234/tcp (на него повесим sshd):
# firewall-cmd --permanent --zone=public --add-port=2234/tcp
Перезагрузим правила:
# firewall-cmd --reload
Проверим:
# firewall-cmd --zone=public --list-ports
2234/tcp
Ок, порт открыт. Редактируем конфиг sshd:
# nano /etc/ssh/sshd_config
...
port 2234
...
# systemctl restart sshd.service
Но SELinux, которую вы, надеюсь, не отключали, не даст подключиться к ssh на нестандартном порте (порт 2234/tcp для sshd - нестандартный). Вы можете этот шаг пропустить и проверить, как сработатет защита SELinux, а можете сразу все настроить:
# yum provides semanage
# yum install policycoreutils-python
# semanage port -a -t ssh_port_t -p tcp 2234
Вот теперь все ок. Проверяем подключение по ssh на новом порте. Если все ок, закрываем доступ к порту 22:
# firewall-cmd --permanent --zone=public --remove-service=ssh
# firewall-cmd --reload
Смотрим, что получилось:
# firewall-cmd --list-all
public (default, active)
interfaces:
sources:
services:
ports: 2234/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
Вот и все.
Разные полезные команды:
Включить режим блокировки всех исходящих и входящих пакетов:
# firewall-cmd --panic-on
Выключить режим блокировки всех исходящих и входящих пакетов:
# firewall-cmd --panic-off
Узнать, включен ли режим блокировки всех исходящих и входящих пакетов:
# firewall-cmd --query-panic
Перезагрузить правила firewalld без потери текущих соединений:
# firewall-cmd --reload
Перезагрузить правила firewalld и сбросить текущие соединения (рекомендуется только в случае проблем):
# firewall-cmd --complete-reload
Добавить к зоне сетевой интерфейс:
# firewall-cmd --zone=public --add-interface=em1
Добавить к зоне сетевой интерфейс (сохранится после перезагрузки firewall):
# firewall-cmd --zone=public --permanent --add-interface=em1
Можно в конфиге ifcfg-enp1s0 указать, какой зоне принадлежит этот интерфейс. Для этого добавим ZONE=work в файл /etc/sysconfig/network-scripts/ifcfg-enp1s0. Если параметр ZONE не указан, будет назначена зона по-умолчанию (параметр DefaultZone в файле /etc/firewalld/firewalld.conf.
Разрешить диапазон портов:
# firewall-cmd --zone=public --add-port=5059-5061/udp
Маскарад (masquerade, он же nat, он же...):
Проверить статус:
# firewall-cmd --zone=external --query-masquerade
Включить:
# firewall-cmd --zone=external --add-masquerade
Здесь надо отметить, что вы можете включить masquerade и для зоны public, например.
Перенаправить входящие на 22 порт на другой хост:
# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.23
Перенаправить входящие на 22 порт на другой хост с изменением порта назначения (с 22 на 192.168.1.23:2055):
# firewall-cmd --zone=external /
--add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.23
На этом закончу, т.к. примеров может быть бесконечно много. Добавлю только, что лично я не составил окончательно свое мнение по поводу нововведения firewalld, т.к. к синтаксису привыкаешь долго и если в вашем зоопарке встречаются разные OS Linux, то по первости могут быть проблемы именно с привычкой. Но освоив firewalld, вы расширите кругозор - чаще всего, это стоит затраченных усилий.
Не хочу firewalld! Верните мне старый iptables!
Если все же вы хотите вернуть прошлое и заменить firewalld на iptables, то сделать это совсем не трудно:
Новичкам тут не место:
# systemctl disable firewalld
# systemctl stop firewalld
Ставим старый добрый iptables:
# yum install iptables-services
Запускаем брандмауэр:
# systemctl start iptables
# systemctl start ip6tables
Автозапуск при включении:
# systemctl enable iptables
# systemctl enable ip6tables
Для сохранения правил iptables после перезагрузки:
# /sbin/iptables-save > /etc/sysconfig/iptables
# /sbin/ip6tables-save > /etc/sysconfig/ip6tables
Или по-старинке:
# service iptables save
Текущие правила находятся в файлах:
/etc/sysconfig/iptables
/etc/sysconfig/ip6tables
Перезапуск iptables (например, после совершения каких-либо изменений):
# systemctl restart iptables.service
Мы покажем вам пошаговую настройку брандмауэра Firewalld в CentOS 7
Что же такое Firewalld? Это полноценный брандмауэр, который по умолчанию доступен в CentOS 7. Мы покажем вам, как настроить его на сервере, а также расскажем об инструменте firewall-cmd.
1. Какие же базовые понятия у брандмауэра?
Зоны
Firewalld способен управлять группами правил посредством зон. Это набор инструкций для управления трафиком на основе доверия к сетям. Зону можно присвоить сетевому интерфейсу для управления поведения брандмауэра. Это бывает необходимо, ведь ноутбуки могут часто подключаться к различным сетям. Компьютеры могут применять зоны для смены набора правил в зависимости от окружения. Например, если подключаться к Wi-Fi в кафе, можно применять более строгие инструкции. А дома правила могут быть лояльнее.
В Firewalld выделяют такие зоны:
Drop имеет самую низкую степень доверия сети. В таком случае поддерживаются исключительно исходящие соединения, а входящий трафик сбрасывается без ответа;
Block отличается от drop тем, что при сбросе входящего запроса выдается сообщение icmp-host-prohibited либо icmp6-adm-prohibited;
Зона public является публичной сетью, поддерживающей в индивидуальном порядке входящие запросы. Однако доверять ей нельзя;
External - это зона внешних сетей, поддерживающая маскировку NAT для закрытости внутренней сети. Однако к ней можно получить доступ;
Обратной стороной external является internal. Компьютерам в данной зоне можно доверять, поэтому доступными будут дополнительные сервисы;
Зона dmz востребована для изолированных компьютеров, не имеющих доступа к остальной части сети. В таком случае получится настроить избранные входящие соединения;
Зона рабочей сети - это work. В ней можно доверять окружению, но входящие соединения поддерживаются не все, а только определенных пользователем;
В зоне trusted доверять можно всем компьютерам сети.
Сохранения правил
В Firewalld они бывают временными и постоянными. Бывает так, что в наборе меняется либо появляется правило влияющее на поведение брандмауэра. Изменения будут потеряны после перезагрузки, поэтому их нужно сохранять. Команды firewall-cmd применяют флаг -permanent для сохранения правил. После этого ими получится пользоваться на постоянной основе.
2. Как включить брандмауэр Firewalld?
Начать стоит с запуска в фоновом режиме программы-демона. Unit-файл systemd носит название firewalld.service. для включения программы-демона нужно в командной строке набрать:
Sudo systemctl start firewalld.service
Нам нужно убедиться, что сервис запустился. Для этого понадобится:
Firewall-cmd --state running
Брандмауэр запустился и функционирует инструкции, заданной по умолчанию. Имейте ввиду, что сервис включен, но автоматически запускаться вместе с сервером не будет. Для этого потребуется настроить автозапуск. Кроме того, сделайте набор правил, чтобы не получилось заблокировать себя на своем же сервере.
3. Брандмауэрные правила по умолчанию
Как их просмотреть?
Для просмотра зоны, использующейся по умолчанию, нужно набрать:
Firewall-cmd --get-default-zone public
Мы видим, что Firewalld инструкций в отношении других зон не получал. Public используется по умолчанию и является единственной активной зоной, т.к. ни один интерфейс не привязывался к другим. Если хотите увидеть список всех доступных доменных зон, то укажите в консоли:
Firewall-cmd --get-active-zones public interfaces: eth0 eth1
Мы видим два привязанных сетевых интерфейса к зоне public. Они работают по правилам, указанным для этой зоны. Увидеть правила по умолчанию получится путем:
Firewall-cmd --list-all public (default, active) interfaces: eth0 eth1 sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
Подытожим:
Зоной по умолчанию и единственной активной является public;
К данной зоне привязываются два интерфейса: eth0 и eth1;
Public поддерживает удаленное администрирование SSH, а также присваивание IP-адресов DHSP.
Иные зоны брандмауэра
Посмотрим, какие же есть другие зоны у брандмауэра. Чтобы увидеть список всех доступных, наберите в консоли:
Можно также получить параметры для каждой конкретной зоны посредством добавления флага -zone=:
Firewall-cmd --zone=home --list-all home interfaces: sources: services: dhcpv6-client ipp-client mdns samba-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
Если потребуется вывести определения всех доступных зон, воспользуйтесь опцией —list-all-zones. Передадим вывод в пейджер, чтобы вывод было удобнее просматривать:
Firewall-cmd --list-all-zones | less
4. Как настроить интерфейсные зоны?
К зоне по умолчанию изначально и привязываются все сетевые интерфейсы.
Смена зоны интерфейса лишь на одну сессию
Для этой цели нам пригодятся две опции: —change-interface= и —zone=. Для перевода в зону home eth0 наберите:
Sudo firewall-cmd --zone=home --change-interface=eth0 success
Имейте ввиду, что это может повлиять на функционирование определенных сервисов. Например, SSH поддерживается в зоне home, т.е. соединения сбрасываться не будут. Однако это может произойти в других зонах, что приведет к блокировке доступа к своему же серверу. Нам нужно убедиться, что интерфейс привязался к новой зоне. Наберите в командной строке:
Когда брандмауэр будет перезагружен, интерфейс снова привяжется к зоне по умолчанию.
Sudo systemctl restart firewalld.service firewall-cmd --get-active-zones public interfaces: eth0 eth1
Смена зоны интерфейса на постоянной основе
После перезапуска брандмауэра интерфейс по новой привяжется к зоне по умолчанию, если никакая другая зона не задана в интерфейсных настройках. Конфигурации в CentOS находятся в файлах формата ifcfg-interface директории /etc/sysconfig/network-scripts. Для определения зоны интерфейса нужно открыть его файл конфигурации:
Sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
Добавим переменную ZONE= в конец файла. Зададим другую зону в качестве значения:
DNS1=2001:4860:4860::8844 DNS2=2001:4860:4860::8888 DNS3=8.8.8.8 ZONE=home
Теперь сохраним изменения, после чего файл можно будет закрыть. Для обновления настроек потребуется перезапуск сетевого сервиса, а также брандмауэра:
Sudo systemctl restart network.service sudo systemctl restart firewalld.service
После этого к зоне home будет привязан интерфейс eth0.
Firewall-cmd --get-active-zones home interfaces: eth0 public interfaces: eth1
Настройка зон по умолчанию
Другую зону по умолчанию также можно задать. В этом нам поможет опция —set-default-zone=, привязывающая к другой зоне все сетевые интерфейсы.
Sudo firewall-cmd --set-default-zone=home home interfaces: eth0 eth1
5. Как сделать правила для приложений?
Добавление в зону сервиса
Это проще всего сделать в порт, использующийся брандмауэром. Чтобы увидеть все доступные сервисы, наберите в командной строке:
Firewall-cmd --get-services RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https
Помните, что в файлах.xml директории /usr/lib/firewalld/services хранится вся информация о каждом сервисе. Сведения об SSHможно найти в /usr/lib/firewalld/services/ssh.xml. Выглядят они так:
Для включения поддержки сервисов в зонах нужен флаг -add-service=, а вот опция -zone пригодится для задания целевой зоны. Помните, что такие изменения будут действительны только одну сессию. Если же нужно сохранить изменения для дальнейшего использования, воспользуйтесь флагом -permanent. Посмотрим, как это работает. Запустим веб-сервер, чтобы он мог обслуживать HTTP-трафик. Включим поддержку на одну сессию в зоне public. Наберите в консоли:
Sudo firewall-cmd --zone=public --add-service=http
Не используйте опцию -zone=, если сервис добавляете в зону по умолчанию. Проверим, все ли получилось:
Firewall-cmd --zone=public --list-services dhcpv6-client http ssh
Теперь нужно провести тестирование работы брандмауэра и самого сервиса. Если увидите, что все в порядке, можете смело менять постоянный набор правил. Чтобы добавить правило поддержки нового сервиса, нужно в консоли указать:
Sudo firewall-cmd --zone=public --permanent --add-service=http
Если нужно увидеть весь список правил, действующих на постоянной основе, то:
Sudo firewall-cmd --zone=public --permanent --list-services dhcpv6-client http ssh
В результате у зоны public появится поддержка порта 80 и HTTP. В случае, когда ваш сервер способен обслуживать SSL/TLS-трафик, получится добавить сервис HTTPS:
Sudo firewall-cmd --zone=public --add-service=https sudo firewall-cmd --zone=public --permanent --add-service=https
6. А если сервис недоступен?
По умолчанию брандмауэр Firewalld включает в себя много популярных сервисов. Но бывает так, что программам нужны другие сервисы, которых нет в брандмауэре. Данную проблему можно решить парой способов.
Способ №1: Определение сервиса
Добавить порт в зону достаточно легко. Однако, если приложений довольно много, будет сложно понять какой порт что использует. В такой ситуации хорошим выходом будет определение сервисов вместо портов. По сути сервис - это группа портов, которым дали название и описание. С их помощью получится проще управлять настройками. Но сервис несколько сложнее чем порт.
Начнем с копирования уже имеющегося сценария из папки /usr/lib/firewalld/services, из которой брандмаузер берет нестандартные настройки в /etc/firewalld/services. Скопируем сервисное определение SSH для применения его в качестве определения условного сервиса example. Не забудьте, что имя сценария должно совпадать с названием сервиса, а также иметь расширение файла.xml. Наберите в консоли:
Sudo cp /usr/lib/firewalld/services/service.xml /etc/firewalld/services/example.xml
Теперь нужно внести правки в скомпилированный файл:
Sudo nano /etc/firewalld/services/example.xml
Внутри располагается определение SSH:
SSH Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.
Теперь сохраним изменения и закроем файл. После этого потребуется перезапуск брандмауэра с помощью:
Sudo firewall-cmd --reload
В списке доступных сервисов появится наш:
Firewall-cmd --get-services RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns example ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https
Способ №2: Создание порта
Откроем порт приложения в нужной брандмауэрной зоне, и укажем его, а также протокол. Представим себе ситуацию, что нужно добавить в зону public программу, использующую протокол ТСР и порт 5000. Для активации на одну сессию поддержки приложения потребуется опция -add-port=. Кроме того, необходимо указать протокол tcp либо udp:
Sudo firewall-cmd --zone=public --add-port=5000/tcp
Убедимся, что все получилось:
Firewall-cmd --list-ports 5000/tcp
Кроме того, есть возможность указать диапазон портов посредством тире. К примеру, если программа пользуется портами 4990-4999, то добавить их в public-зону получится за счет:
Sudo firewall-cmd --zone=public --add-port=4990-4999/udp
Если все работает нормально, добавляйте инструкции в настройки брандмауэра:
Sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp sudo firewall-cmd --zone=public --permanent --list-ports success success 4990-4999/udp 5000/tcp
7. Как создать зону?
Брандмауэр способен предоставить разные предопределенные зоны, которых обычно для работы хватает, однако иногда нужно сделать свою пользовательскую зону. К примеру, серверу DNS нужна зона privateDNS, а для веб-сервера - publicweb. После создания зон ее нужно добавить в настройки брандмауэра. Создадим зоны publicweb и privateDNS набрав в консоли:
Sudo firewall-cmd --permanent --new-zone=publicweb sudo firewall-cmd --permanent --new-zone=privateDNS
Проверим, все ли получилось:
Sudo firewall-cmd --permanent --get-zones block dmz drop external home internal privateDNS public publicweb trusted work
Firewall-cmd --get-zones block dmz drop external home internal public trusted work
Однако новые зоны в текущей сессии будут недоступны:
Firewall-cmd --get-zones block dmz drop external home internal public trusted work
Перезапустим брандмауэр для получения доступа к новым зонам:
Sudo firewall-cmd --reload firewall-cmd --get-zones block dmz drop external home internal privateDNS public publicweb trusted work
Теперь получится новым зонам определить порты и сервисы. Допустим, есть необходимость добавить SSH, HTTP и HTTPS в зону publicweb:
Sudo firewall-cmd --zone=publicweb --add-service=ssh sudo firewall-cmd --zone=publicweb --add-service=http sudo firewall-cmd --zone=publicweb --add-service=https firewall-cmd --zone=publicweb --list-all publicweb interfaces: sources: services: http https ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
Кроме того, получится добавить DNS в зону privateDNS посредством:
Sudo firewall-cmd --zone=privateDNS --add-service=dns firewall-cmd --zone=privateDNS --list-all privateDNS interfaces: sources: services: dns ports: masquerade: no forward-ports: icmp-blocks: rich rules:
После этого можно смело привязывать к новым зонам сетевые интерфейсы:
Sudo firewall-cmd --zone=publicweb --change-interface=eth0 sudo firewall-cmd --zone=privateDNS --change-interface=eth1
Проверьте работу настроек. Если все в порядке, добавьте их в постоянные правила:
Sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh sudo firewall-cmd --zone=publicweb --permanent --add-service=http sudo firewall-cmd --zone=publicweb --permanent --add-service=https sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns
Теперь перейдем к настройке сетевых интерфейсов. Это необходимо для того, чтобы осуществлять автоматическое подключение к нужной зоне. Допустим, что нужно привязать к publicweb eth0, то:
Sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0 . . . IPV6_AUTOCONF=no DNS1=2001:4860:4860::8844 DNS2=2001:4860:4860::8888 DNS3=8.8.8.8 ZONE=publicweb
Привяжем также eht1 к privateDNS посредством:
Sudo nano /etc/sysconfig/network-scripts/ifcfg-eth1 . . . NETMASK=255.255.0.0 DEFROUTE="no" NM_CONTROLLED="yes" ZONE=privateDNS
Чтобы изменения применились, потребуется перезапуск брандмауэра и сетевых сервисов:
Sudo systemctl restart network sudo systemctl restart firewalld
Нужно проверить зоны, чтобы убедиться, что сервисы прописались:
Firewall-cmd --get-active-zones privateDNS interfaces: eth1 publicweb interfaces: eth0
Теперь нужно проверить, работают ли они:
Firewall-cmd --zone=publicweb --list-services http htpps ssh firewall-cmd --zone=privateDNS --list-services dns
Как мы можем увидеть, пользовательские зоны полностью готовы для работы. Любую из них можно назначить по умолчанию. Например:
Sudo firewall-cmd --set-default-zone=publicweb
8. Как сделать автоматический запуск брандмауэра?
После проверки работы правил и всех настроек, настроим автозапуск с помощью:
Sudo systemctl enable firewalld
Это даст возможность включать брандмауэр сразу после запуска сервера.
В качестве вывода стоит отметить, что брандмауэр Firewalld является достаточно гибким инструментом в плане настроек. А менять политику его работы можно с помощью зон.
В данной статье будет описано, как настроить свежую систему для безопасной работы. Особенно актуально для тех, кто собирается хостить что-то либо на своей машине, либо открывать доступ к компьютеру извне. Итак, начнем.
SELinux
SELinux - это реализация системы принудительного контроля доступа, которая может работать параллельно с классической избирательной системой контроля доступа. Весьма полезный инструмент для гибкой и точной настройки безопасности. Многие считают, что его нужно сразу отключать и не использовать вообще. В этой статье мы не будем рассматривать его конфигурирование. Временно отключим SELinux, материала о его настройке достаточно для отдельной статьи.
Файл конфигурации находится в /etc/sysconfig/selinux. Открываем его текстовым редактором и правим строчку:
#nano /etc/sysconfig/selinux SELINUX = Enforcing Disabled
Тем самым вы переведете режим работы SELinux в «отключить». Для применения настройки необходимо перезагрузиться командой:
#systemctl reboot
Firewalld
Firewalld предоставляет функциональность динамически управляемого брандмауэра с поддержкой сетевых зон, призванных определить уровень доверия для сетевого соединения или интерфейса. Он имеет поддержку настройки межсетевого экрана IPv4, IPv6 и сетевых мостов, а также разделяет среду выполнения и параметры конфигурации. Firewalld также имеет интерфейс для добавления правил брандмауэра непосредственно из служб и приложений.
По умолчанию Firewalld включен, а все порты считаются закрытыми. Если вам необходимо открыть какой-либо порт, воспользуйтесь командой:
#firewall-cmd --permanent --zone=public --add-port=80/tcp
В данном случае 80 - номер порта, который необходимо открыть (подставьте нужный). Порты будут открытыми до тех пор, пока вы их сами не закроете, или пока не отключите Firewalld. Firewalld отключается командами:
#systemctl stop firewalld #systemctl disable firewalld
#firewall-cmd --permanent --zone=public --add-port=12345/tcp
То же самое необходимо проделать для каждого порта, который вы планируете держать открытыми. Если какой-либо порт уже не будет использоваться вами в будущем, лучше всего его закрыть командой:
#firewall-cmd --permanent --zone=public --remove-port=12345/tcp
Fail2ban
Fail2ban — это система для защиты сервера от брутфорс-атак (атаки с перебором пароля). Принцип работы заключается в том, что если в течение определенного времени было n неудачных попыток авторизации, то ip-адрес, с которого были предприняты попытки авторизации заносится в бан-лист. Данная система просто необходима, т.к. без него к вашему серверу могут получить доступ. Fail2ban следит за указанными портами, например SSH — 22 (стандартный, желательно изменить на свой). Fail2ban настраивается через конфигурационный файл. Ниже инструкция о том, как установить и настроить Fail2ban.
Для начала необходимо подключить репозиторий EPEL, пакет Fail2ban находится там. Делаем это командой:
#rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
#yum install fail2ban
После установки производим настройку Fail2ban. Конфигурационный файл находится здесь — /etc/fail2ban/jail.conf , но, как сказано в комментариях в его начале, данный файл рекомендуется не изменять, вместо этого нужно создать локальную копию /etc/fail2ban/jail.local . И в дальнейшем править конфигурацию именно в нем.
#cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local #nano /etc/fail2ban/jail.local
Конфигурационный файл содержит множество секций, сначала обратим внимание на . В данной секции указаны настройки по умолчанию, если Fail2ban настроен для работы различных сервисов и там не прописаны правила для них, то параметры будут браться отсюда. Приведу пример настроек:
Ignoreip = 127.0.0.1/8 192.168.1.10/24 bantime = 900 findtime = 600 maxretry = 6
ignoreip - означает, какие ip-адреса будут игнорироваться при отслеживании. Указываем здесь localhost, а также, через пробелы вы можете указать дополнительные ip-адреса, например адрес другого вашего компьютера в локальной сети, за которым вы постоянно работаете. Можно также указывать внешние ip-адреса, но, в таком случае, безопасность снижается.
bantime - время, на которое указанный ip-адрес попадет в бан-лист. Время указывается в секундах. Для постоянного бана достаточно указать любое отрицательное число.
findtime - время, в течение которого после неверной попытки авторизации будет производится слежение за данным ip-адресом. Если за время findtime совершится maxretry попыток неудачной авторизации, то ip-адрес попадет в бан-лист.
maxretry - максимальное количество неверных попыток авторизации за время findtime. При достижении этого порогового значения ip-адрес будет занесен в бан-лист.
Далее спускаемся ниже и находим раздел JAILS , в нем описывается, какие сервисы и порты нужно мониторить, и что с ними делать в случае срабатывания защиты. Также в каждой секции можно определить свои параметры bantime, findtime, maxretry, а если они не указаны, то параметры берутся из секции . Ищем интересующие нас секции и редактируем их, мы настроим слежение за сервисом SSH. Для этого переходим к секции , дописываем в нее строчку «enabled = true» , и меняем порт на назначенный нами ранее:
Enabled = true port = 12345 action = iptables-multiport logpath = %(sshd_log)s
Запускаем сервис fail2ban и добавляем его в автозагрузку:
#systemctl start fail2ban #systemctl enable fail2ban
На этом базовая настройка безопасности заканчивается. Теперь можно спокойно открывать доступ к серверу по SSH. Если какой-либо злоумышленник попытается использовать брутфорс для получения доступа к вашему серверу по SSH, то у него ничего не выйдет — его ip-адрес будет блокироваться. Все остальные порты защищены с помощью firewalld.
В данной статье предлагаю Вам познакомиться с брандмауэром . Возможно многие его давно используют. Я впервые столкнулся с новым брандмауэром во время первой установки CentOS 7. Конечно, его можно отключить и заменить на хорошо знакомый и понятный IPTables (как вернуть IPTables в CentOS 7 – рассмотрено ниже), но осваивать что-то новое и повышать уровень своих знаний – это всегда хорошо, если нет прямой необходимости в использовании IPTables. Проще говоря, Firewalld – это не Файрвол, разработанный с нуля – это другая надстройка над IPTables. Также, как и IPTables, новый Firewalld использует для работы IPTables tool и управляет сетевым фильтром ядра, если Вы обладаете опытом работы с IPTables, Вам не составит особого труда начать пользоваться Firewalld. С приходом Firewalld мы получили ряд новых возможностей, но, в тоже время, потеряли некоторые старые. Но, обо всем по порядку, как всегда, для удобства восприятия материал разбит на смысловые блоки. В этой статье Вы найдете решения следующих задач:
- Установка Firewalld
- Список параметров и команд Firewalld
- Замена Firewalld на IPTables
Установка и настройка брандмауэра Firewalld будет происходить в ОС CentOS 7.
Все команды в этой статье выполняются от имени пользователя root!
Установка FirewalldВыполните для установки Firewalld:
Yum -y install firewalld
Запустите:
Systemctl start firewalld
Проверим:
Посмотрим, что разрешено по умолчанию:
Вывод команды:
Public target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules:
На постоянной основе разрешен ssh, а также клиент dhcp v6.
Выполните перезагрузку сервера после установки firewalld.
Обзор возможностей и новых функций FirewalldСписок всех допустимых зон firewalld можно вывести командой:
Firewall-cmd --get-zones
Вывод команды:
Work drop internal external trusted home dmz public block
Описание назначений зон firewalld :
- DROP
Входящие сетевые пакеты отбрасываются без ответа (drop). Разрешены только исходящие соединения.
- BLOCK
Входящие сетевые соединения отклоняются (rejected) с сообщением icmp-host-prohibited для Ipv4 и icmp6-adm-prohibited для IPv6. Разрешены только инициированные сетевые соединения внутри нашей системы.
- PUBLIC
Зона по умолчанию. Нацелена на работу в общественных сетях с не доверенными компьютерами, разрешается устанавливать только определенные входящие соединения.
- EXTERNAL
Зона для внешнего интерфейса, особенно подходит для использования во внешних сетях с разрешенным маскарадингом, для роутеров. Разрешены только конкретные входящие соединения.
Зона DMZ, для сетей с собственной демилитаризованной зоной с ограниченным доступом к вашей внутренней сети. Разрешены только определенные входящие соединения.
- WORK
Зона рабочей сети. Доверия к окружению нет, разрешены только определенные входящие соединения.
- HOME
Домашняя зона. Доверяем окружению, разрешены только определенные входящие соединения.
- INTERNAL
Внутренняя зона. Доверяем окружению, разрешены только определенные входящие соединения.
- TRUSTED
Все сетевые соединения разрешены.
Добавив сетевое соединение к определенной зоне мы получаем некий предустановленный набор правил.
Вывести список всех активных зон firewalld можно командой:
Вывод команды:
Public interfaces: enp0s3
Для управления firewalld существует два основных инструмента:
1. firewall-config с графическим интерфейсом.
2. firewall-cmd утилита командной строки, именно с ней мы и будем работать в данной статье.
Что именилось с приходом firewalld? Нам теперь недоступно:
1. Нет /etc/sysconfig/iptables. Настроек iptables в обычном ранее для них месте нет, firewalld хранит свои настройки в XML файлах раскидав их по /usr/lib/firewalld/ и /etc/firewalld/
2. Добавлять правила привычными командами вроде iptables -A INPUT -p ICMP -j ACCEPT уже не получится, и вообще на попытку обратиться к iptables, мы получим отказ. Собственно, просто придется настраивать его другими командами.
В то-же время му получили ряд полезных функций:
1. Возможность изменения правил без перезагрузки службы: Firewalld запускается как служба и при конфигурации учитывает и применяет только различия в правилах. Другими словами нам предоставили возможность изменять правила, не разрывая существующие соединения (на лету).
2. Концепция зон: Firewalld оперирует понятиями сетевой зоны. Сетевая зона определяет уровень доверия сетевому подключению. Другими словами это можно понять, как предустановленный набор правил, который можно назначить сетевому подключению. Во избежание конфликтов правил, одно подключение может находиться только в одной из зон, а вот в зону можно добавлять сколько угодно подключений.
Настройка и примеры использования FirewalldЗапуск firewalld:
Systemctl start firewalld
Остановка:
Systemctl stop firewalld
Включите службу в автозагрузку:
Systemctl enable firewalld
Отключение автостарта службы:
Systemctl disable firewalld
Проверить статус (Вам будет предоставлена расширенная информация о работе службы):
Systemctl status firewalld
Проверить статус (кратко):
Firewall-cmd --state
Вывести список всех допустимых зон:
Firewall-cmd --get-zones
Вывести список всех активных зон:
Firewall-cmd --get-active-zones
Пример вывода команды:
Public interfaces: enp0s3
Где enp0s3 сетевой интерфейс сервера и сопоставлен он с зоной public
Узнать к какой зоне принадлежит конкретный (в нашем случае enp0s3) сетевой интерфейс:
Firewall-cmd --get-zone-of-interface=enp0s3
Список активных сетевых интерфейсов можно получить с помощью команды:
Вывести список сетевых интерфейсов принадлежащих конкретной зоне:
Firewall-cmd --zone=public --list-interfaces
Проверим, что разрешено по умолчанию:
Firewall-cmd --permanent --list-all
Вывод команды:
Public (default) interfaces: sources: services: ssh dhcpv6-client masquerade: no forward-ports: icmp-blocks: rich rules:
На постоянной основе разрешен ssh, а также клиент dhcp v6. Я не использую на сервере ip v6, поэтому уберу соответствующее правило:
Firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
Разрешить доступ по протоколу ssh вручную:
Firewall-cmd --permanent --zone=public --add-service=ssh
Для работы веб сервера необходимо разрешить сервис http (80 порт):
Firewall-cmd --permanent --zone=public --add-service=http
Если Вы планируете использовать https на Вашем сайте, необходимо разрешить https сервис (443 порт):
Firewall-cmd --permanent --zone=public --add-service=https
Для работы FTP сервера необходимо открыть 21 порт, а также порты 30000-35000 для использования пассивного режима в FTP клиентах:
Firewall-cmd --permanent --zone=public --add-port=21/tcp firewall-cmd --permanent --zone=public --add-port=30000-35000/tcp
Для применения изменений перезагрузите правила:
Firewall-cmd --reload
Мне хочется предложить Вам выполнить еще несколько шагов по повышению уровня безопасности Вашего сервера. Есть довольно подробно написанный . Одним из этапов настройки является изменение стандартного порта, рассмотрим более подробно настройки Firewalld при смене порта ssh.
Разрешим входящие соединения на порт 2220/tcp (на него повесим sshd):
Firewall-cmd --permanent --zone=public --add-port=2220/tcp
Перезагрузим правила:
Firewall-cmd --reload
Проверим:
Firewall-cmd --zone=public --list-ports
Вывод команды:
2220/tcp
Порт открыт. Редактируем конфиг sshd:
Nano /etc/ssh/sshd_config
Вносим изменения:
*** # If you want to change the port on a SELinux system, you have to tell # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # В файле необходимо только указать порт Port 2220 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress:: ***
Перезапустим ssh:
Systemctl restart sshd.service
Также в случае использования SELinux (надеюсь, Вы его не отключили) необходимо выполнить дополнительные настройки. Это связано с тем, что SELinux не даст подключиться к ssh на нестандартном порте (2220):
Semanage port -a -t ssh_port_t -p tcp 2220
После проверки подключения к ssh на новом порту, закройте доступ к порту 22:
Firewall-cmd --permanent --zone=public --remove-service=ssh
Перезагрузите правила:
Firewall-cmd --reload
Замена Firewalld на IPTablesДля использования IPTables на Вашем сервере с CentOS 7, выполните следующие шаги.
Выключим Firewalld службу:
Systemctl mask firewalld
Остановим Firewalld Service:
Systemctl stop firewalld
Установим iptables.
Yum -y install iptables-services
Включим запуск IPtables при загрузке системы, а также разрешим доступ к серверу по протоколам ssh и http:
Systemctl enable iptables iptables -P INPUT ACCEPT && iptables -F && service iptables save && iptables -A INPUT -i lo -j ACCEPT && iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT && iptables -A INPUT -p tcp --dport 22 -j ACCEPT && iptables -A INPUT -p tcp --dport 80 -j ACCEPT && iptables -P INPUT DROP && iptables -P FORWARD DROP && iptables -P OUTPUT ACCEPT && service iptables save
Проверим:
Iptables -L
Вы должны получить следующий вывод:
Iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:http Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Я расскажу о начальных настройках системы CentOS, которые повышают безопасность и удобство работы с сервером. Отмечу, что в 7-й версии системы произошли некоторые изменения по сравнению с предыдущими версиями.
Еще раз обращаю внимание, что данные настройки я делаю на виртуальном сервере. Если у вас железный сервер, то рекомендуется выполнить еще некоторые настройки, о которых я здесь не упоминаю. К ним относится, к примеру, настройка и проверка отказоустойчивости при выходе одного из дисков. Отключение регулярной проверки массива mdadm и др.
Начальная настройка CentOS 7
Итак, у нас имеется: # uname -a Linux zeroxzed.ru 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/LinuxПервым делом обновим базовую систему:
# yum update
Для удобства администрирования, я всегда устанавливаю Midnight Commander, или просто mc:
# yum install mc
И сразу же для него включаю подсветку синтаксиса всех файлов, которые не обозначены явно в файле /usr/share/mc/syntax/Syntax синтаксисом для sh и bash скриптов. Этот универсальный синтаксис нормально подходит для конфигурационных файлов, с которыми чаще всего приходится работать на сервере. Перезаписываем файл unknown.syntax . Именно этот шаблон будет применяться к.conf и.cf файлам, так как к ним явно не привязано никакого синтаксиса.
# cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax
# ifconfig
И увидите ответ:
Bash: ifconfig: command not found
По крайней мере я, когда впервые это увидел, прилично удивился. Подумал, что ошибся в написании команды, перепроверил все несколько раз, но без результата. Оказалось, что надо отдельно установить пакет для выполнения ifconfig и прочих сетевых утилит.
Вместо ifconfig в CentOS 7 теперь утилита ip . Я не понимаю, зачем пилить отдельные программы для управления сетевыми настройками, если ifconfig и так отлично справляется с задачей. К тому же мне всегда нравилось, что в различных дистрибутивах линукс все примерно одинаковое. С помощью ifconfig можно настроить сеть не только в linux, но и в freebsd. Это удобно. А когда в каждом дистрибутиве свой инструмент это неудобно. Так что предлагаю установить привычный ifconfig.
Сделаем это:
# yum install net-tools
Теперь, чтобы у нас работали команды nslookup или, к примеру, host необходимо установить пакет bind-utils. Если этого не сделать, то на команду:
# nslookup
Будет вывод:
Bash: nslookup: command not found
Так что устанавливаем bind-utils:
# yum install bind-utils
Отключаем SELinux. Его использование и настройка отдельный разговор. Сейчас я не буду этим заниматься. Так что отключаем:
# mcedit /etc/sysconfig/selinux
меняем значение
SELINUX=disabled
Чтобы изменения вступили в силу, перезагружаемся:
# reboot
Можно без перезагрузки применить отключение SElinux:
# setenforce 0Указываем сетевые параметры
Не используйте одновременно оба демона синхронизации времени — chrony и ntp. Выберите какой-нибудь один. Лично я не вижу в них разницы, сам чаще всего ставлю привычный ntp.
Добавление репозиториев
Для инсталляции различного софта необходимо . Наиболее популярные это EPEL и rpmforge, поэтому добавим их. Сначала ставим EPEL. С ним все просто, он добавляется из стандартного репозитория:
# yum install epel-release
Устанавливаем rpmforge:
# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt # yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
# yum install http://repository.it4i.cz/mirrors/repoforge/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
Настройка хранения истории в bash_history
Полезным будет внести некоторые изменения в стандартный механизм сохранения истории команд. Он часто выручает, когда надо вспомнить одну из ранее введенных команд. Стандартные настройки имеют некоторые ограничения, которые неудобны. Вот их список:
- По-умолчанию, сохраняются только последние 1000 команд. Если их будет больше, то более старые будут удаляться и заменяться новыми.
- Не указаны даты выполнения команд, только их список в порядке выполнения.
- Файл со списком команд обновляется после завершения сессии. При параллельных сессиях часть команд может быть утеряна.
- Сохраняются абсолютно все команды, хотя в хранении некоторых нет никакого смысла.
Список последних выполненных команд хранится в домашней директории пользователя в файле .bash_history (в начале точка). Его можно открыть любым редактором и посмотреть. Для более удобного вывода списка, можно в консоли ввести команду:
# history
и увидеть пронумерованный список. Быстро найти конкретную команду, можно с помощью фильтрации только нужных строк, например вот так:
# history | grep yum
Так мы увидим все варианты запуска команды yum, которые хранятся в истории. Исправим перечисленные недостатки стандартных настроек хранения истории команд в CentOS 7. Для этого нужно отредактировать файл .bashrc , который находится в том же каталоге, что и файл с историей. Добавляем в него следующие строки:
Export HISTSIZE=10000 export HISTTIMEFORMAT="%h %d %H:%M:%S " PROMPT_COMMAND="history -a" export HISTIGNORE="ls:ll:history:w:htop"
Первый параметр увеличивает размер файла до 10000 строк. Можно сделать и больше, хотя обычно хватает такого размера. Второй параметр указывает, что необходимо сохранять дату и время выполнения команды. Третья строка вынуждает сразу же после выполнения команды сохранять ее в историю. В последней строке мы создаем список исключений для тех команд, запись которых в историю не требуется. Я привел пример самого простого списка. Можете дополнить его на свое усмотрение.
Для применения изменений необходимо разлогиниться и подключиться заново или выполнить команду:
# source ~/.bashrc
Автоматическое обновление системы
Для поддержания безопасности сервера на должном уровне необходимо как минимум своевременно его обновлять — как само ядро с системными утилитами, так и остальные пакеты. Можно делать это вручную, но для более эффективной работы лучше автоматизировать рутинные действия. Не обязательно устанавливать обновления автоматически, но как минимум проверять их появление. Я обычно придерживаюсь такой стратегии.
Для автоматической проверки обновлений нам поможет утилита yum-cron . Ставится она традиционно через yum из стандартного репозитория.
# yum install yum-cron
После установки создается автоматическое задание на выполнение утилиты в /etc/cron.daily и /etc/cron.hourly . По-умолчанию, утилита скачивает найденные обновления, но не применяет их. Вместо этого, администратору на локальный почтовый ящик root отправляется уведомление об обновлениях. Дальше вы уже в ручном режиме заходите и решаете, устанавливать обновления или нет в удобное для вас время. Мне такой режим работы видится наиболее удобным, поэтому я не меняю эти настройки.
Конфигурационные файлы yum-cron находятся по адресу /etc/yum/yum-cron.conf и yum-cron-hourly.conf . Они неплохо прокомментированы, так что в подробных разъяснениях не нуждаются. Обращаю внимание на раздел , где можно указать параметры отправки сообщений. По-умолчанию стоит отправка почты через локальный хост. Можно тут изменить параметры и отправлять сообщения через сторонний почтовый сервер. Но вместо этого лично я предпочитаю глобально для всего сервера настроить пересылку локальной почты root на внешний почтовый ящик через авторизацию на другом smtp сервере.
Отключаем флуд сообщений в /var/log/messages
В дефолтной установке системы CentOS 7, весь ваш системный лог /var/log/messages через некоторое время работы сервера будет забит следующими записями.
Oct 16 14:01:01 xs-files systemd: Created slice user-0.slice. Oct 16 14:01:01 xs-files systemd: Starting user-0.slice. Oct 16 14:01:01 xs-files systemd: Started Session 14440 of user root. Oct 16 14:01:01 xs-files systemd: Starting Session 14440 of user root. Oct 16 14:01:01 xs-files systemd: Removed slice user-0.slice. Oct 16 14:01:01 xs-files systemd: Stopping user-0.slice. Oct 16 15:01:01 xs-files systemd: Created slice user-0.slice. Oct 16 15:01:01 xs-files systemd: Starting user-0.slice. Oct 16 15:01:01 xs-files systemd: Started Session 14441 of user root. Oct 16 15:01:01 xs-files systemd: Starting Session 14441 of user root. Oct 16 15:01:01 xs-files systemd: Started Session 14442 of user root. Oct 16 15:01:01 xs-files systemd: Starting Session 14442 of user root. Oct 16 15:01:01 xs-files systemd: Removed slice user-0.slice. Oct 16 15:01:01 xs-files systemd: Stopping user-0.slice. Oct 16 16:01:01 xs-files systemd: Created slice user-0.slice. Oct 16 16:01:01 xs-files systemd: Starting user-0.slice. Oct 16 16:01:01 xs-files systemd: Started Session 14443 of user root. Oct 16 16:01:01 xs-files systemd: Starting Session 14443 of user root. Oct 16 16:01:01 xs-files systemd: Removed slice user-0.slice.
Никакой практической пользы они не несут, поэтому отключим их. Для этого создадим отдельное правило для rsyslog, где перечислим все шаблоны сообщений, которые будем вырезать. Разместим это правило в отдельном файле /etc/rsyslog.d/ignore-systemd-session-slice.conf .
# cd /etc/rsyslog.d && mcedit ignore-systemd-session-slice.conf if $programname == "systemd" and ($msg contains "Starting Session" or $msg contains "Started Session" or $msg contains "Created slice" or $msg contains "Starting user-" or $msg contains "Starting User Slice of" or $msg contains "Removed session" or $msg contains "Removed slice User Slice of" or $msg contains "Stopping User Slice of") then stop
Сохраняем файл и перезапускаем rsyslog для применения настроек.
# systemctl restart rsyslog
Необходимо понимать, что в данном случае мы отключаем флуд в лог файл только на локальном сервере. Если вы храните логи на , то данное правило нужно будет настраивать именно на нем.
Установка iftop, atop, htop, lsof на CentOS 7
И напоследок добавим несколько полезных утилит, которые могут пригодиться в процессе эксплуатации сервера.
iftop показывает в режиме реального времени загрузку сетевого интерфейса, может запускаться с различными ключами, не буду останавливаться на этом подробно, в интернете есть информация на эту тему. Ставим:
# yum install iftop
И два интересных диспетчера задач, я чаще всего пользуюсь htop, но иногда пригодится и atop. Ставим оба, сами посмотрите, разберетесь, что вам больше нравится, подходит:
# yum -y install htop # yum -y install atop
Вот как выглядит htop:
Для вывода информации о том, какие файлы используются теми или иными процессами, советую поставить утилиту lsof . Она скорее всего рано или поздно пригодится, когда будете диагностировать работу сервера.
# yum install wget bzip2 traceroute gdisk
На этом у меня все. Базовая настройка CentOS 7 закончена, можно приступать к установке и настройке основного функционала.
Настройка системной почты
В завершение настройки сервера CentOS 7 сделаем так, что бы почта, адресованная локальному root, отправлялась через внешний почтовый сервер на выбранный почтовый ящик. Если этого не сделать, то она будет локально складываться в файл /var/spool/mail/root . А там может быть важная и полезная информация. Настроим ее отправку в ящик системного администратора.
Подробно об этом я рассказал в отдельной статье — . Здесь кратко только команды и быстрая настройка. Ставим необходимые пакеты:
# yum install mailx cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain
Рисуем примерно такой конфиг для postfix.
Cat /etc/postfix/main.cf ## DEFAULT CONFIG BEGIN ###################### queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix inet_interfaces = localhost inet_protocols = all unknown_local_recipient_reject_code = 550 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix setgid_group = postdrop html_directory = no manpage_directory = /usr/share/man sample_directory = /usr/share/doc/postfix-2.10.1/samples readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES ## DEFAULT CONFIG END ###################### # Имя сервера, которое выводит команда hostname myhostname = centos7-test.xs.local # Здесь по логике нужно оставлять только домен, но в данном случае лучше оставить полное имя сервера, чтобы в поле отправитель # фигурировало полное имя сервера, так удобнее разбирать служебные сообщения mydomain = centos7-test.xs.local mydestination = $myhostname myorigin = $mydomain # Адрес сервера, через который будем отправлять почту relayhost = mailsrv.mymail.ru:25 smtp_use_tls = yes smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_tls_security_level = may
Создаем файл с информацией об имени пользователя и пароле для авторизации.
# mcedit /etc/postfix/sasl_passwd mailsrv.mymail.ru:25 [email protected]:password
Создаем db файл.
# postmap /etc/postfix/sasl_passwd
Теперь можно перезапустить postfix и проверить работу.
# systemctl restart postfix
К стандартному алиасу для root в /etc/aliases , добавьте внешний адрес, куда будет дублироваться почта, адресованная root. Для этого редактируем указанный файл, изменяя последнюю строку.
#root: marc
Root: root,[email protected]
Обновляем базу сертификатов:
# newaliases
Отправим письмо через консоль локальному руту:
# df -h | mail -s "Disk usage" root
Письмо должно уйти на внешний ящик. На этом настройка локальной почты закончена. Теперь все письма, адресованные локальному root, например, отчеты от cron, будут дублироваться на внешний почтовый ящик, причем с отправкой через нормальный почтовый сервер. Так что письма будут нормально доставляться, не попадая в спам (хотя не обязательно, есть еще эвристические фильтры).
Заключение
Мы выполнили некоторые начальные шаги по настройке сервера CentOS 7, которые я обычно делаю при подготовке сервера. Я не претендую на абсолютную истину, возможно что-то упускаю или делаю не совсем верно. Буду рад разумным и осмысленным комментариям и замечаниям с предложениями.
Полезно после базовой настройки сразу же подключить сервер к системе мониторинга. Либо настроить ее, если у вас еще нет. У меня есть подробный цикл статей по настройке мониторинга:
- , либо только подключение centos к мониторингу путем установки на него агента.
- В отдельной рубрике автора