安裝及設置進階原則防火牆 (APF)

最初由 http://www.rfxnetworks.com/apf.php 張貼
APF 是為了易於使用及設置而設計的原則型 iptables 防火牆系統。它會採用特性子集,以同時滿足資深 Linux 使用者和新手。以 tar.gz 格式和 RPM 格式包裝,使得 APF 非常適合於部署在許多以 Linux 為基礎的伺服器環境。

這個作法將說明如何安裝與設置 Linux 系統的「進階原則防火牆」。此外,也將為每一個控制畫面(CPanel 及 Plesk)提供範例 conf.apf 檔案;不過,即將進行的第一項作業為安裝

安裝 APF
請注意,您將需要以 'root' 身分或具有適當專用權的使用者身分登入 SSH,才能完成安裝。
步驟 1:準備安裝

主控台:
cd /usr/local/src/
wget http://www.rfxnetworks.com/downloads/apf-current.tar.gz
tar -zxvf apf-current.tar.gz; cd apf-*

步驟 2:安裝

主控台:
sh ./install.sh
成功安裝
安裝 APF 0.9.6-1:已完成。

安裝詳細資料:
安裝路徑:/etc/apf/
設置路徑:/etc/apf/conf.apf
可執行路徑:/usr/local/sbin/apf
AntiDos 安裝路徑:/etc/apf/ad/
AntiDos 設置路徑:/etc/apf/ad/conf.antidos
DShield 用戶端剖析器:/etc/apf/extras/dshield/

其他詳細資料:
接聽 TCP 連接埠:1,21,25,53,80,110,111,143,199,443,465,631,993,995,2082,2083,2084,2086,2087,2095,2096,3306,6666,14534,51234
接聽 UDP 連接埠:53,161,631,8767,32769
附註:這些連接埠不會自動設置;呈現的這些連接埠僅供參考。您必須手動設置所有連接埠選項。

如需安裝疑難排解,請向下捲動至貼文底端

設置 APF
步驟 1:開啟設置檔 conf.apf
將在這個作法中使用 vi。請參閱 Vim 的基本手冊。您將需要登入討論區才能檢視此資訊。若要變更您的討論區密碼:請登入入口網站,並透過 https://control.softlayer.com/account/users,選取您的使用者,並在這裡更新您的「討論區密碼」。

主控台:
cd /etc/apf; vi conf.apf
i 按 'i' 以進入「插入模式」

重要設置變數

主控台:
# Set firewall cronjob (devel mode)
# 1 = enabled / 0 = disabled

DEVEL_MODE="1" 

DEVEL_MODE - 這個變數將告訴 APF 每 5 分鐘清除現行設置一次。當您測試新設置,並發現自己被伺服器鎖定時,這樣做可幫助您。請記住,在建立了有效的設置之後,請設為 0

主控台:
# Untrusted Network interface(s); all traffic on defined interface will be
# subject to all firewall rules. This should be your internet exposed
# interfaces. Only one interface is accepted for each value.
# NOTE: The interfacing structure is being worked towards support of MASQ/NAT

IFACE_IN="eth0"
IFACE_OUT="eth0" 

IFACE_INIFACE_OUT - 依預設,這些會設為 eth0;不過,SoftLayer 已將我們的 eth0 設為私有網路,並將我們的公用網路設為 eth0。未設置這些變數可能導致沒有網路連線功能。請將這兩個變數設為 eth1

主控台:
# Trusted Network interface(s); all traffic on defined interface(s) will by-pass
# ALL firewall rules, format is white space or comma seperated list.

IFACE_TRUSTED="" 

IFACE_TRUSTED - 這個變數告訴防火牆信任列出的介面。在我們的實例中,我們信任我們的 eth0。請設為 eth0

主控台:
##
# [Ingress]
# Configure ingress (inbound) accepted services. This is an optional
# feature; services and customized entries may be made directly to an ip's
# virtual net file located in the vnet/ directory. Format is comma seperated
# and underscore seperator for ranges.
#
# Example:
# IG_TCP_CPORTS="21,22,25,53,80,443,110,143,6000_7000"
# IG_UDP_CPORTS="20,21,53,123"
# IG_ICMP_TYPES="3,5,11,0,30,8"
##

# Common ingress (inbound) TCP ports


IG_TCP_CPORTS="22"

# Common ingress (inbound) UDP ports
IG_UDP_CPORTS=""

# Common ICMP (inbound) types
# 'internals/icmp.types' for type definition; 'all' is wildcard for any

IG_ICMP_TYPES="3,5,11,0,30,8" 

IG_TCP_CPORTSIG_UDP_CPORTSIG_ICMP_TYPES - 列出容許由伺服器接收之資料流量的連接埠及類型。請記住,只列出您想要容許的連接埠及類型;移除不需要的項目。

引文:
傳入
Cpanel 的連接埠及類型
主控台:
##
# [Ingress]
# Configure ingress (inbound) accepted services. This is an optional
# feature; services and customized entries may be made directly to an ip's
# virtual net file located in the vnet/ directory. Format is comma seperated
# and underscore seperator for ranges.
#
# Example:
# IG_TCP_CPORTS="21,22,25,53,80,443,110,143,6000_7000"
# IG_UDP_CPORTS="20,21,53,123"
# IG_ICMP_TYPES="3,5,11,0,30,8"
##

# Common ingress (inbound) TCP ports


IG_TCP_CPORTS="20,21,22,25,26,53,80,110,143,161,443,465,623,993,995,2082,2083,2086,2087,2095,2096,3306,3389,6666"

# Common ingress (inbound) UDP ports
IG_UDP_CPORTS="21,53,161,465,623,873"

# Common ICMP (inbound) types
# 'internals/icmp.types' for type definition; 'all' is wildcard for any

IG_ICMP_TYPES="3,5,11,0,30,8" 

Plesk 的連接埠及類型

主控台:
##
# [Ingress]
# Configure ingress (inbound) accepted services. This is an optional
# feature; services and customized entries may be made directly to an ip's
# virtual net file located in the vnet/ directory. Format is comma seperated
# and underscore seperator for ranges.
#
# Example:
# IG_TCP_CPORTS="21,22,25,53,80,443,110,143,6000_7000"
# IG_UDP_CPORTS="20,21,53,123"
# IG_ICMP_TYPES="3,5,11,0,30,8"
##

# Common ingress (inbound) TCP ports


IG_TCP_CPORTS="20,21,22,25,26,53,80,110,143,161,443,465,623,993,995,3389,8443"

# Common ingress (inbound) UDP ports
IG_UDP_CPORTS="21,53,161,465,623,873"

# Common ICMP (inbound) types
# 'internals/icmp.types' for type definition; 'all' is wildcard for any

IG_ICMP_TYPES="3,5,11,0,30,8" 

主控台:
##
# [Egress]
# Configure egress (outbound) accepted services. This is an optional
# feature; services and customized entries may be made directly to an ip's
# virtual net file located in the vnet/ directory.
#
# Egress filtering is not required but makes your firewall setup complete
# by providing full inbound and outbound packet filtering. You can toggle
# egress filtering on or off with the EGF variable. Format is comma seperated
# and underscore seperator for ranges.
#
# Example:
# EG_TCP_CPORTS="21,25,80,443,43"
# EG_UDP_CPORTS="20,21,53"
# EG_ICMP_TYPES="all"
##

# Egress filtering [0 = Disabled / 1 = Enabled]


EGF="0"

# Common egress (outbound) TCP ports
EG_TCP_CPORTS="21,25,80,443"

# Common egress (outbound) UDP ports
EG_UDP_CPORTS="20,21,53"

# Common ICMP egress (outbound) types
# 'internals/icmp.types' for type definition; 'all' is wildcard for any

EG_ICMP_TYPES="all" 

EG_TCP_CPORTSEG_UDP_CPORTSEG_ICMP_TYPES - 與上述變數相同,但處理出連接埠資料流量。

引文:
傳出
CPanel 的連接埠及類型
主控台:
##
# [Egress]
# Configure egress (outbound) accepted services. This is an optional
# feature; services and customized entries may be made directly to an ip's
# virtual net file located in the vnet/ directory.
#
# Egress filtering is not required but makes your firewall setup complete
# by providing full inbound and outbound packet filtering. You can toggle
# egress filtering on or off with the EGF variable. Format is comma seperated
# and underscore seperator for ranges.
#
# Example:
# EG_TCP_CPORTS="21,25,80,443,43"
# EG_UDP_CPORTS="20,21,53"
# EG_ICMP_TYPES="all"
##

# Egress filtering [0 = Disabled / 1 = Enabled]


EGF="1"

# Common egress (outbound) TCP ports
EG_TCP_CPORTS="21,22,25,26,27,37,43,53,80,110,113,161,443,465,623,873,2089,3389"

# Common egress (outbound) UDP ports
EG_UDP_CPORTS="20,21,53,161,465,623,873"

# Common ICMP egress (outbound) types
# 'internals/icmp.types' for type definition; 'all' is wildcard for any

EG_ICMP_TYPES="all" 

Plesk 的連接埠及類型

主控台:
##
# [Egress]
# Configure egress (outbound) accepted services. This is an optional
# feature; services and customized entries may be made directly to an ip's
# virtual net file located in the vnet/ directory.
#
# Egress filtering is not required but makes your firewall setup complete
# by providing full inbound and outbound packet filtering. You can toggle
# egress filtering on or off with the EGF variable. Format is comma seperated
# and underscore seperator for ranges.
#
# Example:
# EG_TCP_CPORTS="21,25,80,443,43"
# EG_UDP_CPORTS="20,21,53"
# EG_ICMP_TYPES="all"
##

# Egress filtering [0 = Disabled / 1 = Enabled]


EGF="1"

# Common egress (outbound) TCP ports
EG_TCP_CPORTS="21,22,25,26,27,37,43,53,80,110,113,161,443,465,623,873,3389"

# Common egress (outbound) UDP ports
EG_UDP_CPORTS="20,21,53,161,465,623,873"

# Common ICMP egress (outbound) types
# 'internals/icmp.types' for type definition; 'all' is wildcard for any

EG_ICMP_TYPES="all" 

主控台:
# DShield.org's "block" list of top networks that have exhibited
# suspicious activity. [0 = Disabled / 1 = Enabled]

USE_DS="0" 

USE_DS - 使用 dshield.org 的黑名單來保護您的伺服器。請設為 1

步驟 2:儲存設置(在 vim 中時)

主控台:

:wq

步驟 3:測試設置

主控台:
apf -r
Development mode enabled!; firewall will flush every 5 minutes.

請再次登入 SSH 來測試您的伺服器。請造訪您的控制台、網站、ftp 等等... 請視需要進行調整。

步驟 4:將 DEVEL_MODE 切換為 0 並執行 apf -r

步驟 5:將 APF 設為自動啟動

主控台:
chkconfig --level 2345 apf on