Từ A đến Z của việc thiết lập hộp Linux để lưu trữ cục bộ an toàn


12

Tôi đang trong quá trình cài đặt lại HĐH trên máy sẽ được sử dụng để lưu trữ một vài ứng dụng cho doanh nghiệp của chúng tôi. Các ứng dụng sẽ chỉ cục bộ; truy cập từ các máy khách bên ngoài sẽ chỉ thông qua VPN.

Thiết lập trước đó đã sử dụng bảng điều khiển lưu trữ (Plesk) cho hầu hết quản trị viên và tôi đang xem xét sử dụng một phần mềm tương tự khác để cài đặt lại - nhưng tôi nghĩ rằng cuối cùng tôi cũng nên tìm hiểu cách thức hoạt động của nó. Tôi có thể làm hầu hết những điều mà phần mềm sẽ làm cho tôi, nhưng tôi không rõ về sự cộng sinh của tất cả. Đây hoàn toàn là một nỗ lực để tạo khoảng cách xa hơn với vùng đất của Lập trình viên / Lập trình viên Cấu hình , nếu có thể.

Tôi không thể tìm thấy hướng dẫn đầy đủ ở bất cứ đâu cho những gì tôi đang tìm kiếm, vì vậy tôi nghĩ rằng tôi đã đưa ra câu hỏi này và nếu mọi người có thể giúp tôi trên đường tôi sẽ chỉnh sửa câu trả lời này và ghi lại tiến trình của tôi / cạm bẫy. Hy vọng một ngày nào đó điều này sẽ giúp ai đó xuống dòng.

Các chi tiết:

  • CentOS 5.5 x86_64
  • httpd: Apache / 2.2.3
  • MySQL: 5.0.77 (sẽ được nâng cấp)
  • PHP: 5.1 (sẽ được nâng cấp)

Những yêu cầu:

  • BẢO VỆ!!
    • Chuyển tập tin an toàn
    • Truy cập khách hàng an toàn (SSL Certs và CA)
    • Lưu trữ dữ liệu an toàn
    • Kết nối an toàn với một máy cục bộ khác (MySQL)
  • Virtualhost / nhiều tên miền phụ
  • Email địa phương sẽ tốt, nhưng không quan trọng

Các bước:

  • Tải xuống CentOS DVD-iso mới nhất (torrent hoạt động rất tốt cho tôi).

  • Cài đặt CentOS:
    Trong khi thực hiện cài đặt, tôi đã kiểm tra tùy chọn Cấu phần máy chủ với suy nghĩ rằng tôi sẽ sử dụng một quản trị viên giống như Plesk khác. Nhìn nhận lại, xem xét tôi đã quyết định cố gắng đi theo con đường của riêng mình, đây có lẽ không phải là ý tưởng tốt nhất.

  • Cấu hình cơ bản:
    Thiết lập người dùng, địa chỉ mạng / IP, v.v. Cập nhật / nâng cấp Yum.

  • Nâng cấp PHP / MySQL:
    Để nâng cấp PHP và MySQL lên các phiên bản mới nhất, tôi đã phải tìm đến một repo khác ngoài CentOS. IUS trông thật tuyệt và tôi rất vui vì đã tìm thấy nó!
  • Thêm kho IUS vào trình quản lý gói của chúng tôi

    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
    

    Xóa phiên bản cũ của PHP và cài đặt phiên bản mới hơn khỏi 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)
    

    Nâng cấp MySQL từ kho 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
    

    Hướng dẫn nâng cấp lịch sự của wiki IUS: http://wiki.iuscommunity.org/Doc/ClientUsageGuide .


  • Cài đặt rssh (shell bị hạn chế) để cung cấp scpsftptruy cập, mà không cho phép sshđăng nhập
  • 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
    

    Chỉnh sửa /etc/rssh.confđể cấp quyền truy cập vào SFTP cho người dùng rssh.

    vi /etc/rssh.conf
    

    Bỏ ghi chú hoặc thêm:

    allowscp
    allowsftp
    

    Điều này cho phép tôi kết nối với máy thông qua giao thức SFTP trong Transmit (chương trình FTP mà tôi chọn; tôi chắc chắn nó tương tự với các ứng dụng FTP khác).

    hướng dẫn rssh chiếm đoạt (với sự đánh giá cao!) từ http://www.cyberciti.biz/tips/linux-unix-restrict-shell-access-with-rssh.html .


  • Thiết lập giao diện ảo
  • 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 | sửa đổi để nó trông như thế này:
    DEVICE = eth1: 1
    IPADDR = 192.168.1.3
    NETMASK = 255.255.255.0
    NETWORK = 192.168.1.0
    ONBOOT = yes
    NAME = eth1: 1

    Thêm nhiều giao diện ảo khi cần bằng cách lặp lại. Do ONBOOT=yesdòng trong tệp ifcfg-eth1: 1, giao diện này sẽ được đưa lên khi hệ thống khởi động hoặc mạng khởi động / khởi động lại.

    service network restart
    

    Tắt giao diện eth0: [OK]
    Tắt giao diện eth1: [OK]
    Tắt giao diện loopback: [OK]
    Đưa giao diện loopback: [OK]
    Đưa giao diện eth0: [OK]
    Đưa giao diện eth1: [OK]

    ping 192.168.1.3
    

    64 byte từ 192.168.1.3: icmp_seq = 1 ttl = 64 time = 0.105 ms


  • Máy chủ ảo
  • Trong phần rssh ở trên tôi đã thêm một người dùng để sử dụng cho SFTP. Trong thư mục chính của người dùng này, tôi đã tạo một thư mục có tên 'https'. Đây là nơi các tài liệu cho trang web này sẽ sống, vì vậy tôi cần thêm một máy chủ ảo sẽ trỏ đến nó. Tôi sẽ sử dụng giao diện ảo ở trên cho trang web này (ở đây được gọi là dev.site.local).

    vi /etc/http/conf/httpd.conf
    

    Thêm phần sau vào cuối 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>  
    

    Tôi đặt một tệp index.html giả trong thư mục https chỉ để kiểm tra mọi thứ. Tôi đã thử duyệt nó và đã gặp phải sự cho phép từ chối lỗi. Nhật ký chỉ đưa ra một tham chiếu mơ hồ cho những gì đang diễn ra:

    [Thứ hai 17 tháng 5 14:57:11 2010] [lỗi] [máy khách 192.168.1.100] (13) Quyền bị từ chối: quyền truy cập vào /index.html bị từ chối

    Tôi đã thử chmod 777 et. al., nhưng vô ích. Hóa ra, tôi cần chmod + x thư mục https và thư mục mẹ của nó.

    chmod +x /home
    chmod +x /home/dev
    chmod +x /home/dev/https
    

    Điều này đã giải quyết vấn đề đó.


  • DNS
  • Tôi đang xử lý DNS thông qua hộp Windows Server 2003 cục bộ của chúng tôi. Tuy nhiên, tài liệu CentOS cho BIND có thể được tìm thấy ở đây: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html


  • SSL
  • Để SSL hoạt động, tôi đã thay đổi như sau trong 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>  
    

    Thật không may, tôi liên tục gặp lỗi (Mã lỗi: ssl_error_rx_record_too_long) khi cố gắng truy cập một trang có SSL. Như JamesHannah duyên dáng chỉ ra bên dưới , tôi đã không thiết lập vị trí của các certs trong httpd.conf, và do đó, việc trang bị ném vào broswer là chứng chỉ khiến trình duyệt chùn bước.

    Vì vậy, trước tiên, tôi cần thiết lập CA và tạo các tệp chứng chỉ. Tôi tìm thấy một hướng dẫn tuyệt vời (nếu cũ) về quy trình ở đây: http .

    Dưới đây là các bước có liên quan tôi đã thực hiện từ bài viết đó:

    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  
    

    Tạo một openssl.cnftệp trong /home/CA/thư mục và chỉnh sửa nó theo hướng dẫn được liên kết ở trên. (Để tham khảo, tệp openssl.cnf đã hoàn thành của tôi trông như thế này: 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)
    

    Sửa đổi openssl.cnfmột lần nữa theo hướng dẫn hướng dẫn.

    #generates certificate request, and key.pem which I renamed dev.key.pem.
    openssl req -sha1 -new -nodes -out dev.req.pem -config ./openssl.cnf 
    

    Sửa đổi openssl.cnfmột lần nữa theo hướng dẫn hướng dẫn.

    #create and sign certificate.
    openssl ca -out dev.cert.pem -md sha1 -config ./openssl.cnf -infiles dev.req.pem 
    

    QUAN TRỌNG!

    Di chuyển các tệp và tham chiếu chúng từ httpd.conf ở vị trí mới

    cp dev.cert.pem /home/dev/certs/cert.pem
    cp dev.key.pem /home/certs/key.pem
    

    Tôi đã cập nhật httpd.conf để phản ánh các certs và bật 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>  
    

    Đặt CA cert.pem ở nơi có thể truy cập web và tải xuống / nhập nó vào trình duyệt của tôi. Bây giờ tôi có thể truy cập https: //dev.site.local mà không có lỗi hoặc cảnh báo.


    Và đây là nơi tôi đang ở. Tôi sẽ tiếp tục chỉnh sửa điều này khi tôi tiến bộ. Bất kỳ mẹo nào về cách định cấu hình email SSL và / hoặc định cấu hình kết nối an toàn với Hộp khác sẽ là máy chủ MySQL sẽ được đánh giá cao.


    Tôi không hiểu tại sao bạn cần các giao diện mạng ảo?
    Milan Babuškov

    @Milan vì tôi sẽ có nhiều tên miền / tên miền phụ trên máy này. Để sử dụng Virtualhost và SSL Mỗi tên miền / tên miền phụ sẽ cần phải có địa chỉ IP riêng. httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts
    cơn bão

    Có vẻ như lãng phí địa chỉ IP với tôi, nhưng ok. Ngoài ra, bạn có thể sử dụng các cổng TCP / IP khác nhau cho mỗi tên miền - tất cả trên một IP. Bằng cách đó, máy chủ web ít phụ thuộc vào cấu hình hệ thống.
    Milan Babuškov

    1
    @Milan: Vì thiết lập chỉ mang tính cục bộ, tôi có rất nhiều địa chỉ IP khả dụng hơn bao giờ hết. Thiết lập các giao diện bổ sung, tôi đã tìm thấy, là một quá trình khá nhanh và không đau tương đối. Nếu tôi đang thiết lập hệ thống này để sử dụng công cộng, nhờ nâng cấp Apache2.2.x và TLS, Virtualhost dường như hoạt động tốt hơn với SSL: serverfault.com/questions/109766/
    Lỗi

    1
    Rất muốn giới thiệu koltsoff.com/pub/securing-centos - một hướng dẫn rất giáo dục về bảo mật CentOS (hầu hết có thể dễ dàng áp dụng cho các bản phát hành khác) - nó không bao gồm lưu trữ, nhưng mọi thứ trong đó nên được hiểu và áp dụng cho bất kỳ máy chủ CentOS nào không nằm sau tường lửa bạn hiểu và kiểm soát.
    dunxd

    Câu trả lời:


    6

    Hướng dẫn này có rất nhiều câu trả lời về việc sử dụng SSL với Apache, cho bạn biết cách tạo chứng chỉ tự ký, cách lấy chứng chỉ phù hợp từ cơ quan chứng nhận được công nhận (CA) và cách tạo CA không tin cậy của riêng bạn để tạo Giấy chứng nhận đầy đủ. http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html

    Đối với máy chủ ảo và SSL, mỗi máy chủ sẽ cần địa chỉ IP riêng hoặc giải pháp bẩn hơn là lưu trữ chúng trên các cổng khác nhau, so với tiêu chuẩn :443do bản chất của chứng chỉ SSL, lưu trữ ảo dựa trên tên không phù hợp với SSL; đó là lý do tại sao bạn cần một phương pháp khác để phân biệt; cổng / IP khác nhau.

    Thiết lập SSH khá dễ dàng, nó đã được chạy trên máy chủ của bạn rồi. Bạn sẽ muốn làm một số điều để khóa nó.

    PermitRootLogin no
    AllowGroups admins
    PubkeyAuthentication yes
    PermitEmptyPasswords no
    PasswordAuthentication no
    

    Nó có thể được thêm vào của bạn /etc/ssh/sshd_configđể hạn chế quyền truy cập root từ xa và xóa xác thực mật khẩu, thay vào đó sử dụng các khóa công khai / riêng để đăng nhập.

    Để tạo cặp khóa SSH, bạn có thể sử dụng puttygentrong Windows; http://putty.very.rulez.org/doad.html hoặc bạn có thể tạo cặp khóa trong môi trường Linux như vậy : ssh-keygen -b 2048 -t RSA -f my_keypair. Điều này sẽ tạo ra một my_keypairtệp và một my_keypair.pubtệp (chỉ được đặt tên cho ví dụ này, tôi có thể đề nghị đặt tên cho tên người dùng của bạn hoặc bỏ qua -fvà để cho nó tạo ra ~/.ssh/id_rsa).

    Chuyển an toàn my_keypairđến máy trạm của bạn, để truy cập SSH trong tương lai, đây là khóa riêng, bạn không nên chia sẻ nó với bất kỳ ai. Sau đó, trên máy chủ, tạo ra $HOME/.sshnếu nó không tồn tại, mkdir ~/.ssh, sau đó sao chép chìa khóa công cộng ( my_keypair.pub) để ~/.ssh/, nếu bạn đã có authorized_keystrong ~/.sshbởi vì bạn đã làm điều này cho những thứ khác, bạn có thể làm cat my_keypair.pub >> authorized_keysđể phụ thêm khóa công khai của bạn, hoặc cp my_keypair.pub authorized_keysnếu nó không tồn tại

    Bây giờ chạy chmod 700 ~/.sshchmod 644 ~/.ssh/my_keypair.pub ~/.ssh/authorized_keysđể thiết lập quyền. Bạn có thể giữ một bản sao của my_keypairtrong ~/.ssh/để sử dụng khi kết nối với máy chủ khác, nhưng bạn nên làm chmod 600 ~/.ssh/my_keypairđể đảm bảo không ai có thể truy cập nó.

    Bạn sẽ muốn thêm một tài khoản người dùng bình thường cho chính mình và thêm chính mình vào một nhóm khác users, như adminstrong ví dụ của tôi.

    Bạn cũng có thể muốn thêm người dùng hoặc nhóm của mình /etc/sudoersđể cho phép sudosử dụng, nếu bạn chưa có. Điều này được thực hiện bằng lệnh visudolà cách duy nhất bạn nên chỉnh sửa tệp này. visudochạy lỗi và kiểm tra cú pháp trên cấu hình của bạn trước khi viết ra, ngăn ngừa mất sudoviệc sử dụng.

    username ALL=(ALL) ALL
    

    được thêm vào /etc/sudoerssẽ cho phép usernamechạy sudo yum install blahvà sẽ nhắc bạn nhập mật khẩu của riêng bạn. Điều này rất hữu ích trong trường hợp bạn có quản trị viên khác hoặc quản trị viên tạm thời, bạn không cần chia sẻ mật khẩu gốc.


    Nếu bạn tạo một cặp khóa trong các cửa sổ từ puttygen, hãy lưu ý rằng bạn phải thay đổi định dạng của khóa chung sau khi bạn tải nó lên máy chủ. Tôi không nhớ làm thế nào nhưng youtube thực sự có một video.
    ESW

    1

    Vấn đề với cấu hình SSL của bạn là bạn chưa thực sự kích hoạt SSL, bạn cần các chỉ thị của Apache cho điều đó:

    SSLEngine on
    SSLCertificateFile /path/to/cert.pem
    SSLCertificateKeyFile /path/to/key.pem
    

    Nếu không có điều này, bạn sẽ nhận được những lỗi quá lâu, bởi vì thay vì các tiêu đề SSL mà trình duyệt của bạn mong đợi, thay vào đó chỉ là trang web không được mã hóa trong một khối lớn.


    1
    (không có điều này, tất cả những gì bạn đã tạo là một vhost không SSL thông thường đang nghe trên cổng 443)
    JamesHannah

    1

    MySQL từ gói ban đầu hỗ trợ SSL. Để kiểm tra bản dựng MySQL của bạn, hãy chạy

    mysqladmin variables | grep ssl
    

    Bạn nên tìm một cái gì đó như have_ssl yes. Thiết lập tùy chọn ssl-ca, ssl-keyssl-cert.

    Tạo tài khoản người dùng với yêu cầu SSL:

    create user@host identified by 'password'
    grant privilegelist on database.tables to user@host require ssl
    

    Cảm ơn vì sự trả lời. Mặc dù vậy, tôi đã quên đề cập rằng tôi cũng sẽ lưu trữ các tệp trên máy chủ db để có vẻ như stunnel sẽ hoạt động tốt hơn trong trường hợp này.
    bão
    Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
    Licensed under cc by-sa 3.0 with attribution required.