Posts Tagged ‘FTP’

FTP clean-up script – PHP (delete old files on server)

2 Comments »

One of my blog user “Chris” asked for FTP clean up script, so here it is:

01//CONFIG SECTION
02//*******************************************************
03// Credentials for FTP Server
04$source_server_ip = "your_domain_or_IP"; // Server IP or domain name eg: 212.122.3.77 or ftp.domain.tld
05// Credentials for FTP account
06$ftphost = "ip_or_hostname_of_ftp"; // FTP host IP or domain name
07$ftpacct = "userid"; // FTP account
08$ftppass = "password"; // FTP password
09$logs_dir = "/"; //FTP Remote Folder
10$email_notify = 'your_email@domain.com'; // Email address for backup notification
11$backupexpireindays=21; //3 weeks expire time in days, 21 days = 7*24*60
12//END OF CONFIG SECTION
13//*******************************************************
14 
15 
16//Do not edit below this line
17$backupexpireindays=($backupexpireindays*24)*3600; //convert it to seconds, 24 hours * 60 minutes * 60 seconds
18 
19// Delete any other backup with filetime greater than expire time, before create new backup
20$conn_id = ftp_connect($ftphost);
21$login_result = ftp_login($conn_id, $ftpacct, $ftppass);
22 
23ftp_chdir($conn_id, $logs_dir);
24$files = ftp_nlist($conn_id, ".");
25foreach ($files as $filename) {
26        $fileCreationTime = ftp_mdtm($conn_id, $filename);
27        //$date = date("F j, Y, g:i a", ftp_mdtm($conn_id, $filename));
28        //print "<br>Timestamp of '$filename': $date";
29        $fileAge=time();
30        $fileAge=$fileAge-$fileCreationTime;
31        if ($fileAge > $backupexpireindays) { // Is the file older than the given time span?
32               //echo "<br>The file $filename is older than Expire time :$expiretime ...Deleting\n";
33               ftp_delete($conn_id, $filename);
34               //echo "<br>Deleted<br><br>";
35               }
36}
37 
38ftp_close($conn_id);
39  
40print "Remote FTP clean up Finish deleted files older than $backupexpireindays days";
41?>

Enjoy !


Passive Mode FTP with iptables

No Comments »

There’s lots of advice on the net about how to setup a server with iptables to allow passive mode FTP. Below is the approach that we’ve found to be most effective.

Start by configuring your FTP daemon to use a fixed range of ports. We use 41361 to 65534 which is the IANA registered ephemeral port range. The exact config depends on what FTP software you’re using:

vsftpd

Edit /etc/vsftpd/vsftpd.conf and add the following lines:

1pasv_min_port=49152
2pasv_max_port=65534

proftpd

Edit /etc/proftpd.conf and add to the Global section:

1<global>
2......
3PassivePorts 49152 65534
4......
5</global>

Now restart your FTP service so the changes take effect.

Next you’ll need to configure the ip_conntrack_ftp iptables module to load. On Redhat/CentOS just edit /etc/sysconfig/iptables-config and add “ip_conntrack_ftp” to the IPTABLES_MODULES like this:

1IPTABLES_MODULES="ip_conntrack_ftp"

Next edit /etc/sysconfig/iptables and add a rule to allow TCP port 21.
The new line is marked in red:

01*filter
02:INPUT ACCEPT [0:0]
03:FORWARD ACCEPT [0:0]
04:OUTPUT ACCEPT [0:0]
05-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
06-A INPUT -p icmp -j ACCEPT
07-A INPUT -i lo -j ACCEPT
08-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
09-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
10-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
11-A INPUT -j REJECT --reject-with icmp-host-prohibited
12-A FORWARD -j REJECT --reject-with icmp-host-prohibited
13COMMIT

Now restart the iptables service:

1/sbin/service iptables restart

You can verify that the correct port range has been registered with lsmod like this:

1lsmod | grep conntrack_ftp

and you’ll get something like this:

1nf_conntrack_ftp       12913  0
2nf_conntrack           79645  4 nf_conntrack_ftp,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state

And that’s all it takes to get passive mode ftp working behind iptables.

P.S: If your server is behind a physical firewall and you are behind NAT, then you’ll probable need to load the “ip_nat_ftp” iptables module.


CPanel full backup (all files+databases+emails) PHP script

23 Comments »

 

I was looking for a working script to take full backup (all files+databases+emails) manually or using cron services on my hosting server, each CPanel user by one. But most of the scripts are either old, totally unusable or commercial.
So I wrote one for my own use and sharing here so others don’t need to re-invent the wheel

01<!--?php
02// Must include cPanel API
03include "xmlapi.php";
04  
05//CONFIG SECTION
06//*******************************************************
07// Credentials for cPanel account
08$source_server_ip = "your_domain_or_IP"; // Server IP or domain name eg: 212.122.3.77 or cpanel.domain.tld
09$cpanel_account = "userid"; // cPanel username
10$cpanel_password = "password"; // cPanel password
11// Credentials for FTP remote site
12$ftphost = "ip_or_hostname_of_ftp"; // FTP host IP or domain name
13$ftpacct = "userid"; // FTP account
14$ftppass = "password"; // FTP password
15$logs_dir = "/"; //FTP Remote Folder
16$email_notify = 'your_email@domain.com'; // Email address for backup notification
17$backupexpireindays=21; //3 weeks expire time in days, 21 days = 7*24*60
18//END OF CONFIG SECTION
19//*******************************************************
20//Do not edit below this line
21 
22$backupexpireindays=($backupexpireindays*24)*3600; //convert it to seconds, 24 hours * 60 minutes * 60 seconds
23 
24$xmlapi = new xmlapi($source_server_ip);
25$xmlapi--->password_auth($cpanel_account,$cpanel_password);
26$xmlapi->set_port('2083');
27  
28// Delete any other backup with filetime greater than expire time, before create new backup
29$conn_id = ftp_connect($ftphost);
30$login_result = ftp_login($conn_id, $ftpacct, $ftppass);
31 
32ftp_chdir($conn_id, $logs_dir);
33$files = ftp_nlist($conn_id, ".");
34foreach ($files as $filename) {
35        $fileCreationTime = ftp_mdtm($conn_id, $filename);
36        //$date = date("F j, Y, g:i a", ftp_mdtm($conn_id, $filename));
37        //print "<br>Timestamp of '$filename': $date";
38        $fileAge=time();
39        $fileAge=$fileAge-$fileCreationTime;
40        if ($fileAge > $backupexpireindays) { // Is the file older than the given time span?
41               //echo "<br>The file $filename is older than Expire time :$expiretime ...Deleting\n";
42               ftp_delete($conn_id, $filename);
43               //echo "<br>Deleted<br><br>";
44               }
45}
46 
47ftp_close($conn_id);
48  
49$api_args = array(
50                           'passiveftp',
51                           $ftphost,
52                           $ftpacct,
53                           $ftppass,
54                           $email_notify,
55                            21,
56                            '/'
57                         );
58  
59$xmlapi->set_output('json');
60print $xmlapi->api1_query($cpanel_account,'Fileman','fullbackup',$api_args);
61  
62?>

You need to save it with .php extension (upload it to your server) and download include file from xmlapi.zip(right click->save as) and extract it to the same folder (on your web server). Create cron job from your CPanel or trigger it manually to get full backup in your FTP server, That’s it.
OR
You can fork from my git hub Repositories at cpanel-Fullbackup
Enjoy


FTP automation on Linux

No Comments »

 

Ever wanted FTP backups and automation for keeping backups of important file on off-peak time. I always love automation, so machines can do things automatically and help humans 🙂 Read the rest of this entry »