One of my blog user “Chris” asked for FTP clean up script, so here it is:
04 | $source_server_ip = "your_domain_or_IP" ; |
06 | $ftphost = "ip_or_hostname_of_ftp" ; |
10 | $email_notify = 'your_email@domain.com' ; |
11 | $backupexpireindays =21; |
17 | $backupexpireindays =( $backupexpireindays *24)*3600; |
20 | $conn_id = ftp_connect( $ftphost ); |
21 | $login_result = ftp_login( $conn_id , $ftpacct , $ftppass ); |
23 | ftp_chdir( $conn_id , $logs_dir ); |
24 | $files = ftp_nlist( $conn_id , "." ); |
25 | foreach ( $files as $filename ) { |
26 | $fileCreationTime = ftp_mdtm( $conn_id , $filename ); |
30 | $fileAge = $fileAge - $fileCreationTime ; |
31 | if ( $fileAge > $backupexpireindays ) { |
33 | ftp_delete( $conn_id , $filename ); |
40 | print "Remote FTP clean up Finish deleted files older than $backupexpireindays days" ; |
Enjoy !
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:
proftpd
Edit /etc/proftpd.conf and add to the Global section:
3 | PassivePorts 49152 65534 |
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:
1 | IPTABLES_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:
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 |
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:
1 | lsmod | grep conntrack_ftp |
and you’ll get something like this:
1 | nf_conntrack_ftp 12913 0 |
2 | nf_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.
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
08 | $source_server_ip = "your_domain_or_IP" ; |
09 | $cpanel_account = "userid" ; |
10 | $cpanel_password = "password" ; |
12 | $ftphost = "ip_or_hostname_of_ftp" ; |
16 | $email_notify = 'your_email@domain.com' ; |
17 | $backupexpireindays =21; |
22 | $backupexpireindays =( $backupexpireindays *24)*3600; |
24 | $xmlapi = new xmlapi( $source_server_ip ); |
25 | $xmlapi --->password_auth( $cpanel_account , $cpanel_password ); |
26 | $xmlapi ->set_port( '2083' ); |
29 | $conn_id = ftp_connect( $ftphost ); |
30 | $login_result = ftp_login( $conn_id , $ftpacct , $ftppass ); |
32 | ftp_chdir( $conn_id , $logs_dir ); |
33 | $files = ftp_nlist( $conn_id , "." ); |
34 | foreach ( $files as $filename ) { |
35 | $fileCreationTime = ftp_mdtm( $conn_id , $filename ); |
39 | $fileAge = $fileAge - $fileCreationTime ; |
40 | if ( $fileAge > $backupexpireindays ) { |
42 | ftp_delete( $conn_id , $filename ); |
59 | $xmlapi ->set_output( 'json' ); |
60 | print $xmlapi ->api1_query( $cpanel_account , 'Fileman' , 'fullbackup' , $api_args ); |
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
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 »