10.5.3 基于端口號

2023-05-12 11:04 更新

基于端口號的虛擬主機功能可以讓用戶通過指定的端口號來訪問服務器上的網站資源。在使用Apache配置虛擬網站主機功能時,基于端口號的配置方式是最復雜的。因此我們不僅要考慮httpd服務程序的配置因素,還需要考慮到SELinux服務對新開設端口的監(jiān)控。一般來說,使用80、443、8080等端口號來提供網站訪問服務是比較合理的,如果使用其他端口號則會受到SELinux服務的限制。

在接下來的實驗中,我們不但要考慮到目錄上應用的SELinux安全上下文的限制,還需要考慮SELinux域對httpd服務程序的管控。

第1步:分別在/home/wwwroot中創(chuàng)建用于保存不同網站數據的兩個目錄,并向其中分別寫入網站的首頁文件。每個首頁文件中應有明確區(qū)分不同網站內容的信息,方便我們稍后能更直觀地檢查效果。

    [root@linuxprobe ~]# mkdir -p /home/wwwroot/6111
    [root@linuxprobe ~]# mkdir -p /home/wwwroot/6222
    [root@linuxprobe ~]# echo "port:6111" > /home/wwwroot/6111/index.html
    [root@linuxprobe ~]# echo "port:6222" > /home/wwwroot/6222/index.html

第2步:在httpd服務配置文件的第43行和第44行分別添加用于監(jiān)聽6111和6222端口的參數。

    [root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf 
    ………………省略部分輸出信息……………… 
     33 #
     34 # Listen: Allows you to bind Apache to specific IP addresses and/or
     35 # ports, instead of the default. See also the <VirtualHost>
     36 # directive.
     37 #
     38 # Change this to Listen on specific IP addresses as shown below to 
     39 # prevent Apache from glomming onto all bound IP addresses.
     40 #
     41 #Listen 12.34.56.78:80
     42 Listen 80
     43 Listen 6111
     44 Listen 6222
    ………………省略部分輸出信息……………… 

第3步:在httpd服務的配置文件中大約113行處開始,分別追加寫入兩個基于端口號的虛擬主機網站參數,然后保存并退出。記得需要重啟httpd服務,這些配置才生效。

    [root@linuxprobe ~]# vim /etc/httpd/conf/httpd.conf
    ………………省略部分輸出信息……………… 
    113 <VirtualHost 192.168.10.10:6111>
    114 DocumentRoot "/home/wwwroot/6111"
    115 ServerName www.linuxprobe.com
    116 <Directory "/home/wwwroot/6111">
    117 AllowOverride None
    118 Require all granted
    119 </Directory> 
    120 </VirtualHost>
    121 <VirtualHost 192.168.10.10:6222>
    122 DocumentRoot "/home/wwwroot/6222"
    123 ServerName bbs.linuxprobe.com
    124 <Directory "/home/wwwroot/6222">
    125 AllowOverride None
    126 Require all granted
    127 </Directory>
    128 </VirtualHost>
    ………………省略部分輸出信息………………

第4步:因為我們把網站數據目錄存放在/home/wwwroot目錄中,因此還是必須要正確設置網站數據目錄文件的SELinux安全上下文,使其與網站服務功能相吻合。最后記得用restorecon命令讓新配置的SELinux安全上下文立即生效。

    [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
    [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111
    [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*
    [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222
    [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*
    [root@linuxprobe ~]# restorecon -Rv /home/wwwroot/
    restorecon reset /home/wwwroot context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /home/wwwroot/6111 context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /home/wwwroot/6111/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /home/wwwroot/6222 context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    restorecon reset /home/wwwroot/6222/index.html context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
    [root@linuxprobe ~]# systemctl restart httpd
    Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.

見鬼了!在妥當配置httpd服務程序和SELinux安全上下文并重啟httpd服務后,竟然出現報錯信息。這是因為SELinux服務檢測到6111和6222端口原本不屬于Apache服務應該需要的資源,但現在卻以httpd服務程序的名義監(jiān)聽使用了,所以SELinux會拒絕使用Apache服務使用這兩個端口。我們可以使用semanage命令查詢并過濾出所有與HTTP協議相關且SELinux服務允許的端口列表。

    [root@linuxprobe ~]# semanage port -l | grep http
    http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
    http_cache_port_t udp 3130
    http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
    pegasus_http_port_t tcp 5988
    pegasus_https_port_t tcp 5989

第5步:SELinux允許的與HTTP協議相關的端口號中默認沒有包含6111和6222,因此需要將這兩個端口號手動添加進去。該操作會立即生效,而且在系統重啟過后依然有效。設置好后再重啟httpd服務程序,然后就可以看到網頁內容了,結果如圖10-17所示。

    [root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6111
    [root@linuxprobe ~]# semanage port -a -t http_port_t -p tcp 6222
    [root@linuxprobe ~]# semanage port -l| grep http
    http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
    http_cache_port_t udp 3130
    http_port_t tcp  6222, 6111, 80, 81, 443, 488, 8008, 8009, 8443, 9000
    pegasus_http_port_t tcp 5988
    pegasus_https_port_t tcp 5989
    [root@linuxprobe ~]# systemctl restart httpd
    [root@linuxprobe ~]# firefox

圖10-17 基于端口號訪問虛擬主機網站

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號