Check Configuring iptables on CentOS post.
Why should you do that while APF or CSF can do it automatically?
Because APF/CSF could block an important bot testing your server to add to search index. So reviewing every ip would be a daily task!
Ok, so how?
using RHEL4, centos4
- #vi /etc/init.d/iptables
- go to 'start() {'
- #insert these lines before 'touch $VAR_SUBSYS_IPTABLES'
- #banning BAD IPS
- if [ -f /var/badips ]
- then
- for BAD_IP in `cat /var/badips`
- do
- iptables -I INPUT -s $BAD_IP -j DROP
- echo 'ip '$BAD_IP' banned'
- echo
- done
- else
- echo "Can't read /var/badips"
- fi
- #echo '80.145.203.224' >> /var/badip
- /etc/init.d/iptables restart
Ok but how about a nice PHP script which would do that without getting into ssh?
- $file = '/var/badips';
- #remove IP use ?do=rm&ip=80.145.203.224
- $arr = array_map('rtrim',file($file));
- if($_GET['do']=='rm'){
- unset($arr[array_search($_GET['ip'],$arr)]);
- if(file_put_contents($file,implode("\n",$arr)))
- echo $_GET['ip'].' removed';
- }else{ #add ip ?ip=80.145.203.224
- #duplicated ip
- if(is_array($arr) && in_array($_GET['ip'],$arr)) echo $_GET['ip'].' exits';
- else{
- exec("/sbin/iptables -I INPUT -s {$_GET['ip']} -j DROP");
- exec("/etc/init.d/iptables restart",$output);
- if(file_put_contents($file,"{$_GET['ip']}\n",FILE_APPEND))
- echo $_GET['ip'].' Banned';
- }
- exec("cat {$file}",$output);
- }
- print_r($output);
-
add the script to file ban.php and make sure file ‘badips’ is 666 writable then excute ban.php?ip=80.145.203.224 to ban this ip or ban.php?ip=80.145.203.224&do=rm to remove it from the banned ips