среда, 6 июля 2016 г.

Изменение стандартного порта SSH в CentOS 7 с включенным SELinux

Решил сменить стандартный порт для SSH. В примере указан порт 2222, но можно задать другой. В конце есть скрипт для автоматизации.

Бэкап

# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.orig.$(date +%F)

Смена порта в конфиге

Нужно заменить строку #Port 22 на Port 2222
# vi /etc/ssh/sshd_config
Port 2222

Разрешение порта на фаерволе

# firewall-cmd --permanent --zone=public --add-port=2222/tcp
# firewall-cmd --reload

Разрешение для SELinux

# semanage port -a -t ssh_port_t -p tcp 2222

Если semanage не установлен

# yum install policycoreutils-python

Применение настроек и перезапуск sshd

systemctl restart sshd.service

Проверка

# semanage port -l | grep ssh
ssh_port_t                     tcp      2292, 22
# ss -ntlp | grep ssh
LISTEN     0    128    *:22334      *:*     users:(("sshd",pid=29616,fd=3))
LISTEN     0    128   :::22334     :::*     users:(("sshd",pid=29616,fd=4))

Скрипт на bash

Порт 2222 следует заменить на нужный

#!/bin/bash
PORT_SSH = 2222
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.orig.$(date +%F)
sed "s/^[#\s]*Port .*/Port ${PORT_SSH}/"
firewall-cmd --permanent --zone=public --add-port=${PORT_SSH}/tcp
firewall-cmd --reload
yum install -y policycoreutils-python
semanage port -a -t ssh_port_t -p tcp ${PORT_SSH}
systemctl restart sshd.service

вторник, 5 июля 2016 г.

Установка Jenkins на CentOS 7 с nginx


Задался целью установить Jenkins на поддомен, желательно с https.

В общем случае задача простая и описана в официальном wiki. У меня сервер ещё голый, потому начнём с нуля.

Подклчение remi

# yum install epel-release
# rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# subscription-manager repos --enable=rhel-7-server-optional-rpms

Подключение репозитория с Jenkins

# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
# rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key

Установка

# yum install java-1.7.0-openjdk nginx jenkins

Настройка фаервола

# firewall-cmd --zone=public --add-service=http --permanent
# firewall-cmd --zone=public --add-service=https --permanent
# firewall-cmd --reload

Настройка SELinux (если включен)

# setsebool -P httpd_can_network_connect 1
Без этой опции nginx не сможет подключиться к jenkins и будет ошибка (13: Permission denied) while connecting to upstream

Настройка nginx на reverse proxy (wiki)

cat > /etc/nginx/conf.d/jenkins.conf
upstream jenkins {
  server 127.0.0.1:8080 fail_timeout=0;
}

server {
  listen 80;
  server_name jenkins.domain.tld;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  server_name jenkins.domain.tld;

  ssl_certificate     /etc/nginx/ssl/server.crt;
  ssl_certificate_key /etc/nginx/ssl/server.key;

  location / {
    proxy_set_header        Host $host:$server_port;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_redirect          http://127.0.0.1:8080 https://jenkins.domain.tld;
    proxy_pass              http://jenkins;
  }
}
^D # Нажмите CTRL + D чтобы закончить запись файла

Нужно заменить jenkins.domain.tld на свой хост и исправить пути к сертификатам (у меня они остались со старого сервера).

Запуск

# systemctl enable nginx
# systemctl enable jenkins
# systemctl restart nginx
# systemctl restart jenkins

Проверка

Если всё сделано правильно, то по ссылке https://jenkins.domain.tld будет доступен Jenkins. Обычно ему нужно некоторое время, чтобы полностью запуститься.

Заключение

Рекомендуется сразу включить режим безопасности (Enable security) в Jenkins. По дальнейшей настройке хорошо написано в  wiki.

Удалённая установка CentOS 7

Не всегда есть возможность вставить флэшку или диск в сервер и запустить установку. Довольно часто сервер находится у хостера и для переустановки ОС нужно заказывать специальную (часто платную) услугу. Мы обойдёмся установкой по сети поверх уже установленной CentOS 6.
Сразу предупрежу, что процесс довольно рискованый, если что-то пойдёт не по плану, то доступ к серверу по сети будет потерян, и без физического доступа восстановить сервер будет невозможно.

Подготовка

Проверяем конфигурацию сети

# ip addr show 
# ip route show
Нам необходимо получить ip, netmask, gateway, dns

Скачиваем образы для загрузки в /boot

# cd /boot
# wget http://mirror.centos.org/centos-7/7/os/x86_64/isolinux/vmlinuz -O vmlinuz7

# wget http://mirror.centos.org/centos-7/7/os/x86_64/isolinux/initrd.img -O initrd7

Исправляем конфиг grub (0.97)

Для grub 0.97 он выглядит примерно так (/boot/grub/grub.conf):

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-642.1.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.1.1.el6.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 no_timer_check console=tty0 console=ttyS0,115200 net.ifnames=0 biosdevname=0 rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-642.1.1.el6.x86_64.img

Копируем последний блок с title * и исправляем
title Remote Install
root (hd0,0)
kernel /vmlinuz7 inst.headless \
inst.vnc \
inst.vncpassword=<password> \
inst.lang=en_US \
inst.keymap=us \
inst.repo=http://mirror.centos.org/centos-7/7/os/x86_64/ \
nameserver=8.8.8.8 \
ip=ip::<gateway>:<netmask>:<hostname>:<interface>:none \
initrd /initrd7

Чтобы использовать настройки сети по DHCP нужно заменить директиву ip на ip=dhcp.
Если сервер спрятан в DMZ и к нему нет возможности подключиться по VNC, можно указать директиву inst.vncconnect=<host>[:<port>], тогда инсталлятор сам подключится по указаному адресу и порту к VNC вьюверу в слушающем режиме (например, remmina так умеет).
Не забудьте удалить \ и переносы строки, они добавлены для читабельности.

Установка

Настраиваем grub на запуск с нужными параметрами

# grub
> savedefault --default=1 --once
> quit
1 здесь - номер title * начиная с 0. Если что-то пойдёт не так, то сервер через некоторое время имеет шансы перезагрузиться с параметрами по умолчанию.
# reboot
Сервер может загружаться достаточно долго. 

Установка через VNC 

Не представляет из себя ничего интересного, можно полностью пересоздать разделы или установить в свободное место.