更新:升級 Ubuntu的 20.04 LTS 後,csf 無法正常工作了,提示找不到 iptables:
1 |
Testing ip_tables/iptable_filter...open3: exec of /sbin/iptables -I OUTPUT -p tcp --dport 9999 -j ACCEPT failed: No such file or directory at /usr/local/csf/bin/csftest.pl line 144. |
這是由於 Ubuntu的 20.04 LTS 更改了 iptables的 相關命令位置導致的,csf 的腳本並沒有及時更新。
1 |
/sbin/iptables → /usr/sbin/iptables |
要解決這個問題,我們可以到 /等等/CSF/CSF.CONF 配置文件,在這個文件靠近末尾的位置,有一個 # 二元 地點 相關設定,這裡我們可以看到前6個配置地址還是舊的:
1 2 3 4 5 6 7 8 |
# Binary locations IPTABLES = "/sbin/iptables" IPTABLES_SAVE = "/sbin/iptables-save" IPTABLES_RESTORE = "/sbin/iptables-restore" IP6TABLES = "/sbin/ip6tables" IP6TABLES_SAVE = "/sbin/ip6tables-save" IP6TABLES_RESTORE = "/sbin/ip6tables-restore" …… |
更改為新地址:
1 2 3 4 5 6 7 |
# Binary locations IPTABLES = "/usr/sbin/iptables" IPTABLES_SAVE = "/usr/sbin/iptables-save" IPTABLES_RESTORE = "/usr/sbin/iptables-restore" IP6TABLES = "/usr/sbin/ip6tables" IP6TABLES_SAVE = "/usr/sbin/ip6tables-save" IP6TABLES_RESTORE = "/usr/sbin/ip6tables-restore" |
這樣, CSF - - [R 就可以正常生成配置了,不過,缺點是 perl的 /USR/本地/CSF/箱子/csftest.PL 依舊是會報錯的,但現在 csf 本身已經成功啟動了。
之前我寫過一篇文章,購買了VPS之後你應該做足的安全措施,這裡邊介紹瞭如何安裝 CSF 防火牆,其實很簡單就幾條命令,不過,由於當時我的無知,導致實際上csf 防火牆並沒有真正生效,原因是 csf 和 ufw 一樣都是 iptables 腳本,它們處在同一層級,是互相衝突的。
所以,在配置 CSF 防火牆時,你應該先執行命令 ufw 禁用 來關閉 ufw。
然後,我們安裝 csf 防火牆:
1 2 3 4 |
wget https://download.configserver.com/csf.tgz tar -zxvf csf.tgz cd csf sh install.sh |
安裝完成後,安裝需要的環境:
1 |
apt install libwww-perl perl sendmail |
ok之後,執行命令來檢查防火牆的狀態: perl的 /USR/本地/CSF/箱子/csftest.PL ,如果輸出如下,那麼防火牆的執行應該就沒什麼問題了:
首先我們要做最基本的配置,來配置 csf 的放行端口,千萬記得不能把 22 端口給斷了,不然你就再見吧。
當然,csf 一旦安裝好,是默認放行常見端口的,所以,我們做的只是去掉不用的。另外,csf 默認工作在測試模式,這樣的話如果你真把自己關在外面了,沒關係,五分鐘後規則會清空的。
下面我們來編輯 我們 /等等/CSF/CSF.CONF :
默認情況下,放行的端口如下:
1 2 3 4 5 6 7 |
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995" TCP_OUT = "20,21,22,25,53,80,110,113,443" UDP_IN = "20,21,53" UDP_OUT = "20,21,53,113,123" |
這裡我根據我的需要,做了精簡:
1 2 3 4 5 6 7 8 9 10 11 12 |
# Allow incoming TCP ports TCP_IN = "22,80,143,53,443" # Allow outgoing TCP ports TCP_OUT = "22,25,53,80,110,113,443,587,993,995" # Allow incoming UDP ports UDP_IN = "53" # Allow outgoing UDP ports # To allow outgoing traceroute add 33434:33523 to this list UDP_OUT = "53,113,123,33434:33523" |
當然,我的服務器還支持 IPv6,所以需要繼續往下翻,找到 IPv6 的配置,再來一遍:
1 2 3 4 5 6 7 8 9 10 11 12 |
# Allow incoming IPv6 TCP ports TCP6_IN = "22,80,143,53,443" # Allow outgoing IPv6 TCP ports TCP6_OUT = "22,25,53,80,110,113,443,587,993,995" # Allow incoming IPv6 UDP ports UDP6_IN = "53" # Allow outgoing IPv6 UDP ports # To allow outgoing traceroute add 33434:33523 to this list UDP6_OUT = "53,113,123,33434:33523" |
然後是添加防禦規則,阻止日常少量的 ddos,當然,量大了的話還得靠硬件了對吧?
找到字段 PORTFLOOD ,做如下規則:
1 |
PORTFLOOD = "22;tcp;5;300,80;tcp;20;5,443;tcp;20;5" |
這裡規則是說分別對端口 22,80,443做策略(以IP為單位):
- 如果 22 端口某 IP 在 300 秒內發起 5 個以上鍊接,就 ban;
- 如果 80 或 443 端口某 IP 在 5 秒內發起 20 個以上鍊接,就 ban。
ban 的時間默認是 1800 秒。
然後,csf 還有個功能是在 ban 了 IP 之後發郵件通知你,我們對如下字段做修改,加入自己的郵件地址:
1 |
LF_ALERT_TO = "your-email@gmail.com" |
由於 lfd 還會發送可疑進程監控,如果你覺得煩,可以提前把你的進程加入白名單,編輯 /等等/CSF/CSF.安全 ,按照格式在末尾補充就可以了,比如我服務器跑了 nginx,PHP,我知道這不是可疑進程,那麼就這樣寫:
1 2 |
exe:/usr/sbin/nginx exe:/usr/sbin/php-fpm7.0 |
這樣,我們的防火牆就配置好了,保存好配置後就可以嘗試重啟一波:
記得先用檢測命令查看配置是否正確: perl的 /USR/本地/CSF/箱子/csftest.PL
然後使用命令 CSF - - [R 來重啟防火牆,如果沒什麼致命問題,那說明防火牆正常工作了。至於這句:
1 |
*WARNING* RESTRICT_SYSLOG is disabled. See SECURITY WARNING in /etc/csf/csf.conf. |
就讓他 殘 即可。
還有一個問題你可能會遇到,就是提示你 lfd 啟動但崩潰了,這是正常的,在測試模式, lfd 不啟動。
重新編輯 /等等/CSF/CSF.CONF 配置文件,在第一行,把 1 改為 0:
1 |
TESTING = "0" |
保存後重啟防火牆 CSF - - [R 這時候防火牆就已經正常運行了。
使用命令啟動 csf 和附帶的 lfd:
1 2 |
service csf start service lfd start |
通過查看 /是/日誌/絲氨酸.日誌 可以看到 csf 防火牆的所有行為,比如 ban 了哪個 IP 之類的。
如果要添加白名單,那麼就編輯 /等等/CSF/CSF.allow ,ip地址一行一個;
如果要手動添加黑名單,那麼就編輯 /等等/CSF/CSF.deny ,也是一行一個,不過,這裡邊也會有規則自動添加的數據;
另外,你也可以添加忽略列表,列表中的 IP 地址不會被規則判斷,但如果在黑名單中也存在,就會被阻止: /等等/CSF/CSF.忽視
這樣,你的服務器應該就更堅固了 :)
額外
另外說一下,如果你嫌郵件通知煩,可以在 csf.conf 中搜索所有 _EMAIL_ALERT 結尾的字段,將值從 "1" 改為 "0" ,有好幾個,記得善用搜索。
參考文獻
linux csf 防火牆 防止少量的ddos cc攻擊很有效
如何禁用發送電子郵件: LFD服務器上: 根據用戶運行的可疑進程
本文由 落格博客 原創撰寫:落格博客 » 使用 csf 防火牆來有效阻止小規模 DDOS
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/2873.html
lfd.service – ConfigServer防火牆 & 安全 – 絲氨酸
加載: 裝 (/usr / lib中/ systemd /系統/ lfd.service; 啟用; 廠商預置: 啟用)
活性: 活性 (賽跑) 由於週五 2018-02-02 22:15:11 CST; 4ŝ前
處理: 28943 ExecStart = / usr / sbin目錄/ LFD (代碼=退出, 狀態= 0 / SUCCESS)
主要PID: 28951 (絲氨酸 – 睡眠)
任務: 1 (limit: 4915)
CGROUP: /system.slice / lfd.service
└─28951絲氨酸 – 睡眠
二月 02 22:15:10 VPS systemd[1]: 停止ConfigServer防火牆 & 安全 – 絲氨酸…
二月 02 22:15:10 VPS systemd[1]: lfd.service: 主要工藝退出, 代碼=打死, 狀態= 9 / KILL
二月 02 22:15:10 VPS systemd[1]: 停止ConfigServer防火牆 & 安全 – 絲氨酸.
二月 02 22:15:10 VPS systemd[1]: lfd.service: 單位進入故障狀態.
二月 02 22:15:10 VPS systemd[1]: lfd.service: 與結果“信號”失敗.
二月 02 22:15:10 VPS systemd[1]: 啟動ConfigServer防火牆 & 安全 – 絲氨酸…
二月 02 22:15:11 VPS systemd[1]: 入門ConfigServer防火牆 & 安全 – 絲氨酸.
請幫忙看看這是什麼問題啊,怎麼解決,謝謝!
我以為你被DDoS了/(ㄒoㄒ)/~~
是被 ddos 了,重啟了一波好了。可能是我現在服務器性能有點不夠,所以稍微一打就掉了。