強制 Apache2 Web 伺服器偵聽單個外部 IP
我正在嘗試強制 Apache2 Web 伺服器偵聽屬於 HAProxy (
192.168.50.30
) 的單個外部 IP,因此使用者必須通過 HAProxy 才能使用 Apache2 Web 伺服器。目前(不幸的是)使用者可以通過http://192.168.50.10
and訪問 Apache2 Web 伺服器http://192.168.50.30
(只有這個應該被允許)。
- HAProxy IP:
192.168.50.30
- 阿帕奇2 IP:
192.168.50.10
大多數文章說更改
Listen *:80
為Listen IP-ADDRESS:80
in/etc/apache2/ports.conf
可以解決問題,但是當我嘗試重新啟動 apache2 時出現以下錯誤。(99)Cannot assign requested address: AH00072: make_sock: could not bind to address 192.168.50.30:80 no listening sockets available, shutting down
我的目前設置
/etc/apache2/ports.conf
Listen 192.168.50.30:80 <IfModule ssl_module> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80> DocumentRoot /var/www/html </VirtualHost>
/etc/apache2/apache2.conf
<Directory /> Options FollowSymLinks AllowOverride None Require all denied </Directory> <Directory /usr/share> AllowOverride None Require all granted </Directory> <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
/etc/hosts
127.0.0.1 webserver1 webserver1 127.0.0.1 localhost ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
$ ifconfig -a
eth0 Link encap:Ethernet HWaddr 08:00:27:b5:33:dd inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:feb5:33dd/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:63695 errors:0 dropped:0 overruns:0 frame:0 TX packets:13588 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:75453727 (75.4 MB) TX bytes:983784 (983.7 KB) eth1 Link encap:Ethernet HWaddr 08:00:27:9a:05:45 inet addr:192.168.50.10 Bcast:192.168.50.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe9a:545/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8721 errors:0 dropped:0 overruns:0 frame:0 TX packets:8392 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:656568 (656.5 KB) TX bytes:872702 (872.7 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
我會為此使用訪問控制。首先確保您的 Listen 語句都只列出 1 個 IP 地址(但這可能並不重要)。然後配置訪問控制,只允許來自 HA Proxy 地址的訪問
Order deny,allow Deny from all Allow from 192.168.50.30
或類似的東西只允許從 haproxy 地址訪問。
您只能綁定到出現在 ifconfig 中的 IP(即本地 IP)。聽起來您想限制 Apache 僅在 HAProxy 連接到它時才響應。
您可以在 Apache 主機上使用 IPTables 執行此操作:
iptables -A INPUT -s 192.168.1.30 -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j REJECT
這表示允許從 192.168.1.30 連接到埠 80,並拒絕所有其他連接。
事先執行“iptables -L”以查看是否有任何其他規則,這可能會改變您添加這些規則的細節。
另一種選擇是使用 Apache 訪問控制來做同樣的事情:https ://httpd.apache.org/docs/2.4/howto/access.html#host
<RequireAll> Require all granted Require ip 192.168.1.30 </RequireAll>