ฉันกำลังติดตั้งระบบปฏิบัติการใหม่บนเครื่องที่จะใช้ในการโฮสต์แอปพลิเคชั่นสองสามตัวสำหรับธุรกิจของเรา แอปพลิเคชันจะเป็นแบบโลคัลเท่านั้น การเข้าถึงจากลูกค้าภายนอกจะทำได้ผ่าน VPN เท่านั้น
การตั้งค่าก่อนหน้านี้ใช้แผงควบคุมการโฮสต์ (Plesk) สำหรับผู้ดูแลระบบส่วนใหญ่และฉันกำลังมองหาการใช้ซอฟต์แวร์อีกชิ้นที่คล้ายกันสำหรับการติดตั้งใหม่ - แต่ฉันคิดว่าในที่สุดฉันก็ควรเรียนรู้วิธีการทำงานทั้งหมด ฉันสามารถทำสิ่งต่าง ๆ ส่วนใหญ่ซอฟต์แวร์จะทำเพื่อฉัน แต่ฉันไม่ชัดเจนใน symbiosis ของมันทั้งหมด ทั้งหมดนี้เป็นความพยายามที่จะทำตัวห่างไกลจากดินแดนแห่งConfiguration Programmer / โปรแกรมเมอร์ถ้าเป็นไปได้
ฉันไม่พบคำแนะนำแบบเต็มทุกที่สำหรับสิ่งที่ฉันกำลังมองหาดังนั้นฉันคิดว่าฉันจะตอบคำถามนี้และหากผู้คนสามารถช่วยฉันในแบบที่ฉันจะแก้ไขด้วยคำตอบและจัดทำเอกสารความคืบหน้าของฉัน / ข้อผิดพลาด หวังว่าสักวันมันจะช่วยให้ใครซักคนลงมา
รายละเอียด:
- CentOS 5.5 x86_64
- httpd: Apache / 2.2.3
- MySQL: 5.0.77 (เพื่ออัพเกรด)
- PHP: 5.1 (ที่จะอัพเกรด)
ความต้องการ:
- การรักษาความปลอดภัย !!
- การถ่ายโอนไฟล์ที่ปลอดภัย
- การเข้าถึงไคลเอนต์ที่ปลอดภัย (SSL Certs และ CA)
- จัดเก็บข้อมูลอย่างปลอดภัย
- การเชื่อมต่อที่ปลอดภัยกับเครื่องอื่น (MySQL)
- Virtualhosts / หลายโดเมนย่อย
- อีเมลในพื้นที่จะดี แต่ไม่สำคัญ
ขั้นตอน:
ในขณะที่ทำการติดตั้งฉันตรวจสอบตัวเลือกส่วนประกอบเซิร์ฟเวอร์โดยคิดว่าฉันกำลังจะใช้ผู้ดูแลระบบแบบ Plesk เหมือนเดิม เมื่อมองย้อนกลับไปเมื่อพิจารณาว่าฉันตัดสินใจที่จะลองใช้วิธีของตัวเองนี่อาจไม่ใช่ความคิดที่ดีที่สุด
ผู้ใช้ตั้งค่าเครือข่าย / ที่อยู่ IP ฯลฯ อัปเดต / อัพเกรดยำ
เพื่ออัพเกรด PHP และ MySQL เป็นเวอร์ชั่นล่าสุดฉันต้องมองหา repo อื่นนอก CentOS IUS ดูดีและฉันดีใจที่ฉันพบมัน!
เพิ่มที่เก็บ IUS ให้กับผู้จัดการแพ็คเกจของเรา
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
ลบ PHP เวอร์ชันเก่าและติดตั้งเวอร์ชันที่ใหม่กว่าจาก 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)
อัพเกรด MySQL จาก IUS repository
/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
คำสั่งการอัพเกรดมารยาทของ IUS วิกิพีเดีย: http://wiki.iuscommunity.org/Doc/ClientUsageGuide
scp
และsftp
เข้าถึงโดยไม่อนุญาตให้ssh
ลงชื่อเข้าใช้cd /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
แก้ไข/etc/rssh.conf
เพื่อให้สิทธิ์การเข้าถึง SFTP แก่ผู้ใช้ rssh
vi /etc/rssh.conf
ไม่ใส่ข้อคิดเห็นหรือเพิ่ม:
allowscp
allowsftp
สิ่งนี้ทำให้ฉันสามารถเชื่อมต่อกับเครื่องผ่านโปรโตคอล SFTP ในการส่ง (โปรแกรม FTP ของฉันที่เลือก; ฉันแน่ใจว่ามันคล้ายกับแอปพลิเคชั่น FTP อื่น ๆ )
คำแนะนำ rssh จัดสรร (ด้วยความซาบซึ้ง!) จาก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 | แก้ไขดังนั้นจึงมีลักษณะดังนี้:
อุปกรณ์ = eth1: 1
IPADDR = 192.168.1.3
NETMASK = 255.255.255.0
NETWORK = 192.168.1.0
ONBOOT = ใช่
NAME = eth1: 1
เพิ่มอินเตอร์เฟสเสมือนเพิ่มเติมตามต้องการโดยทำซ้ำ เนื่องจากONBOOT=yes
บรรทัดในไฟล์ ifcfg-eth1: 1 ส่วนต่อประสานนี้จะปรากฏขึ้นเมื่อระบบบู๊ตหรือเครือข่ายเริ่ม / รีสตาร์ท
service network restart
กำลังปิดอินเทอร์เฟซ eth0: [ตกลง]
กำลังปิดอินเทอร์เฟซ eth1: [ตกลง] การ
ปิดอินเทอร์เฟซแบบย้อนกลับ: [ตกลง]
การนำอินเทอร์เฟซแบบวนรอบ: [ตกลง]
การนำอินเทอร์เฟซ eth0
: [ตกลง]
ping 192.168.1.3
64 ไบต์จาก 192.168.1.3: icmp_seq = 1 ttl = 64 เวลา = 0.105 ms
ในส่วน rssh ด้านบนฉันเพิ่มผู้ใช้เพื่อใช้สำหรับ SFTP ในโฮมไดเรกทอรีของผู้ใช้ฉันสร้างโฟลเดอร์ชื่อ 'https' นี่คือที่ที่เอกสารสำหรับไซต์นี้จะเผยแพร่ดังนั้นฉันต้องเพิ่มโฮสต์เสมือนที่จะชี้ไป ฉันจะใช้อินเทอร์เฟซเสมือนด้านบนสำหรับไซต์นี้ (ในที่นี้เรียกว่า dev.site.local)
vi /etc/http/conf/httpd.conf
เพิ่มต่อไปนี้ในตอนท้ายของ httpd.conf:
<VirtualHost 192.168.1.3:80>
ServerAdmin dev@site.local
DocumentRoot /home/dev/https
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
ฉันใส่ไฟล์ดัมมี่ index.html ลงในไดเรกทอรี https เพื่อตรวจสอบทุกอย่าง ฉันลองเรียกดูและพบข้อผิดพลาดที่ได้รับอนุญาต บันทึกให้การอ้างอิงที่คลุมเครือกับสิ่งที่เกิดขึ้น:
[จันทร์ 17 พฤษภาคม 14:57:11 2010] [ข้อผิดพลาด] [ลูกค้า 192.168.1.100] (13) ปฏิเสธการอนุญาต: การเข้าถึง /index.html ถูกปฏิเสธ
ฉันลอง chmod 777 และ al. แต่ไม่มีประโยชน์ กลายเป็นว่าฉันต้องการ chmod + x ไดเรกทอรี https และ 'ไดเรกทอรีหลัก
chmod +x /home
chmod +x /home/dev
chmod +x /home/dev/https
วิธีนี้แก้ปัญหานั้นได้
ฉันจัดการ DNS ผ่านกล่อง Windows Server 2003 ในพื้นที่ของเรา อย่างไรก็ตามสามารถดูเอกสาร CentOS สำหรับ BIND ได้ที่นี่: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html
เพื่อให้ SSL ทำงานฉันเปลี่ยนสิ่งต่อไปนี้ใน 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 dev@site.local
DocumentRoot /home/dev/https
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
น่าเสียดายที่ฉันได้รับข้อผิดพลาด (รหัสข้อผิดพลาด: ssl_error_rx_record_too_long) เมื่อพยายามเข้าถึงหน้าเว็บด้วย SSL เนื่องจาก JamesHannah ชี้ไปที่ด้านล่างอย่างสง่างามฉันไม่ได้ตั้งค่าตำแหน่งของ certs ใน httpd.conf และทำให้หน้าเว็บถูกส่งไปที่ broswer เนื่องจากใบรับรองทำให้เบราว์เซอร์หยุดชะงัก
ดังนั้นก่อนอื่นฉันต้องตั้งค่าCAและสร้างไฟล์ใบรับรอง ผมพบว่าดี (ถ้าปี) คำแนะนำเกี่ยวกับกระบวนการที่นี่: http://www.debian-administration.org/articles/284
นี่คือขั้นตอนที่เกี่ยวข้องที่ฉันทำจากบทความนั้น:
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
สร้างopenssl.cnf
ไฟล์ใน/home/CA/
dir และแก้ไขตามคำแนะนำแบบลิงก์ด้านบน (สำหรับการอ้างอิงไฟล์ openssl.cnf ที่เสร็จแล้วของฉันมีลักษณะเช่นนี้: 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)
แก้ไขopenssl.cnf
อีกครั้งตามคำแนะนำแบบแนะนำ
#generates certificate request, and key.pem which I renamed dev.key.pem.
openssl req -sha1 -new -nodes -out dev.req.pem -config ./openssl.cnf
แก้ไขopenssl.cnf
อีกครั้งตามคำแนะนำแบบแนะนำ
#create and sign certificate.
openssl ca -out dev.cert.pem -md sha1 -config ./openssl.cnf -infiles dev.req.pem
สำคัญ!
ย้ายไฟล์และอ้างอิงจาก httpd.conf ในตำแหน่งใหม่
cp dev.cert.pem /home/dev/certs/cert.pem
cp dev.key.pem /home/certs/key.pem
ฉันอัปเดต httpd.conf เพื่อให้สอดคล้องกับ certs และเปิด SSLEngine:
NameVirtualHost 192.168.1.3:443
<VirtualHost 192.168.1.3:443>
ServerAdmin dev@site.local
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>
วางใบรับรอง CA ไว้ในที่ที่เข้าถึงได้บนเว็บและดาวน์โหลด / นำเข้าไว้ในเบราว์เซอร์ของฉัน ตอนนี้ฉันสามารถเยี่ยมชมhttps: //dev.site.localโดยไม่มีข้อผิดพลาดหรือคำเตือน
และนี่คือที่ฉันอยู่ ฉันจะแก้ไขมันต่อไปเรื่อย ๆ เคล็ดลับใด ๆ เกี่ยวกับวิธีกำหนดค่าอีเมล SSL และ / หรือกำหนดค่าการเชื่อมต่อที่ปลอดภัยไปยังกล่องอื่นซึ่งจะเป็นเซิร์ฟเวอร์ MySQL จะได้รับการชื่นชม