APF(Advanced Policy Firewall) 설치 및 구성

최초 게시: 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 Press 'i' to enter Insert Mode

중요 구성 변수

콘솔:
# Set firewall cronjob (devel mode)
# 1 = enabled / 0 = disabled

DEVEL_MODE="1" 

DEVEL_MODE - 이 변수는 5분마다 현재 구성을 정리하도록 APF에 지시합니다. 그러면 새 구성을 테스트하고 사용자가 잠겨 서버에 접근하지 못할 때 도움이 됩니다. 작업 구성을 작성한 후에 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_CPORTS, IG_UDP_CPORTSIG_ICMP_TYPES - 서버에 수신 허용되는 포트와 트래픽의 유형을 나열합니다. 허용하려는 포트 및 유형만 나열하고 불필요한 항목은 제거하도록 하십시오.

인용:
Ingress
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_CPORTS, EG_UDP_CPORTSEG_ICMP_TYPES - 아웃바운드 트래픽 처리를 제외하고 위의 변수와 같습니다.

인용:
Egress
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를 autostart로 설정

콘솔:
chkconfig --level 2345 apf on