Estoy en el proceso de reinstalar el sistema operativo en una máquina que se utilizará para alojar un par de aplicaciones para nuestro negocio. Las aplicaciones serán solo locales; El acceso desde clientes externos será solo a través de VPN.
La configuración anterior usaba un panel de control de alojamiento (Plesk) para la mayoría de los administradores, y estaba buscando usar otro software similar para la reinstalación, pero pensé que finalmente debería aprender cómo funciona todo. Puedo hacer la mayoría de las cosas que el software haría por mí, pero no tengo clara la simbiosis de todo. Todo esto es un intento de distanciarme más de la tierra del Programador / Programador de configuración , si es posible.
No puedo encontrar un tutorial completo para lo que estoy buscando, así que pensé en hacer esta pregunta, y si la gente me puede ayudar en el camino, editaré esto con las respuestas y documentaré mi progreso / trampas Esperemos que algún día esto ayude a alguien en el futuro.
Los detalles:
- CentOS 5.5 x86_64
- httpd: Apache / 2.2.3
- MySQL: 5.0.77 (para actualizar)
- PHP: 5.1 (para ser actualizado)
Los requisitos:
- ¡¡SEGURIDAD!!
- Transferencia segura de archivos
- Acceso seguro al cliente (SSL Certs y CA)
- Almacenamiento de datos seguro
- Conexión segura a otra máquina local (MySQL)
- Virtualhosts / subdominios múltiples
- El correo electrónico local sería bueno, pero no crítico
Los pasos:
mientras realizaba la instalación, verifiqué la opción Componentes del servidor pensando que iba a usar otro administrador similar a Plesk. En retrospectiva, considerando que he decidido intentar seguir mi propio camino, esta probablemente no fue la mejor idea.
configuración de usuarios, red / dirección IP, etc. Actualización / actualización de Yum.
para actualizar PHP y MySQL a las últimas versiones, tuve que buscar otro repositorio fuera de CentOS. IUS se ve muy bien y estoy feliz de haberlo encontrado.
Agregue el repositorio IUS a nuestro administrador de paquetes
cd /tmp
wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/epel-release-1-1.ius.el5.noarch.rpm
rpm -Uvh epel-release-1-1.ius.el5.noarch.rpm
wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/ius-release-1-4.ius.el5.noarch.rpm
rpm -Uvh ius-release-1-4.ius.el5.noarch.rpm
yum list | grep -w \.ius\. # list all the packages in the IUS repository; use this to find PHP/MySQL version and libraries you want to install
Elimine la versión anterior de PHP e instale la versión más nueva de IUS
rpm -qa | grep php # to list all of the installed php packages we want to remove
yum shell # open an interactive yum shell
remove php-common php-mysql php-cli #remove installed PHP components
install php53 php53-mysql php53-cli php53-common #add packages you want
transaction solve #important!! checks for dependencies
transaction run #important!! does the actual installation of packages.
[control+d] #exit yum shell
php -v
PHP 5.3.2 (cli) (built: Apr 6 2010 18:13:45)
Actualice MySQL desde el repositorio IUS
/etc/init.d/mysqld stop
rpm -qa | grep mysql # to see installed mysql packages
yum shell
remove mysql mysql-server #remove installed MySQL components
install mysql51 mysql51-server mysql51-devel
transaction solve #important!! checks for dependencies
transaction run #important!! does the actual installation of packages.
[control+d] #exit yum shell
service mysqld start
mysql -v
Server version: 5.1.42-ius Distributed by The IUS Community Project
Instrucciones de actualización cortesía de IUS wiki: http://wiki.iuscommunity.org/Doc/ClientUsageGuide .
scp
y sftp
acceder, sin permitir el ssh
inicio de sesióncd /tmp
wget http://dag.wieers.com/rpm/packages/rssh/rssh-2.3.2-1.2.el5.rf.x86_64.rpm
rpm -ivh rssh-2.3.2-1.2.el5.rf.x86_64.rpm
useradd -m -d /home/dev -s /usr/bin/rssh dev
passwd dev
Editar /etc/rssh.conf
para otorgar acceso a SFTP a los usuarios de rssh.
vi /etc/rssh.conf
Descomentar o agregar:
allowscp
allowsftp
Esto me permite conectarme a la máquina a través del protocolo SFTP en Transmitir (mi programa FTP preferido; estoy seguro de que es similar a otras aplicaciones FTP).
instrucciones de rssh apropiadas (con agradecimiento) de http://www.cyberciti.biz/tips/linux-unix-restrict-shell-access-with-rssh.html .
ifconfig eth1:1 192.168.1.3 up #start up the virtual interface
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth1 ifcfg-eth1:1 #copy default script and match name to our virtual interface
vi ifcfg-eth1:1 #modify eth1:1 script
# ifcfg-eth1: 1 | modificar para que se vea así:
DISPOSITIVO = eth1: 1
IPADDR = 192.168.1.3
NETMASK = 255.255.255.0
NETWORK = 192.168.1.0
ONBOOT = yes
NAME = eth1: 1
Agregue más interfaces virtuales según sea necesario repitiendo. Debido a la ONBOOT=yes
línea en el archivo ifcfg-eth1: 1, esta interfaz se abrirá cuando el sistema se inicie o la red se inicie / reinicie.
service network restart
Cerrar la interfaz eth0: [OK]
Cerrar la interfaz eth1: [OK]
Cerrar la interfaz loopback: [OK]
Abrir la interfaz loopback: [OK]
Abrir la interfaz eth0: [OK]
Abrir la interfaz eth1: [OK]
ping 192.168.1.3
64 bytes de 192.168.1.3: icmp_seq = 1 ttl = 64 tiempo = 0.105 ms
En la sección rssh anterior, agregué un usuario para usar para SFTP. En el directorio de inicio de este usuario, creé una carpeta llamada 'https'. Aquí es donde vivirán los documentos de este sitio, así que necesito agregar un host virtual que lo señale. Usaré la interfaz virtual anterior para este sitio (en este documento llamado dev.site.local).
vi /etc/http/conf/httpd.conf
Agregue lo siguiente al final de httpd.conf:
<VirtualHost 192.168.1.3:80>
ServerAdmin [email protected]
DocumentRoot /home/dev/https
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
Puse un archivo index.html ficticio en el directorio https solo para verificar todo. Traté de buscarlo, y me encontré con un permiso denegado errores. Los registros solo daban una oscura referencia a lo que estaba sucediendo:
[Lun 17 de mayo 14:57:11 2010] [error] [cliente 192.168.1.100] (13) Permiso denegado: acceso a /index.html denegado
Probé chmod 777 et. al., pero fue en vano. Resulta que necesitaba chmod + x el directorio https y sus directorios principales.
chmod +x /home
chmod +x /home/dev
chmod +x /home/dev/https
Esto resolvió ese problema.
Estoy manejando DNS a través de nuestro cuadro local de Windows Server 2003. Sin embargo, la documentación de CentOS para BIND se puede encontrar aquí: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html
Para que SSL funcione, cambié lo siguiente en httpd.conf:
NameVirtualHost 192.168.1.3:443 #make sure this line is in httpd.conf
<VirtualHost 192.168.1.3:443> #change port to 443
ServerAdmin [email protected]
DocumentRoot /home/dev/https
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
Desafortunadamente, sigo recibiendo errores (Código de error: ssl_error_rx_record_too_long) cuando intento acceder a una página con SSL. Como JamesHannah señaló con gracia a continuación , no había configurado las ubicaciones de los certificados en httpd.conf y, por lo tanto, estaba arrojando la página al broswer como el certificado que hacía que el navegador no funcionara.
Entonces, primero, necesitaba configurar una CA y hacer archivos de certificado. Encontré un excelente (aunque antiguo) tutorial sobre el proceso aquí: http://www.debian-administration.org/articles/284 .
Estos son los pasos relevantes que tomé de ese artículo:
mkdir /home/CA
cd /home/CA/
mkdir newcerts private
echo '01' > serial
touch index.txt #this and the above command are for the database that will keep track of certs
Cree un openssl.cnf
archivo en el /home/CA/
directorio y edítelo según el tutorial vinculado anteriormente. (Como referencia, mi archivo openssl.cnf terminado se veía así: http://pastebin.com/raw.php?i=hnZDij4T )
openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -days 3650 -config ./openssl.cnf #this creates the cacert.pem which gets distributed and imported to the browser(s)
Modificado openssl.cnf
nuevamente por instrucciones de tutorial.
#generates certificate request, and key.pem which I renamed dev.key.pem.
openssl req -sha1 -new -nodes -out dev.req.pem -config ./openssl.cnf
Modificado openssl.cnf
nuevamente por instrucciones de tutorial.
#create and sign certificate.
openssl ca -out dev.cert.pem -md sha1 -config ./openssl.cnf -infiles dev.req.pem
¡IMPORTANTE!
Mueva los archivos y haga referencia a ellos desde httpd.conf en la nueva ubicación
cp dev.cert.pem /home/dev/certs/cert.pem
cp dev.key.pem /home/certs/key.pem
Actualicé httpd.conf para reflejar los certificados y activar SSLEngine:
NameVirtualHost 192.168.1.3:443
<VirtualHost 192.168.1.3:443>
ServerAdmin [email protected]
DocumentRoot /home/dev/https
SSLEngine on
SSLCertificateFile /home/dev/certs/cert.pem
SSLCertificateKeyFile /home/dev/certs/key.pem
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
Ponga CA cert.pem en un lugar accesible desde la web y descárguelo / impórtelo a mi navegador. Ahora puedo visitar https: //dev.site.local sin errores ni advertencias.
Y aquí es donde estoy. Seguiré editando esto a medida que avance. Se agradecería cualquier consejo sobre cómo configurar el correo electrónico SSL y / o configurar una conexión segura a otro Box que será el servidor MySQL.
Respuestas:
Esta guía tiene muchas respuestas sobre el uso de SSL con Apache, le indica cómo crear un certificado autofirmado, cómo obtener un certificado adecuado de una autoridad de certificación (CA) reconocida y cómo crear su propia CA no confiable para crear un certificado certificado completo http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html
En cuanto a los hosts virtuales y SSL, cada host necesitará su propia dirección IP o una solución más sucia es alojarlos en diferentes puertos, que el estándar
:443
debido a la naturaleza de los certificados SSL, el alojamiento virtual basado en nombres no se lleva bien con SSL; por eso necesitas otro método para diferenciarte; diferentes puertos / IP.Configurar SSH es bastante fácil, ya debería estar ejecutándose en su servidor. Deberá hacer varias cosas para bloquearlo.
Se puede agregar a su
/etc/ssh/sshd_config
para restringir el acceso raíz remoto y eliminar la autenticación de contraseña, en lugar de usar pares de claves públicos / privados para iniciar sesión.Para crear su par de claves SSH, puede usarlo
puttygen
en Windows; http://putty.very.rulez.org/download.html o puede crear el par de claves en un entorno Linux, así:ssh-keygen -b 2048 -t RSA -f my_keypair
. Esto creará unmy_keypair
archivo y unmy_keypair.pub
archivo (solo nombrado para este ejemplo, podría sugerir nombrar su nombre de usuario o dejarlo-f
y dejar que se genere~/.ssh/id_rsa
).Transfiera de manera segura
my_keypair
a su estación de trabajo, para acceso SSH futuro, esta es la clave privada, no debe compartirla con nadie. A continuación, en el servidor, crear$HOME/.ssh
si no existe ya,mkdir ~/.ssh
y luego copiar la clave pública (my_keypair.pub
) para~/.ssh/
, si ya tieneauthorized_keys
en la~/.ssh
causa que haya hecho esto para otras cosas, se puede hacercat my_keypair.pub >> authorized_keys
para añadir su clave pública, ocp my_keypair.pub authorized_keys
si No existe.Ahora ejecuta
chmod 700 ~/.ssh
ychmod 644 ~/.ssh/my_keypair.pub ~/.ssh/authorized_keys
para establecer permisos. Puede guardar una copia demy_keypair
en~/.ssh/
para su uso cuando se conecta a otras máquinas, pero que debe hacerchmod 600 ~/.ssh/my_keypair
para asegurarse de que nadie puede acceder lo contrario.Deberá agregar una cuenta de usuario normal para usted y agregarse a un grupo que no sea
users
, comoadmins
en mi ejemplo.Probablemente también desee agregar su usuario o grupo
/etc/sudoers
para habilitar elsudo
uso, si aún no lo ha hecho. Esto se logra con el comando,visudo
que es la única forma en que debe editar este archivo.visudo
ejecuta la comprobación de errores y sintaxis en su configuración antes de escribirla, evitando la pérdida desudo
uso.agregado a
/etc/sudoers
permitiráusername
ejecutarsudo yum install blah
y le pedirá su propia contraseña. Esto es útil en caso de que tenga otros administradores o administradores temporales, no necesita compartir la contraseña de root.fuente
El problema con su configuración SSL es que en realidad no ha habilitado SSL, necesitaría las directivas de Apache para eso:
Sin esto, obtendrá esos errores de registro demasiado largos, porque en lugar de los encabezados SSL que su navegador esperaba, está obteniendo en su lugar solo la página web sin cifrar en una gran porción.
fuente
MySQL del paquete original es compatible con SSL. Para verificar su compilación MySQL, ejecute
Deberías encontrar algo así
have_ssl yes
. Configurar opcionesssl-ca
,ssl-key
yssl-cert
.Cree cuentas de usuario con requisitos SSL:
fuente