Installing APF Firewall for cPanel

Smitha Soman

By Smitha Soman,

The whole process of securing a Server or network is quite extensive. I'm discussing just one major aspect of Security here - Firewalls. Specifically my topic is about APF firewall.

I'm dividing this article into 2 sections :-
The first section is for amateurs. The second section is strictly for experts, at least for those who are more well versed with the intricacies of coding, and would like to understand a bit more about what's happening.

Installing APF Firewall for cPanel

In this section, I would like to enumerate the steps to install APF firewall for CPanel. This would help any person who decides to install APF firewall by themselves, and is maybe dreading that decision, to do so in just 13 EASY-TO-DO steps.

First of all, like all tasks, there's a requirement list here too :
  • Linux Operating System
  • Root access to your system
  • PERL support
  • IP Table Support

When you ensure that you have everything on this check list, you can start the process of installation. I have listed the steps of code you have to use as well.

Well... Here goes....

1) Login as root to your system

2) Download the APF version (current) to your system
bash# wget

3) Now you have to extract the tar file
bash# tar -zxf apf-current.tar.gz

4) Go to the APF directory
bash# cd apf-0.9.3_3

5) Run the code for installation
bash# ./ 

You will be alerted when the installation is complete.

Install path : /etc/apf
Config path : /etc/apf/conf.apf
Executable path : /usr/local/sbin/apf

6) Modify the APF config file according to your user defined requirements.

bash# vi /etc/apf/conf.apf

(Hit i to enter the INSERT mode)

7) Add in the ports you want to open for inbound (INGRES).

	# Common ingress (inbound) TCP ports
		IG_TCP_CPORTS=" 20,21,22,25,26,53,80,110,143,443,465,993,995,2082,
		# Common ingress (inbound) UDP ports

		# Common ICMP (inbound) types

The variables mentioned above are already present in the config file. You can customize the ports.

8) You have to particularly instruct APF to monitor outgoing (EGRESS) ports as well.
Change the line: EGF="0" to EGF="1"

9) Specify the outbound ports to monitor.

		# Common egress (outbound) TCP ports
		# Common egress (outbound) UDP ports
		# Common ICMP (outbound) types

10) Specify the ports you want to block, if any.
- The allow and deny trust files are located at:
You just have to list the ip's that you specifically wish to allow or deny in the respective files.

- The format of these files are line-separated addresses, IP masking is supported.


Save and exit - hit 'esc' :wq 'enter'

11) Start APF
bash# /usr/local/sbin/apf -s 

If everything goes as planned, you'll go back to the command line.

12) If all goes well, edit the config file and change the developer mode to 0

bash# vi /etc/apf/conf.apf 

(Hit i to enter insert mode)

Change DEVM="1" to DEVM="0"

Save and quit - Hit 'esc' :wq 'enter'

13) Restart APF

bash# /usr/local/sbin/apf -r 

Great news !!! APF is now installed and monitoring your system.

Tweaking APF

This section is strictly for professionals who may wish to try their hand at tweaking the APF settings to meet their requirements.

Like I've already mentioned before, here are the major paths to take note of -

Install path : /etc/apf
Config path : /etc/apf/conf.apf
Executable path : /usr/local/sbin/apf

Here are a few more pointers that you could use to further customize your APF firewall.

Usually APF is started at boot time.
You can run it at run time like this -

bash# chkconfig --add apf
	bash# chkconfig --level 2345 apf on

You could also remove it from autostart like this -
bash# chkconfig --del apf

And you could enable a cron job that starts the firewall sometime after runtime.

You could DOS protect your system as well.

Change value of USE_AD (in /etc/apf/conf.apf) to 0/1 to disable or enable 
	        [0 = Disabled / 1 = Enabled]

=> In additon to specifying the ports and ip's , you could also specify the protocols.

Advanced trust usage :
The trust rules can be made in advanced format with 4 options(proto:flow:port:ip);

protocol: [packet protocol tcp/udp]

flow in/out: [packet direction, inbound or outbound]

s/d=port: [packet source or destination port]

s/d=ip(/xx) [packet source or destination address, masking supported]

Flow assumed as Input if not defined. Protocol assumed as TCP if not defined. When defining rules with protocol, flow is required.

	s - source , d - destination , flow - packet flow in/out
			inbound to destination port 22 from -

I have already mentioned 2 options, to start and restart APF. The main 'apf' script has a few operations built in to ease the use of your firewall.

bash #/usr/local/sbin/apf [OPTION]

		-s|--start ............. load firewall policies
		-r|--restart ........... flush & load firewall
		-f|--flush|--stop ...... flush firewall
		-l|--list .............. list chain rules
		-st|--status ........... firewall status
		-a HOST|--allow HOST ... add host (IP/FQDN) to allow_hosts.rules and
		immediately load new rule into firewall
		-d HOST|--deny HOST .... add host (IP/FQDN) to deny_hosts.rules and
		immediately load new rule into firewall

APF can also be started from the init script located at /etc/init.d/apf, standard start|stop|restart arguments are accepted by this script. Here are a few options in the APF config file /etc/apf/conf.apf .
        - Option: DEVM="1"

			Definition:  APF comes default in dev. mode; meaning the firewall rules
			will be flushed every 5 minutes. This is intended to prevent you from
			being locked out of your system in the event of undesired results from APF.
			Set the DEVM="1" option to zero (0) once APF is operating as desired.
			Do NOT! leave this option enabled on a permanent basis, or you defeat
			the purpose of using a firewall.

	- Option: FWPATH="/etc/apf"
			Definition: Absolute install path to APF; should not be changed usually.

	- Option: IF="eth0"
			Definition: Network interface visable too the Internet/Intranet.

	- Option: NET=`ifconfig $IF | grep inet | cut -d : -f 2 | cut -d \  -f 1`
			Definition: IP Address that $IF holds; either define the IP in this value
			or leave it as-is to autodetect.

	- Option: IPTLOG="/var/log/apf_log"
			Definition: Location that APF should log status information to.

	- Option: DROP_LOG="1"

			Definition: Control toggle to enable/disable netfilter kernel log chains.
			These chains appear in the default syslog kernel log; /var/log/messages.

	- Option: LRATE="60"
			Definition: Limiting toggle to increase or decrease the max iptables
			logging events per/minute. This should be left high but may be decreased
			to preserve disk space and logging overhead.

	- Option: EGF="0"
			Definition: Toggle on or off the egress packet filtering; when off APF will
			operate as traditional older versions did with just input filtering.
			[0 = Disabled / 1 = Enabled]

	- Option: USE_DS="0"
			Definition:'s "block" list of top networks that have exhibited 
			suspicious activity. [0 = Disabled / 1 = Enabled]

Hope this article helps you install, configure and customize APF firewall for your CPanel system.

Got something to add? Send me email.

(OLDER) <- More Stuff -> (NEWER)    (NEWEST)   

Printer Friendly Version

-> -> Installing APF Firewall for cPanel

Increase ad revenue 50-250% with Ezoic

More Articles by © Smitha Soman

Kerio Samepage

Have you tried Searching this site?

Unix/Linux/Mac OS X support by phone, email or on-site: Support Rates

This is a Unix/Linux resource website. It contains technical articles about Unix, Linux and general computing related subjects, opinion, news, help files, how-to's, tutorials and more.

Contact us

Within C++, there is a much smaller and cleaner language struggling to get out. (Bjarne Stroustrup)

Two years from now, spam will be solved. (Bill Gates, 2004)

This post tagged: