образовательная корпорация
Создать
Править
Отменить
Вверх

Левое меню

Последние

Изменить меня

1
Вкладки

Асгард сеть

Самарт сеть


Первичная настройка, обживание и тюнинг linux сервера на базе CentOS7

Первичная настройка

Знакомимся с сервером

Узнаем версию системы

cat /etc/redhat-release

И ответ

CentOS release 5.7 (Final)

Копаем дальше разрядность и версия

uname -a

В ответ получаем:

Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Дать свое имя

Переименуем машину как нам надо

Ищем и дописываем в файл /etc/hosts

127.0.0.1	localhost localhost.localdomain localhost4 localhost4.localdomain4
::1		localhost localhost.localdomain localhost6 localhost6.localdomain6
109.120.135.58	main.magnes.su

/etc/sysconfig/network

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=main.magnes.su
GATEWAY=109.120.135.57

/etc/hostname

main.magnes.su

Еще можно так

hostname main.magnes.su

Тут я обычно перезагружаюсь, чтоб применилось имя сервера. Позволяет избежать лишних глюков в будущей настройке. /n
Еще хорошо бы к этому моменту уже иметь глобальную запись DNS на сервер.

reboot
либо
shutdown -r now

Проверим имя

uname -n
hostname -a
hostname -s
hostname -d
hostname -f
hostname

Убираем ip и firewalld

Отказываемся от нововведений ip и firewalld

Ставим привычный ifconfig

yum install net-tools

ставим iptables

yum install iptables-services iptables

Добавляем iptables в автозагрузку

systemctl enable iptables

Добавляем свои правила в iptables

Настройка сети, защита

Закрываемся от всего, доступ только с работы

cat iptables

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:FORWARD DROP [0:0]
:INPUT DROP [0:0]
:OUTPUT DROP [0:0]
# 85- работа , 77-сервер
-A INPUT -s 85.113.43.250 -d 77.221.139.146 -j ACCEPT
-A OUTPUT -s 77.221.139.146 -d 85.113.43.250 -j ACCEPT
COMMIT
# Generated by webmin
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed
# Generated by webmin
*nat
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed

Или вот полный вариант, который еще недоточил до конца

#Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT DROP [0:0]
:RH-Firewall-1-INPUT - [0:0]
:OUTPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:BlockList - [0:0]
:BlockRulz - [0:0]
:LocOutput - [0:0]
:LocInput - [0:0]




-A FORWARD -j RH-Firewall-1-INPUT
-A INPUT -j BlockList
-A INPUT -j BlockRulz
-A INPUT -j LocInput
-A INPUT -j RH-Firewall-1-INPUT
-A OUTPUT -j LocOutput
# 67:68/udp DHCP requests from the Outside of our network
-A BlockList -p udp -m udp -d 255.255.255.255 --dport 67:68 -j DROP
# 135:139/tcp 135:139/udp NetBIOS Session
-A BlockList -p tcp -m tcp -d 77.221.139.0/25 --dport 135:139 -j REJECT  --syn 
-A BlockList -p udp -m udp -d 77.221.139.0/25 --dport 135:139 -j REJECT
# 389/tcp 389/udp Ldap
-A BlockList -p tcp -m tcp -d 77.221.139.0/25 --dport 389 -j REJECT  --syn 
# 445/tcp microsoft-ds
-A BlockList -p tcp -m tcp -d 77.221.139.0/25 --dport 445 -j REJECT  --syn 
# 636/tcp 636/udp Ldap over SSL
-A BlockList -p tcp -m tcp -d 77.221.139.0/25 --dport 636 -j REJECT  --syn 
# 1433/tcp 1433/udp MS-SQL Server Monitor
-A BlockList -p tcp -m tcp -d 77.221.139.0/25 --dport 1433:1434 -j REJECT  --syn 
-A BlockList -p udp -m udp -d 77.221.139.0/25 --dport 1433:1434 -j REJECT
# 1512/tcp 1512/udp WINS
-A BlockList -p tcp -m tcp -d 77.221.139.0/25 --dport 1512 -j REJECT  --syn 
# 1026,1058,3004,3062,3063,3065,3066,3072,3128,3131/tcp WinRPC services
-A BlockList -p tcp -m multiport -m tcp -d 77.221.139.0/25 -j REJECT --dports 1026,1058,3004,3062,3063,3065,3066,3072,3128,3131  --syn 
# 3128/tcp Proxy server
-A BlockList -p tcp -m tcp -d 77.221.139.0/25 --dport 3128 -j REJECT  --syn 
# 3389/tcp Terminal Service
-A BlockList -p tcp -m tcp -d 77.221.139.0/25 --dport 3389 -j REJECT  --syn 
# 8080/tcp MS ISA Server/PROXY
-A BlockList -p tcp -m tcp -d 77.221.139.0/25 --dport 8080 -j REJECT  --syn 
# ANTI Syn-flood: 
-A BlockRulz -p tcp -m tcp -m limit -d 77.221.139.0/25 --limit 25/second -j ACCEPT  --syn
# ANTI Ports scan
-A BlockRulz -p tcp -m tcp -m limit -d 77.221.139.0/25 --tcp-flags SYN,ACK,FIN,RST RST --limit 13/second -j ACCEPT
# ANTI Ping of death
-A BlockRulz -p icmp -m icmp -m limit -d 77.221.139.0/25 --icmp-type echo-request --limit 3/s -j ACCEPT
# ANTI IDENT probes 
-A BlockRulz -p tcp --dport 113 -j REJECT --reject-with tcp-reset
# SSH local  SSH session from 89.186.251.10
#-A LocInput -p tcp -m tcp -s 89.186.251.10 --dport 5225 -j ACCEPT
# 89.186.251.10
#-A LocOutput -p tcp -m tcp -m state -d 89.186.251.10 --sport 5225 --state ESTABLISHED -j ACCEPT
# SSH access from 89.186.251.5
#-A LocInput -p tcp -m tcp -s 89.186.251.5 --dport 22 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 89.186.251.5 --sport 22 --state ESTABLISHED -j ACCEPT


# SSH access from 89.186.251.5 - 85.113.43.250
-A LocInput -p tcp -m tcp -s 85.113.43.250 --dport 22 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp -d 85.113.43.250 --sport 22 --state ESTABLISHED -j ACCEPT


# SSH access from 85.113.43.250
#-A LocInput -p tcp -m tcp -s 85.113.43.250 --dport 5225 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 85.113.43.250 --sport 5225 --state ESTABLISHED -j ACCEPT

# SSH access from world
-A LocInput -p tcp -m tcp --dport 5225 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp --sport 5225 --state ESTABLISHED -j ACCEPT

# Seahub access from world (web) - nginx rewrite proxy - for client list sync
#-A LocInput -p tcp -m tcp --dport 8000 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp --sport 8000 --state ESTABLISHED -j ACCEPT

# Sea-client-deamon access from world - desctop
#-A LocInput -p tcp -m tcp --dport 8082 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp --sport 8082 --state ESTABLISHED -j ACCEPT

# Sea-client access from world - desctop
-A LocInput -p tcp -m tcp --dport 10001 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp --sport 10001 --state ESTABLISHED -j ACCEPT

# Sea-client-deamon access from world - desctop
-A LocInput -p tcp -m tcp --dport 12001 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp --sport 12001 --state ESTABLISHED -j ACCEPT

# SSH access from H0ME 80.234.40.26; 80.234.95.124
#-A LocInput -p tcp -m tcp -s 80.234.95.124 --dport 5225 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 80.234.95.124 --sport 5225 --state ESTABLISHED -j ACCEPT
# SSH access from H0ME 80.234.40.26; 80.234.95.124 line life
#-A LocInput -p tcp -m tcp -s 109.169.186.42 --dport 22 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 109.169.186.42 --sport 22 --state ESTABLISHED -j ACCEPT

# SSH access from eQuantum 80.252.19.90, 193.219.125.133
#-A LocInput -p tcp -m tcp -s 80.252.19.90 --dport 5225 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 80.252.19.90 --sport 5225 --state ESTABLISHED -j ACCEPT
#-A LocInput -p tcp -m tcp -s 193.219.125.133 --dport 22 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 193.219.125.133 --sport 22 --state ESTABLISHED -j ACCEPT
# SSH access from eQuantum home 85.236.190.134
#-A LocInput -p tcp -m tcp -s 85.236.190.134 --dport 22 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 85.236.190.134 --sport 22 --state ESTABLISHED -j ACCEPT
# SSH access from moodleman 194.165.20.1
#-A LocInput -p tcp -m tcp -s 194.165.20.1 --dport 22 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 194.165.20.1 --sport 22 --state ESTABLISHED -j ACCEPT
# SSH access from lineman 94.231.130.29
#-A LocInput -p tcp -m tcp -s 94.231.130.29 --dport 22 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 94.231.130.29 --sport 22 --state ESTABLISHED -j ACCEPT
# Web SERVER
-A LocInput -p tcp -m tcp --dport 80 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp --sport 80 --state NEW,ESTABLISHED -j ACCEPT
# local apache
#-A LocInput -p tcp -m tcp -s 89.186.251.5 --dport 8080 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 89.186.251.5 --sport 8080 --state NEW,ESTABLISHED -j ACCEPT
# SyncThingWorkGUI
-A LocInput -p tcp -m tcp -s 89.186.251.5 --dport 51808 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp -d 89.186.251.5 --sport 51808 --state NEW,ESTABLISHED -j ACCEPT
# SyncThingWork
-A LocInput -p tcp -m tcp --dport 22000 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp --sport 22000 --state NEW,ESTABLISHED -j ACCEPT
# Webmin work
-A LocInput -p tcp -m tcp -s 89.186.251.5 --dport 10000 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp -d 89.186.251.5 --sport 10000 --state NEW,ESTABLISHED -j ACCEPT
# Webmin work2
#-A LocInput -p tcp -m tcp -s 85.113.43.250 --dport 10000 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 85.113.43.250 --sport 10000 --state NEW,ESTABLISHED -j ACCEPT
# Webmin home
-A LocInput -p tcp -m tcp -s 5.164.166.223 --dport 10000 -j ACCEPT
-A LocOutput -p tcp -m  state -m tcp -d 5.164.166.223 --sport 10000 --state NEW,ESTABLISHED -j ACCEPT
# Usermin moodleman
#-A LocInput -p tcp -m tcp -s 194.165.20.1 --dport 20000 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 194.165.20.1 --sport 20000 --state NEW,ESTABLISHED -j ACCEPT
# Usermin lineman
#-A LocInput -p tcp -m tcp -s 94.231.130.29 --dport 20000 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 94.231.130.29 --sport 20000 --state NEW,ESTABLISHED -j ACCEPT
# usermin all
#-A LocInput -p tcp -m tcp --dport 20000 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp --sport 20000 --state NEW,ESTABLISHED -j ACCEPT
# WWW out-request
-A LocOutput -p tcp -m multiport -m tcp -s 77.221.139.146 --sport 1024: -j ACCEPT --dports 80,443
-A LocInput -p tcp -m multiport -m state -m tcp -d 77.221.139.146 --dport 1024: --state ESTABLISHED -j ACCEPT --sports 80,443
#-A LocInput -p tcp -m tcp -s 89.186.251.5 --dport 21 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 89.186.251.5 --sport 21 --state ESTABLISHED -j ACCEPT
# ICMP samin input 
-A LocInput -p icmp -s 89.186.251.0/25 -j ACCEPT
# ICMP samin input 
#-A LocInput -p icmp -s 85.113.43.250 -j ACCEPT
# ICMP  0 = Echo Reply
-A LocInput -p icmp -m icmp --icmp-type 0 -j ACCEPT
# ICMP  3 = Port Unreachable
-A LocInput -p icmp -m icmp --icmp-type 3 -j ACCEPT
# ICMP  8 = Source host isolated (obsolete)
-A LocInput -p icmp -m icmp --icmp-type 8 -j ACCEPT
# ICMP 11 = Network unreachable for TOS
-A LocInput -p icmp -m icmp --icmp-type 11 -j ACCEPT
# ICMP samin output
-A LocOutput -p icmp -d 89.186.251.0/25 -j ACCEPT
# ICMP samin output
-A LocOutput -p icmp -d 85.113.43.250 -j ACCEPT
-A LocOutput -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A LocOutput -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A LocOutput -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A LocOutput -p icmp -m icmp --icmp-type 11 -j ACCEPT
# TRACEROUTE
-A LocOutput -p udp -m udp --dport 33435:33525 -j ACCEPT
-A LocInput -p udp -m udp --dport 33435:33525 -j ACCEPT
# DNS local input/output EXTERNAL DNS (77.221.130.254)  - infobox dns
#-A LocOutput -p udp -m udp -d 77.221.130.254 --dport 53 -j ACCEPT
#-A LocInput -p udp -m state -m udp -s 77.221.130.254 --sport 53 --state ESTABLISHED -j ACCEPT
#-A LocOutput -p tcp -m tcp -d 77.221.130.254 --dport 53 -j ACCEPT
#-A LocInput -p tcp -m state -m tcp -s 77.221.130.254 --sport 53 --state ESTABLISHED -j ACCEPT
# KEXON - DNS (77.221.140.254) - infobox 2
#-A LocOutput -p udp -m udp -d 77.221.140.254 --dport 53 -j ACCEPT
#-A LocInput -p udp -m state -m udp -s 77.221.140.254 --sport 53 --state ESTABLISHED -j ACCEPT
#-A LocOutput -p tcp -m tcp -d 77.221.140.254 --dport 53 -j ACCEPT
#-A LocInput -p tcp -m state -m tcp -s 77.221.140.254 --sport 53 --state ESTABLISHED -j ACCEPT
# Free - DNS (208.67.222.222) - free
-A LocOutput -p udp -m udp -d 208.67.222.222 --dport 53 -j ACCEPT
-A LocInput -p udp -m state -m udp -s 208.67.222.222 --sport 53 --state ESTABLISHED -j ACCEPT
-A LocOutput -p tcp -m tcp -d 208.67.222.222 --dport 53 -j ACCEPT
-A LocInput -p tcp -m state -m tcp -s 208.67.222.222 --sport 53 --state ESTABLISHED -j ACCEPT
# Free - DNS (208.67.220.220) - free
-A LocOutput -p udp -m udp -d 208.67.220.220 --dport 53 -j ACCEPT
-A LocInput -p udp -m state -m udp -s 208.67.220.220 --sport 53 --state ESTABLISHED -j ACCEPT
-A LocOutput -p tcp -m tcp -d 208.67.220.220 --dport 53 -j ACCEPT
-A LocInput -p tcp -m state -m tcp -s 208.67.220.220 --sport 53 --state ESTABLISHED -j ACCEPT
# SMTP SMTP Send
#-A LocOutput -p tcp -m tcp -s 77.221.142.170 --dport 25 --sport 1024: -j ACCEPT
#-A LocInput -p tcp -m state -m tcp -d 77.221.142.170 --dport 1024: --sport 25 --state ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
#-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# -A RH-Firewall-1-INPUT -p tcp -m tcp -m state --dport 22 --state NEW -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp -m state -s 80.234.40.26 --dport 22 --state NEW,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp -m state -s 89.186.251.5 --dport 22 --state NEW,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp -m state -s 80.234.40.26 --dport 10000 --state NEW -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp -m state -s 89.186.251.5 --dport 10000 --state NEW -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp -m state -s 89.186.251.10 --dport 10000 --state NEW,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp -m state --dport 80 --state NEW,ESTABLISHED -j ACCEPT

# vpn
-A INPUT -i tun0 -j ACCEPT
-A FORWARD -i tun0 -j ACCEPT


-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
# ftp overport
#-A LocInput -s 89.186.251.5 -j ACCEPT
COMMIT
# Generated by webmin
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed
# Generated by webmin
*nat
#vpn
:PREROUTING ACCEPT [4:614] 
:POSTROUTING ACCEPT [18:936] 
:OUTPUT ACCEPT [18:936] 
-A POSTROUTING -s 10.10.20.0/24 -o eth0 -j MASQUERADE
#vpn end
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# перенаправление портов с 8000 на 80
#-A PREROUTING -p tcp -m tcp -d 77.221.139.149 --dport 80 -j REDIRECT --to-ports 8000-8000 --to-port 8000
COMMIT
# Completed

После чего проверяем наличие правил

iptables -S

И наконец запускаем iptables чем удобнее

systemctl start iptables
/etc/init.d/iptables start
service iptables start

Проверка состояния iptables

systemctl status iptables
/etc/init.d/iptables status
service iptables start

А теперь останавливаем и отключаем с автозагрузки firewalld

systemctl stop firewalld
systemctl disable firewalld

Настраиваем окружение под себя

Ставим mc

yum install mc

Ставим webmin

Способ быстрый установка rpm

wget http://downloads.sourceforge.net/project/webadmin/webmin/1.620/webmin-1.620-1.noarch.rpm?r=http%3A%2F%2Fwebmin.com%2F&ts=1361186030&use_mirror=citylan
http://www.webmin.com/rpm.html
rpm -U webmin-1.620-1.noarch.rpm

Способ правильный, добавление repo

cd /etc/yum.repos.d
touch webmin.repo

[Webmin]
name=Webmin Distribution Neutral
#baseurl=http://download.webmin.com/download/yum
mirrorlist=http://download.webmin.com/download/yum/mirrorlist
enabled=1

wget http://www.webmin.com/jcameron-key.asc
rpm --import jcameron-key.asc

yum install webmin

Если нечего не менять и открыть 10000 порт в iptables, то мы получим рули к серверу по адресу

http://localhost:10000/

Свои порты, ковыряем iptables, ssh

Переносим ssh на свой порт, чтоб не перебирали все кому не лень.

Готовимся к настройке ssh.
Включим webmin-морду. Таким образом обезопасим себя от отключения при правках iptables, касающихся настройки ssh

Откроем ssh на стандартном порту для себя же с одного IP и для всех с другого

/ets/sysconfig/iptables

# SSH access from 89.186.251.5 - 85.113.43.250
-A LocInput -p tcp -m tcp -s 85.113.43.250 --dport 22 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp -d 85.113.43.250 --sport 22 --state ESTABLISHED -j ACCEPT

# SSH access from 85.113.43.250
#-A LocInput -p tcp -m tcp -s 85.113.43.250 --dport 5225 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 85.113.43.250 --sport 5225 --state ESTABLISHED -j ACCEPT

# SSH access from world
-A LocInput -p tcp -m tcp --dport 5225 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp --sport 5225 --state ESTABLISHED -j ACCEPT

Откроем webmin для своего

# Webmin work
-A LocInput -p tcp -m tcp -s 85.113.43.250 --dport 10000 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp -d 85.113.43.250 --sport 10000 --state NEW,ESTABLISHED -j ACCEPT

Добавим нужный порт в конфиг sshd (подробная настройка шела позднее)
/etc/ssh/sshd_config

Port 22
Port 5225

Перезапустим ssh

service sshd reload
service sshd restart

Не катит, потому что 5225 порт не отдает selinux - надо еще статью про его настройку - semanage - нету по умолчанию в CO7!!!

Знакомимся с SELinux

SELinux - система принудительного контроля доступа. По умолчанию в CentOS работает строгое что не разрешено - запрещено (Enforcing)

Проверить режим работы можно командой

# sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /selinux
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy version:                 21
    Policy from config file:        targeted

# chcon -Rv –type=httpd_sys_content_t /html

Разрешить нестандартный порт

# semanage port -a -t http_port_t -p tcp 81

Посмотреть все порты

# semanage port -l

Посмотреть все переменные

# getsebool -a

Поменять что-то

# setsebool -P httpd_can_network_connect on

Теперь практика.

Беда в том, что пакет управления политиками в минимальном конфиге не стоит.
И наша задача найти его и установить.

Поищем

yum provides /usr/sbin/semanage

Загружены модули: fastestmirror
Loading mirror speeds from cached hostfile
 * Webmin: webmin.mirror.somersettechsolutions.co.uk
 * base: mirror.corbina.net
 * extras: mirror.corbina.net
 * updates: ftp.funet.fi
policycoreutils-python-2.2.5-11.el7.x86_64 : SELinux policy core python utilities
Источник: base
Совпадения с:
Имя файла   : /usr/sbin/semanage



policycoreutils-python-2.2.5-11.el7_0.1.x86_64 : SELinux policy core python utilities
Источник: updates
Совпадения с:
Имя файла   : /usr/sbin/semanage

Поставим

yum install policycoreutils-python

Теперь можно пользоваться semanage

удачи

man semanage

Задача перевесить порт ssh еще и на 5225

ищем как зовется в sshd

#semanage port -l | grep ssh
ssh_port_t                     tcp      22

Оказалось все просто =)

Разрешаем ssh наш спецефичный порт

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

Проверяем

#semanage port -l | grep ssh
ssh_port_t                     tcp      22, 5225

Все ок

Теперь перезапустить sshd и проверить как оно работается.

systemctl restart sshd

Хорошо оно работается, осталось закрыть 22 для мира, оставить только для работы на всякий.

/etc/sysconfig/iptables

# SSH access from world
-A LocInput -p tcp -m tcp --dport 5225 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp --sport 5225 --state ESTABLISHED -j ACCEPT

# SSH access from 89.186.251.5 - 85.113.43.250
-A LocInput -p tcp -m tcp -s 85.113.43.250 --dport 22 -j ACCEPT
-A LocOutput -p tcp -m state -m tcp -d 85.113.43.250 --sport 22 --state ESTABLISHED -j ACCEPT
systemctl restart iptables

Хоть это и непоследовательно звучит, но сначала мы настроим webmin по ssl

Официальная инструкция тут
http://www.webmin.com/ssl.html

Панель webmin - webmin-configuration-ssl

openSSL у меня строял изначально

Есть замечательная ссылка, которая ставим нам необходимые пакеты. (perl SSLeay)

Ее вывод

nstalling Perl module Net::SSLeay from package perl-Net-SSLeay ..

    Installing package(s) with command yum -y install perl-Net-SSLeay ..

    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * Webmin: webmin.mirror.somersettechsolutions.co.uk
     * base: mirror.awanti.com
     * extras: mirror.corbina.net
     * updates: mirror.corbina.net
    Resolving Dependencies
    --> Running transaction check
    ---> Package perl-Net-SSLeay.x86_64 0:1.55-3.el7 will be installed
    --> Finished Dependency Resolution

    Dependencies Resolved

    ================================================================================
     Package                 Arch           Version              Repository    Size
    ================================================================================
    Installing:
     perl-Net-SSLeay         x86_64         1.55-3.el7           base         285 k

    Transaction Summary
    ================================================================================
    Install  1 Package

    Total download size: 285 k
    Installed size: 990 k
    Downloading packages:
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
      Installing : perl-Net-SSLeay-1.55-3.el7.x86_64                            1/1 
      Verifying  : perl-Net-SSLeay-1.55-3.el7.x86_64                            1/1 

    Installed:

    Complete!

    .. install complete.

Получение SSL сертификата на домен

Это отдельная и большая тема.

Оформление может затянуться.

Самоподписанный сертификат

Будем считать, что у нас нету никаких валидных ssl, а подключение будем пользоваться только мы и без финансовых операций.

Поэтому создаем и подписываем сертификат самопально.

webmin-webmin-configuration-ssl-self-sgned- Certificate

Заполняем поля и создаем сертификат

Server name 	magnes.su
Email address 	esa@magnes.su
Department 	IT Magnes
Organization 	MAGNES ORG
City or locality 	Samara
State 	443
Country code 	RU
RSA key size 	Default (2048) bits
Days before expiry 	1825

Ключ будет жить тут
/etc/webmin/miniserv.pem

После чего нам покажут сам ключ
Successfully generated the following SSL key :

-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDDz1cwmL/YLTOB
...
...
...
...
Se6QazAcolNij1AbxJxNQppshbskwRijke9Hg6RnysHPUflsxMG8S629iTKY2hib
TkfPQAgld/pe7+sBa+RpjnGjTGkNCyxO3xya8dIwZHv3Y1/efmgykZnOU91E81J3
zwAdpsCrW7qtnjMfnGy2vFeDcw==
-----END PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
LnN1MRwwGgYJKoZIhvcNAQkBFg1lc2FAbWFnbmVzLnN1MB4XDTE1MDIxMDA5NTMw
MVoXDTIwMDIwOTA5NTMwMVowgYcxCzAJBgNVBAYTAlJVMQwwCgYDVQQIDAM0NDMx
...
...
...
...
AMKS535b78wWDp9fvrV9uXZO1fIDND4XAFGo7Ole8Ua5VeZfhBGL
-----END CERTIFICATE-----

На первой вкладке включаем
Enable SSL?

И, собственно, пользуемся.

https://127.0.0.1:10000

При первом заходе ругнется на самоподписанный сертификат, но мы его примем и все будет хорошо =)

Webmin Two-Factor Authentication + Google

Не настроено

Усложняем себе жизнь и прикручиваем двухфакторную авторизацию к webmin'у и вообще к shell'у.

т.е. теперь мы будем входить в систему без пароля, но с пинами.

Заходим в webmin-configuration - Two-factor-Auth
Выбираем google

Выпадает ошибка, мол нет перла
Failed to save two-factor authentication : The Perl module Authen::OATH needed for two-factor authentication is not installed. Use the Perl Modules page in Webmin to install it.

Переходим по ссылке и ставим необходимые модули

Installing Perl module Authen::OATH from package perl(Authen::OATH) ..

    Installing package(s) with command yum -y install perl(Authen::OATH) ..

    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * Webmin: webmin.mirror.somersettechsolutions.co.uk
     * base: mirror.awanti.com
     * extras: mirror.corbina.net
     * updates: mirror.corbina.net
    No package perl(Authen::OATH) available.
    Error: Nothing to do

    .. install failed!

Some modules failed to install from packages, trying installation from source instead..

Downloading http://www.cpan.org/modules/02packages.details.txt.gz (1.56 MB) ..
     Received 1024 bytes (0 %)
     Received 160 kB (10 %)
     Received 319 kB (20 %)
     Received 478 kB (30 %)
     Received 637 kB (40 %)
     Received 797 kB (50 %)
     Received 956 kB (60 %)
     Received 1.09 MB (70 %)
     Received 1.24 MB (80 %)
     Received 1.40 MB (90 %)
     Received 1.56 MB (100 %)
.. download complete.

Downloading http://www.cpan.org/authors/id/S/SI/SIFUKURT/Authen-OATH-v1.0.0.tar.gz (5.02 kB) ..
     Received 1024 bytes (19 %)
     Received 2 kB (39 %)
     Received 3 kB (59 %)
     Received 4 kB (79 %)
     Received 5 kB (99 %)
     Received 5.02 kB (100 %)
.. download complete.

Нехорошо, webmin не нашел в репах centos perl(Authen::OATH) и скачал исходник.

Собирать из исходников на боевом сервере не совмем корректно.

Попробуем подключить доверенные репы для этого пакета

Отменил такой подход, возможно позднее буду рассматривать его

Установка nginx

Конвертер apache
https://winginx.com/ru/htaccess

Официальный ман

http://wiki.nginx.org/Install
https://www.nginx.com/resources/wiki/start/topics/tutorials/install/

Создаем /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

В моем случае так:

baseurl=http://nginx.org/packages/centos/7/x86_64/

Проверим

yum repolist

Ставим

yum install nginx

Запускаем

service nginx start

Вписываем в автозагрузку

systemctl enable nginx

либо так

chkconfig --levels 235 nginx on

Установка MySQL (epel, remi)

Подключаем необходимые репозитории с актуальными версиями пакетов
Epel (Extra Packages for Enterprise Linux):

yum install epel-release

REMI
Содержит самые последние версии php и mysql. Зависит от Epel.

wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm 
sudo rpm -Uvh remi-release-7*.rpm

Проверить все
yum repolist

Если нет - то ручками залезть в файл /etc/yum.repos.d/remi.repo

и проверить
enabled=1

Ставим MariaDB

etc/yum.repos.d/MariaDB.repo

[mariadb]

name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos6-amd64              >!!!
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
yum install MariaDB-server MariaDB-client
/etc/init.d/mysql start

Изменить модуль в webmin

So click module configuration and change:
Command to start MySQL server: /etc/init.d/mysql start
Command to stop MySQL server: /etc/init.d/mysql stop
MySQL configuration file: /var/lib/mysql/my.cnf

Запустить скрипт безопасности - задание пароля для баз, убрать гостя и тп

sudo mysql_secure_installation

Ставим MySQL

yum install mysql-server

И оно не находится. А все потому что в 7 версии перешли на более свободную MariaDB - она форк MySQL, свободный от претензий Oracle.
Но мне надо именно MySQL, поэтому поехали:

Качаем мета-пакет
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

ставим
rpm -ivh mysql-community-release-el7-5.noarch.rpm

Появился новый репозиторий
/etc/yum.repos.d/mysql-community.repo

[mysql-connectors-community]
name=MySQL Connectors Community
baseurl=http://repo.mysql.com/yum/mysql-connectors-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql-tools-community]
name=MySQL Tools Community
baseurl=http://repo.mysql.com/yum/mysql-tools-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

# Enable to use MySQL 5.5
[mysql55-community]
name=MySQL 5.5 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.5-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

# Note: MySQL 5.7 is currently in development. For use at your own risk.
# Please read with sub pages: https://dev.mysql.com/doc/relnotes/mysql/5.7/en/
[mysql57-community-dmr]
name=MySQL 5.7 Community Server Development Milestone Release
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

Все, теперь можно ставить как обычно

yum install mysql-server

Тестить так тестить
Снес MySQL - поставим марию. Снес не все, а community client & server

yum install mariadb mariadb-server net-tools mariadb-client

Пропишем сервис в автозагрузку и запустим

systemctl enable mariadb.service
systemctl start mariadb.service

Ставим PHP

Нас интересует версия, что работает с nginx напрямую - PHP FastCGI Process Manager

Ставим всякие нужные штуки толпой

yum install php-fpm php-cli php-mysql php-gd php-mbstring php-pdo php-common

Тоже полезные, но не ставим, а помним про них

php-ldap  php-odbc  php-pecl-memcache php-pear php-xml php-xmlrpc 
imagemagic

Затем создадим ссылки на автозагрузку для php-fpm и запустим:

systemctl enable php-fpm.service

systemctl start php-fpm.service

или так

chkconfig php-fpm on

Установим кешер

install -y php-pecl-apc

PHP-FPM является процессом (со скриптом init /etc/init.d/php-fpm), который запускает FastCGI сервер на порте 9000.

Сессии PHP

После обновления бывает слетают права на сессии. Лечиться так

chown nginx:nginx /var/lib/php/wsdlcache
chown nginx:nginx /var/lib/php/session

Конфигурация nginx

/etc/nginx/nginx.conf

# в два раза больше чем ядер
worker_processes  4; 

# можно побольше, но без фанатизма
keepalive_timeout  65;

Базовая настройка хоста
/etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /var/www/html/magnes.su/main;
        #root   /var/www/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /var/www/html/magnes.su/main;
        #fastcgi_pass   127.0.0.1:9000;
        fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
        try_files $uri =404;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

Через unix-socket
/etc/php-fpm.d/www.conf

#listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php5-fpm.sock

Затем перезагрузим PHP-FPM:

systemctl restart php-fpm.service

и перезапускаем nginx

systemctl restart nginx.service

Ставим Seafile

http://manual.seafile.com/deploy/using_mysql.html
4.4.1 64bit (beta)

Через php=fpm не пускал в nginx

Ошибка в логе seahub.error.log

2015/10/06 21:54:29 [crit] 11261#0: *13 connect() to 127.0.0.1:8000 failed (13: Permission denied) while connecting to upstream, client: 5.164.175.22, server: clouds.magnes.su, request: "GET /56756756 HTTP/1.1", upstream: "fastcgi://127.0.0.1:8000", host: "clouds.magnes.su"

Лечил так

I checked for errors in the SELinux logs:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied

And found that running the following commands fixed my issue:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp

Вышло так

mynginx.te
module mynginx 1.0;

require {
	type httpd_t;
	type soundd_port_t;
	class tcp_socket name_connect;
}

#============= httpd_t ==============

#!!!! This avc can be allowed using the boolean 'httpd_can_network_connect'
allow httpd_t soundd_port_t:tcp_socket name_connect;

и открываем дырку в SELinux для порта 8082

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx2
sudo semodule -i mynginx2.pp


module mynginx2 1.0;

require {
	type httpd_t;
	type us_cli_port_t;
	class tcp_socket name_connect;
}

#============= httpd_t ==============

#!!!! This avc can be allowed using the boolean 'httpd_can_network_connect'
allow httpd_t us_cli_port_t:tcp_socket name_connect;

Клиент для дома
http://download.opensuse.org/repositories/Cloud:/Seafile/openSUSE_13.2/

https://groups.google.com/forum/#!topic/seafile/uKEt6l9OafU

Помогло

Далее

Разобраться с

#-A LocInput -p tcp -m tcp -s 85.113.43.250 --dport 10000 -j ACCEPT
#-A LocOutput -p tcp -m state -m tcp -d 85.113.43.250 --sport 10000 --state NEW,ESTABLISHED -j ACCEPT
и
-A LocOutput -p tcp -m multiport -m tcp -s 109.120.135.58 --sport 1024: -j ACCEPT --dports 80,443
-A LocInput -p tcp -m multiport -m state -m tcp -d 109.120.135.58 --dport 1024: --state ESTABLISHED -j ACCEPT --sports 80,443

Пускает всех в вебмин

  • Тюнинг ssh, вход по ключу, удаленные X
  • Туннелирование
  • Настройка vpn
  • Установка софта для веб-сервера. Потом возвращаемся на этап тюнинга всяких служб
  • Минимальная работоспособность.

-+–
Упорядочить статью по времени.

Еще не ставил nginx epel и тд
imagem

http://www.8host.com/blog/ustanovka-lemp-stack-na-centos-7/

Мысли

  • Отдельный пользователь для ssh
  • Монтирование папок под другим с fuse (из мега статьи по ssh)
  • webmin https
  • TF Google надо?
  • Синхронизация времени обязательно

Перед всеми изменениями открыть webmin

Страницы в догонку

http://help.ubuntu.ru/wiki/ssh
http://vds-admin.ru/ssh/bezopasnyi-setevoi-protokol-ssh-nastroika-ssh-klienta-ispolzovanie


https://ru.intel.com/business/community/?automodule=blog&blogid=10662&showentry=4260
http://habrahabr.ru/post/186376/
http://blogosys.ru/2011/12/dvuhfaktornaya-avtorizatsiya-na-osnove-google-authenticator/
http://www.8host.com/blog/dvuxfaktornaya-autentifikaciya-ssh/
http://mhs.in.ua/articles/nastrojka-dvuhjetapnoj-autentifikacii-ssh-na-centos-5
http://rascal.su/blog/2012/12/22/%D0%B4%D0%B2%D1%83%D1%85%D1%84%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D0%B0%D1%8F-%D0%B0%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8-ssh/
http://www.linuxspace.org/archives/5034 - дельная
http://www.tecmint.com/ssh-two-factor-authentication/
http://www.kodkast.com/linux-package-installation-steps?pkg=perl-Authen-OATH.noarch
http://kiteplans.info/2012/04/06/two-factor-ssh-virtualmin-authentication-google-authenticator/
https://www.virtualmin.com/node/30597
http://spod.cx/blog/two-factor-ssh-auth-with-pam_oath-google-authenticator.shtml

http://blog.nowherelan.com/2014/01/04/two-step-authentication-for-ssh-on-centos-6-using-google-authenticator/
http://www.cyberciti.biz/open-source/howto-protect-linux-ssh-login-with-google-authenticator/
http://wiki.vps.net/vps-net-features/cloud-servers/two-factor-authentication-for-ssh-in-centos-6-using-google-authenticator/
http://www.linux.com/community/blogs/133-general-linux/783135-securing-ssh-with-two-factor-authentication-using-google-authenticator
http://www.tecmint.com/ssh-two-factor-authentication/
https://monotok.org/webmin-google-authenticator/
http://stackoverflow.com/questions/22676508/how-to-disable-two-factor-authentication-in-webmin




Мега штука по ssh
http://habrahabr.ru/post/122445/
http://mydebianblog.blogspot.ru/2006/12/ssh.html
http://myscrapbook.narod.ru/sb/ScrapbookLinux/data/20091121195240/index.html
http://www.komtet.ru/lib/tech/vhod-po-ssh-bez-parolya
http://www.skleroznik.in.ua/2013/06/17/ssh-%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%B1%D0%B5%D0%B7-%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8F-%D0%B8%D0%BB%D0%B8-%D0%BF%D0%BE-%D0%BA%D0%BB%D1%8E%D1%87%D1%83/
https://keepout.cn/ru/%D0%98%D0%A2/Linux/SSH_%D0%B1%D0%B5%D0%B7_%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0_%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8F
http://pm4u.narod.ru/ssh.htm
http://matt.might.net/articles/ssh-hacks/



Сертификат
http://habrahabr.ru/post/127643/
http://habrahabr.ru/post/181320/


VPN
http://pm4u.narod.ru/vpn.htm
Запретить использовать пароли
PasswordAuthentication no

+ запретить входить по паролю для рута

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

Приводим конфиг к такому виду

Protocol 2
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

X11Forwarding yes

GatewayPorts no
AllowTcpForwarding yes
LoginGraceTime 50
KeepAlive yes
Port 5225
ListenAddress 0.0.0.0:5225

Обновление пакетов

yum list updates
yum update

Добавить spoiler в вики


php-fpm на сокете
Problem:

PHP-FPM support for nginx will not start when attempted in Tools & Settings > Services Management

Check error log:

#tail /var/log/php-fpm/error.log

ERROR: unable to bind listening socket for address '/var/www/vhosts/system/domain.tld/php-fpm.sock': Permission denied (13)

Possible problem:

SELinux may be preventing it. To test this do:

#setenforce 0

Now try and start PHP-FPM support again in Tools & Settings > Services Management

If that now starts you know what the problem is. Go to «Fix» below
If it didnt work, you have a different issue. Turn SELinux back on while you figure it out:

#setenforce 1

Fix:

The following worked for me but i know very little about SELinux - corrections welcome:

## Turn SELinux to permissive
# setenforce 0

## In Plesk panel start PHP-FPM support in Tools & Settings > Services Management

# grep php-fpm /var/log/audit/audit.log | audit2allow -m php-fpmlocal > php-fpm.te

## You can vi/cat/nano php-fpm.te and see the custom policy that will be created. When done, execute it with:

# grep php-fpm /var/log/audit/audit.log | audit2allow -M php-fpmlocal

## now load the policy
# semodule -i php-fpmlocal.pp

## Turn SElinux back on
#setenforce 1

## In Plesk panel start PHP-FPM support in Tools & Settings > Services Management

## Still not working. Sorry - good luck finding the problem.

Reference page
http://wiki.centos.org/HowTos/SELinux

http://www.tech-notes.net/configure-selinux-apache-centos/

Настройка SELinux для Apache в CentOS

Май 7, 2016 admin

SELinux это модуль ядра Linux, который предоставляет дополнительный механизм определения прав доступа к папкам и файлам. Иногда он создает немалые проблемы при расположении файлов сайта и логов в нестандартных папках.

Особым успехом эти грабли пользуются у новоиспеченных админов и разработчиков, которые не понимают, почему сайт возвращает 404-ю ошибку, при том, что пользователь apache или www-data является владельцем папки с файлами сайта.

Самым популярным способом проблемы является отключение selinux, что не совсем правильно. Даже админы из второй линии поддержки популярных хостингов пользуются этим способом решения проблемы, что, как минимум, странно.

Дело в том, что selinux определяет не столько права доступа к файлам, сколько что и какому демону можно делать (читать файлы, редактировать файлы). Очень часто сервера ломают используя уязвимости в CMS сайтов. При этом злоумышленник получает доступ к папкам и файлам, к которым имеет доступ web-сервер.

Используя selinux, можно запускать web-сервер хоть от имени пользователя root, но при этом быть спокойным.

Проверить состояние selinux в CentOS/RedHat можно с помощью следующей команды:

  getenforce

Для управления правилами нам понадобятся дополнительные утилиты:

  yum install -y policycoreutils-python setroubleshooting

Selinux по структуре конфига напоминает iptables. У него имеются свои таблицы доступа к файла. Для того что бы selinux разрешил процессу apache запись в определенный каталог - нужно этот каталог включить в «таблицу» httpd_sys_rw_content_t, папку с логами нужно добавить в «httpd_log_t» и т.д.

Следующие команды приводятся как пример или шпаргалка. В этом случае папки сайтов лежат в /home/webapps.

Разрешаем apache читать файлы в каталоге и подкаталогах /home/webapps (httpd_sys_content_t):

  semanage fcontext -a -t httpd_sys_content_t "/home/webapps(/.*)?"

Разрешаем apache писать логи нестандартном месте (httpd_log_t):

  semanage fcontext -a -t httpd_log_t "/home/webapps/logs(/.*)?"

Отдельная директива в selinux отведена для mod_cache. Если Вашему серверу нужно использовать произвольное хранилище для кэша - добавьте его в httpd_cache_t:

  semanage fcontext -a -t httpd_cache_t "/home/webapps/cache(/.*)?"

Для того что бы разрешить запись - добавте путь к папке в httpd_sys_rw_content_t:

  semanage fcontext -a -t httpd_sys_rw_content_t "/home/webapps/*/public_html/uploads(/.*)?"

Для применения изменений выполните следующую команду:

  restorecon -Rv /home/webapps

На этом этапе apache может работать с каталогами всех сайтов, которые буду созданы в /home/webapps/ и писать файлы в каталоги uploads каждого сайта.

Список использованой литературы:

Включаем отправку почты с php

sendmail: fatal: chdir /var/spool/postfix: Permission denied

showing up in /var/log/httpd/error_log. This was caused by the apache user not having SELinux permission to send email. This could also occur on other distributions which use SELinux (particularly Fedora and CentOS, but possibly others as well), if it is set to «Enforcing».

You can check this by using
Code: [Select]

/usr/sbin/getsebool httpd_can_sendmail

which will report
Code: [Select]

httpd_can_sendmail –> {on|off}

and if it is off, you can turn it on using
Code: [Select]

sudo setsebool -P httpd_can_sendmail 1

Настройка ssl от Let’s Encrypt

Шел по статье
https://habrahabr.ru/post/301558/

и оф дока
https://certbot.eff.org/#centosrhel6-nginx

В CentOS7 - можно из пакетов, но в шестой пришлось качать

    sudo yum install epel-release
    sudo yum install certbot

Установка

Проще так

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto


Получение сертификата

Далее следует команда непосредственно получения сертификата:

# ./certbot-auto certonly –webroot –agree-tos –email mypost@my-domain.ru -w /home/bitrix/www/ -d my-domain.ru -d www.my-domain.ru

–webroot — так как автоматическая установка для nginx пока не надежна, используем этот ключ;
–agree-tos — соглашаемся с лицензионным соглашением;
–email mypost@my-domain.ru — указываем свой e-mail. В дальнейшем он может пригодиться для восстановления своего аккаунта;
-w /home/bitrix/www — указываем корневую директорию сайта;
-d my-domain.ru — наш домен. так же можно указывать и поддомены, например -d site.my-domain.ru.

После этого скрипт начнет работу и предложит установить недостающие пакеты. Соглашаемся и ждём.

Если всё завершится успешно, вы увидите сообщение:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/my-domain.ru/fullchain.pem. Your
cert will expire on 2016-08-21. To obtain a new version of the
certificate in the future, simply run Certbot again.
- If you lose your account credentials, you can recover through
e-mails sent to mypost@my-domain.ru.
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Сертификаты установлены, осталось только указать nginx'у, где они лежат.

Настройка

Открываем конфигурационный файл ssl.conf:

# vim /etc/nginx/bx/conf/ssl.conf

Если у вас уже были установлены сертификаты, удаляем или комментируем строки с ними и вставляем новые:

ssl_certificate /etc/letsencrypt/live/my-domain.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my-domain.ru/privkey.pem;

Не забываем включить ssl, если этого не было сделано ранее:

ssl on;
keepalive_timeout 70;
keepalive_requests 150;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

После этого перезапускаем nginx:

# service nginx reload

Если он не выдал никаких ошибок, значит всё в порядке. Можно зайти на сайт и посмотреть что получилось.

Обновление

Сертификат выдается на 90 дней, так что после этого срока нужно будет его обновить. Делается это командой:

# certbot-auto renew

Обновляем

/var/local/

wget https://dl.eff.org/certbot-auto
просто вот это

./certbot-auto renew 
service nginx restart

а так было раньше

./certbot-auto certonly --webroot --agree-tos --email esa@magnes.su -w /var/www//html/zakaz.cloud/samart -d zakaz.samart.ru
service nginx restart
chmod a+x certbot-auto

Для тех, где бот не работает - сначала сделаем сертификат без проверок well-know, и вставим его после

./certbot-auto certonly --webroot --agree-tos --email esa@magnes.su -w /var/www//html/zakaz.cloud/www -d zakaz.cloud
./certbot-auto --nginx



Заказать wildcard

./certbot-auto -d 3book.ru -d *.3book.ru --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory certonly

В консоле выведет инфу, которую надо добавить в dns txt запись

Меняем на селектеле в dns и проверяем, чтоб она обновилась

dig -t txt _acme-challenge.3book.ru

Запускаем
./certbot-auto на этот домен еще раз - готово, теперь осталось перезапустить nginx

Тоже на три месяца =(