Первичная настройка, обживание и тюнинг 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 [[/cpan/download.cgi?source=3&cpan=Authen::OATH&mode=2&return=/webmin/&returndesc=Webmin%20configurationсклад:обживание:linux:|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 Тоже на три месяца =(