限制 phpMyAdmin 存取 IP on Debian 6

在架設 LAMP 環境時,剛入門 MySQL 的凍仁都會順手裝上 phpMyAdmin,來管理資料庫,但這是個壞習慣,尤其是對已經上線的機器而言!若沒做好防護,就會敞開大門讓怪客 (cracker) 有機可乘!不過我們可以透過只允許特定 IP 連線來達到防護效果,以下將分別列出 Apache 以及 Nginx 的設定。

1. 環境設定

  • 作業系統:Debian 6 stable (squeeze)。
  • phpMyAdmin 路徑:/usr/share/phpmyadmin。
  • 允許 IP:192.168.1.1。
  • 允許 IP 範圍:192.168.2.1 ~ 192.168.2.254。

2. 設定檔修改

2.1. Apache

[ jonny@squeeze ~ ]
$ sudo vi /etc/phpmyadmin/apache.conf [Enter]
Alias /phpmyadmin/  "/usr/share/phpmyadmin/"
Alias /phpMyAdmin/  "/usr/share/phpmyadmin/"
<Directory "/usr/share/phpmyadmin">
        Options -Indexes FollowSymLinks
        AllowOverride All
        Order deny,allow
        Deny from all
        Allow from 192.168.1.1
        Allow from 192.168.2.0/24
        ErrorDocument 403 ok
        RewriteEngine On
</Directory>

# Windows 上的 AppServ 預設路徑為 "C:/AppServ/www/phpMyAdmin"。

2.2. Nginx

[ jonny@squeeze ~ ]
$ sudo vi /etc/nginx/nginx.conf [Enter]
server {
 location /phpmyadmin {
        allow 192.168.1.1;
        allow 192.168.2.0/24;
        deny all;
        root /usr/share/;
        index index.php index.html index.htm;
        location ~ ^/phpmyadmin/(.+\.php)$ {
            try_files $uri =404;
            root /usr/share/;
            #fastcgi_pass 127.0.0.1:9000;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
        }
        location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
            root /usr/share/;
        }
    }
    location /phpMyAdmin {
        rewrite ^/* /phpmyadmin last;
    }
}

3. 重啟服務

設定檔修改後需重新啟動該服務才會生效。
[ jonny@squeeze ~ ]
# Apache.
$ sudo /etc/init.d/apache2 restart [Enter]

# Nginx.
$ sudo /etc/init.d/nginx restart [Enter]

相關連結:
phpMyAdmin.net
.htaccess generator to Restrict/Allow by IP address

資料來源:
Apache 的 Order Allow, Deny 詳解 - IT客
HttpAccessModule - Nginx.org

留言

  1. allow 192.168.1.1;
    allow 192.168.2.0/24;

    nginx 設定的地方,少了結束符號 ; 。

    回覆刪除
    回覆
    1. 已在 Nginx 部份的這兩行後,補上;,感謝偵錯。<[_ _]>

      ```
      $ git diff
      diff --git a/nginx.conf b/nginx.conf
      index ec7427d..a70e055 100644
      --- a/nginx.conf
      +++ b/nginx.conf
      @@ -1,7 +1,7 @@
       server {
        location /phpmyadmin {
      -     allow 192.168.1.1
      -     allow 192.168.2.0/24
      +     allow 192.168.1.1;
      +     allow 192.168.2.0/24;
           deny all;
           root /usr/share/;
           index index.php index.html index.htm;
      ```

      刪除

張貼留言

喜歡這篇文章嗎?歡迎在底下留言讓凍仁知道。😉

Popular Articles

MySQL 語法匯整