如何在寶塔(bt)下搭建 wordpress 網(wǎng)站 + 免費(fèi) waf 防火墻

寶塔運(yùn)維工具[1]乳怎,配合 wordpress 可以快速創(chuàng)建網(wǎng)站芹橡。當(dāng)我們快速完成網(wǎng)站搭建并且上線后,驚訝的發(fā)現(xiàn)有勾,網(wǎng)絡(luò)上總隱藏著壞人疹启,時時刻刻想害我的網(wǎng)站。此時就需要用到網(wǎng)絡(luò)應(yīng)用防火墻 waf蔼卡,因為寶塔自帶 waf 是收費(fèi)的喊崖,作為小網(wǎng)站,用起來并不劃算。所以得尋找可用的免費(fèi) waf [2]荤懂,對比之后茁裙,最后選擇了雷池 waf 社區(qū)版 [3],原因很簡單势誊,社區(qū)版對應(yīng)的就是商業(yè)版呜达,背靠大樹好乘涼谣蠢。

下面是寶塔 bt + 免費(fèi) waf 的搭建過程

環(huán)境準(zhǔn)備

使用騰訊云輕應(yīng)用服務(wù)器[4]創(chuàng)建服務(wù)實例粟耻,操作系統(tǒng)選擇 "WordPress"

image.png

設(shè)置騰訊云防火墻開放端口,添加 3 個端口

端口 服務(wù) 用途
8888 寶塔面板 進(jìn)入寶塔的管理界面眉踱,管理所有服務(wù)挤忙,必開
9443 雷池社區(qū)面板 管理雷池社區(qū)防火墻的后臺,必開
8001 業(yè)務(wù)服務(wù) 因為寶塔占用了 80 端口谈喳,waf 需要占用其他端口代理業(yè)務(wù)服務(wù)册烈,非必開

注意:8001 端口是為了測試用,正式服務(wù)上線后可以使用 https 協(xié)議的 443 端口婿禽,然后就可以關(guān)掉這個測試端口了赏僧,并且 8001 也可以更換為其他端口,這里僅測試用扭倾。

image.png

安裝成功后淀零,在 “應(yīng)用管理” 面板可以看到應(yīng)用信息


image.png

根據(jù) 寶塔 Linux 應(yīng)用的提示,ssh 鏈接到服務(wù)器膛壹,獲取登錄寶塔的登錄賬號密碼

image.png

然后登錄寶塔管理后端驾中,環(huán)境配置成功。

image.png

在寶塔中添加社區(qū)版 waf

因為需要用到寶塔的云服務(wù)功能模聋,這里推薦登錄寶塔賬號肩民。

image.png

雷池 waf 使用 docker 運(yùn)行,并且官網(wǎng)提供了一鍵安裝腳本链方,但是想要在寶塔中管理持痰,還需要進(jìn)行一些配置。

寶塔安裝 docker

image.png

安裝完成

image.png

社區(qū)版 waf 是通過 docker compose 運(yùn)行的祟蚀,在寶塔中添加 compose 模板

image.png

然后關(guān)鍵的 compose.yaml 文件工窍,下面是手動修改過的 1.10 版本 compose 配置文件

networks:
  safeline-ce:
    name: safeline-ce
    driver: bridge
    ipam:
      driver: default
      config:
      - gateway: 169.254.0.1
        subnet: 169.254.0.0/24
    driver_opts:
      com.docker.network.bridge.name: safeline-ce

services:
  postgres:
    container_name: safeline-postgres
    restart: always
    image: postgres:15.2
    volumes:
    - /srv/safeline-ce/resources/postgres/data:/var/lib/postgresql/data
    - /etc/localtime:/etc/localtime:ro
    environment:
    - POSTGRES_USER=safeline-ce
    - POSTGRES_PASSWORD=SafeLine2023!
    networks:
      safeline-ce:
        ipv4_address: 169.254.0.2
    cap_drop:
    - net_raw
    command: [postgres, -c, max_connections=200]
  redis:
    container_name: safeline-redis
    restart: always
    image: redis:7.0.11
    volumes:
      - /srv/safeline-ce/resources/redis/data:/data
      - /etc/localtime:/etc/localtime:ro
    command: redis-server --appendonly yes --requirepass  SafeLine2023!
    networks:
      safeline-ce:
        ipv4_address: 169.254.0.3
    cap_drop:
      - net_raw
    sysctls:
      net.core.somaxconn: "511"
  management:
    container_name: safeline-mgt-api
    restart: always
    image: chaitin/safeline-mgt-api:1.10.0
    volumes:
    - /srv/safeline-ce/resources/management:/resources/management
    - /srv/safeline-ce/resources/nginx:/resources/nginx
    - /srv/safeline-ce/logs:/logs
    - /etc/localtime:/etc/localtime:ro
    ports:
    - ${MGT_PORT:-9443}:1443
    environment:
    - MANAGEMENT_RESOURCES_DIR=/resources/management
    - NGINX_RESOURCES_DIR=/resources/nginx
    - DATABASE_URL=postgres://safeline-ce:SafeLine2023!@127.0.0.1/safeline-ce
    - MANAGEMENT_LOGS_DIR=/logs/management
    networks:
      safeline-ce:
        ipv4_address: 169.254.0.4
    cap_drop:
    - net_raw
  detector:
    container_name: safeline-detector
    restart: always
    image: chaitin/safeline-detector:1.10.0
    volumes:
    - /srv/safeline-ce/resources/detector:/resources/detector
    - /srv/safeline-ce/logs/detector:/logs/detector
    - /etc/localtime:/etc/localtime:ro
    environment:
    - LOG_DIR=/logs/detector
    networks:
      safeline-ce:
        ipv4_address: 169.254.0.5
    cap_drop:
    - net_raw
  mario:
    container_name: safeline-mario
    restart: always
    image: chaitin/safeline-mario:1.10.0
    volumes:
    - /srv/safeline-ce/resources/mario:/resources/mario
    - /srv/safeline-ce/logs/mario:/logs/mario
    - /etc/localtime:/etc/localtime:ro
    environment:
    - LOG_DIR=/logs/mario
    - GOGC=100
    - DATABASE_URL=postgres://safeline-ce:SafeLine2023!@safeline-postgres/safeline-ce
    - REDIS_URL=redis://:SafeLine2023!@safeline-redis:6379/0
    networks:
      safeline-ce:
        ipv4_address: 169.254.0.6
    cap_drop:
    - net_raw
  tengine:
    container_name: safeline-tengine
    restart: always
    image: chaitin/safeline-tengine:1.10.0
    volumes:
    - /srv/safeline-ce/resources/nginx:/etc/nginx
    - /srv/safeline-ce/resources/management:/resources/management
    - /srv/safeline-ce/resources/detector:/resources/detector
    - /srv/safeline-ce/logs/nginx:/var/log/nginx
    - /etc/localtime:/etc/localtime:ro
    - /srv/safeline-ce/resources/cache:/usr/local/nginx/cache
    - /etc/resolv.conf:/etc/resolv.conf
    environment:
    - MGT_ADDR=169.254.0.4:9002
    ulimits:
      nofile: 131072
    network_mode: host

拷貝文件到 “添加 yaml 模板” 中,并添加模板暂题。

image.png

在寶塔面板中移剪,切換到 compose ,創(chuàng)建新的 compose 項目

image.png

點擊“添加”后薪者,需要幾分鐘時間準(zhǔn)備運(yùn)行纵苛。成功后,切換到 “容器” 面板,可以看到 waf 相關(guān)的 6 個容器都在運(yùn)行狀態(tài)

image.png

此時可以訪問 9443 端口攻人,就可以查看 waf 管理后臺了取试。

注意:雷池 waf 使用了自簽名證書來支持 https,所以第一次訪問時需要手動 “允許” 一次才可以怀吻。

image.png

然后可以登錄 waf 的登錄瞬浓,雷池社區(qū)采取了比較特殊的登錄方式: OTP 驗證碼登錄,參考官網(wǎng)文檔[5]蓬坡。綁定完 OTP 后再登錄猿棉,成功后可以看到這個界面

image.png

配置 waf

那么,服務(wù)都準(zhǔn)備好了屑咳,下面如何給業(yè)務(wù)服務(wù)套上 waf萨赁。作為中小網(wǎng)站的維護(hù)人員,我并不想學(xué)習(xí) waf兆龙,只想簡單使用杖爽,因此我僅僅了解 waf 的幾個關(guān)鍵點:

  1. waf 是攔截在 wordpress 網(wǎng)站之前的,waf 如果掛了紫皇,網(wǎng)站就掛了
  2. 用戶訪問的其實是 waf慰安,如果訪問沒有風(fēng)險,waf 才會轉(zhuǎn)發(fā)給業(yè)務(wù)服務(wù)
  3. waf 也要監(jiān)聽端口聪铺,并且不能和網(wǎng)站監(jiān)聽同一個端口化焕,這是操作系統(tǒng)的限制

所以應(yīng)該是,waf 應(yīng)該監(jiān)聽 80/443 這樣的端口计寇,然后轉(zhuǎn)發(fā)給網(wǎng)站監(jiān)聽的 8000/8080 這樣的端口锣杂。

配置 waf 前,先測試我們的網(wǎng)站原來什么樣

image.png

監(jiān)聽 80 端口番宁,可以正常訪問元莫。下面配置 waf,打開 waf 后端

image.png

創(chuàng)建成功后蝶押,可以看到防護(hù)站點列表中出現(xiàn)一條記錄踱蠢,waf 可以配置多個站點,但我們只有一個網(wǎng)站棋电,所以沒有設(shè)置 “域名”茎截,就表示所以訪問都接受,會轉(zhuǎn)發(fā)給網(wǎng)站赶盔。此時創(chuàng)建的 waf 防護(hù)站點運(yùn)行模式是:防護(hù)模式企锌。

image.png

注意:waf 監(jiān)聽了 8001 端口,雖然我們已經(jīng)在騰訊云的后臺防火墻中開放了 8001 端口于未,但那是云平臺的防火墻撕攒,在寶塔中添加系統(tǒng)防火墻的允許規(guī)則陡鹃,否則 8001 端口是訪問不了的。

image.png

現(xiàn)在可以通過 8001 來訪問網(wǎng)站了

image.png

此時我們的網(wǎng)站已經(jīng)在 waf 的保護(hù)之下了抖坪,來檢測一下效果萍鲸,訪問 /shell.php 路徑觸發(fā)一次 waf 的防護(hù)功能

image.png

嘖嘖嘖,這個訪問看起來太危險了擦俐,被 waf 攔截了〖挂酰現(xiàn)在回到 waf 管理后臺,在 “檢測日志” 面板下蚯瞧,可以看到攔截日志列表嘿期,其中包含一條剛剛被攔截的日志,點擊 “詳情” 查看状知,會看到攔截原因和訪問細(xì)節(jié)秽五,現(xiàn)在是不是有了一種練成金鐘罩的感覺孽查。

image.png

優(yōu)化訪問端口

此時的我們已經(jīng)成功配置了 waf饥悴,但訪問路徑中包含了 8001 這個端口,這可不行盲再。是否可以不顯示這個端口號呢西设?根據(jù) web 訪問的規(guī)則,有兩種情況是不用顯示端口號的

  1. http 訪問 80 端口
  2. https 訪問 443 端口

因為 80 端口已經(jīng)被寶塔占用答朋,并且出于安全的考慮贷揽,網(wǎng)站也不建議使用 http 直接訪問。好在寶塔沒有占用 443 端口梦碗,那么我們可以用 waf 來監(jiān)聽 443 端口并轉(zhuǎn)發(fā)給業(yè)務(wù)服務(wù)禽绪。443 端口對應(yīng)的 https 協(xié)議需要證書,關(guān)于如何獲取證書這里不展開解釋洪规。我們來繼續(xù)修改 waf 的配置印屁,將端改為 443 并添加證書。

image.png

這里一定要夸獎一下 waf 非常非常貼心的一個功能:自動生成證書斩例。知道你自己搞證書不方便雄人,反正流程是固定的,waf 直接幫你做了念赶。

image.png

現(xiàn)在重新訪問一下我們的網(wǎng)站础钠,看到結(jié)果了嗎,不再顯示端口號了叉谜,并且是 https旗吁。雖然是紅色警告,但換成真證書以后就沒問題了停局, 或者也可以就用自簽名證書也問題不大很钓。

image.png

收尾

當(dāng)前網(wǎng)站已經(jīng)出于 waf 的保護(hù)之下驻民,現(xiàn)在可以把不安全的端口關(guān)掉了。

image.png

關(guān)于 waf 升級

目前 waf 項目還在不斷地更新迭代當(dāng)中履怯,官方推薦 cli 模式下的手動升級回还,在寶塔下這是不行的。waf 是通過在寶塔下創(chuàng)建 compose 模板來實現(xiàn)管理的叹洲,所以升級時需要編寫新的 compose 文件柠硕。關(guān)于如何而升級 waf ,以后升級時再單獨(dú)記錄一篇文章运提。


  1. https://www.bt.cn/new/index.html ?

  2. https://zhuanlan.zhihu.com/p/638489965 ?

  3. https://waf-ce.chaitin.cn/ ?

  4. https://www.tencentcloud.com/zh/products/lighthouse ?

  5. https://waf-ce.chaitin.cn/posts/guide_login ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝗柔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子民泵,更是在濱河造成了極大的恐慌癣丧,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栈妆,死亡現(xiàn)場離奇詭異胁编,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鳞尔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進(jìn)店門嬉橙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寥假,你說我怎么就攤上這事市框。” “怎么了糕韧?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵枫振,是天一觀的道長扮惦。 經(jīng)常有香客問我召边,道長,這世上最難降的妖魔是什么颠锉? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任乒疏,我火速辦了婚禮额衙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怕吴。我一直安慰自己窍侧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布转绷。 她就那樣靜靜地躺著伟件,像睡著了一般。 火紅的嫁衣襯著肌膚如雪议经。 梳的紋絲不亂的頭發(fā)上斧账,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天谴返,我揣著相機(jī)與錄音,去河邊找鬼咧织。 笑死嗓袱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的习绢。 我是一名探鬼主播渠抹,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闪萄!你這毒婦竟也來了梧却?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤败去,失蹤者是張志新(化名)和其女友劉穎放航,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體圆裕,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡广鳍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了葫辐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搜锰。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖耿战,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情焊傅,我是刑警寧澤剂陡,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站狐胎,受9級特大地震影響鸭栖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜握巢,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一晕鹊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暴浦,春花似錦溅话、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至独撇,卻和暖如春屑墨,著一層夾襖步出監(jiān)牢的瞬間躁锁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工卵史, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留战转,地道東北人。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓以躯,卻偏偏與公主長得像匣吊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子寸潦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容