| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -38,6 +38,12 @@ protect_port=25565 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					# Max graylisted connections per second. This can be higher, and ensures an attack won't be too high for the second pass firewall. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					graylist_verified=100 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					graylist_unverified=15 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					graylist_concurrent=3 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					# How many bytes before sending the player to the remote checker to check for info. Please don't change if you don't | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					# know what you're doing as you may get yourself locked out of the API. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					# | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					checker_minconn=26214400 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					# MISC. THESE VALUES MAY CHANGE IN THE FUTURE | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -55,10 +61,12 @@ echo "Preparing clean ipset configuration" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					ipset -F mw_blacklist | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					ipset -F mw_graylist | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					ipset -F mw_whitelist | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					ipset -F mw_checklist | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					ipset -N -! mw_blacklist hash:net maxelem 1500000 timeout $timeout | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					ipset -N -! mw_graylist hash:net maxelem 10000 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					ipset -N -! mw_whitelist hash:net maxelem 10000 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					ipset -N -! mw_checklist hash:net maxelem 30 timeout 300 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					echo "Generating whitelist for the firewall..." | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -79,14 +87,19 @@ done | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					# The blacklist makes sure any "smart bots" are blocked in time on your server after a while. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					# Off the table just allow the whitelisted users and drop the blacklisted ones. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$iptables -A MineWall -p tcp --dport $protect_port -m set --match-set mw_whitelist src -j ACCEPT | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$iptables -A MineWall -p tcp --dport $protect_port -m set --match-set mw_blacklist src -j DROP | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					iptables -A MineWall -p tcp --dport $protect_port -m connbytes --connbytes $checker_minconn --connbytes-dir reply --connbytes-mode bytes -j SET --add-set mw_checklist | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$iptables -A MineWall -p tcp --dport $protect_port --syn -m set --match-set mw_graylist -m limit --limit $graylist_verified/s src -j ACCEPT | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$iptables -A MineWall -p tcp --dport $protect_port --syn -m limit --limit $graylist_unverified/s -j ACCEPT | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$iptables -A MineWall -p tcp --dport $protect_port --syn -j DROP | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					iptables -A MineWall -p tcp --dport $protect_port -m set --match-set mw_whitelist src -j ACCEPT | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					iptables -A MineWall -p tcp --dport $protect_port -m set --match-set mw_blacklist src -j DROP | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					iptables -A MineWall -p tcp --dport $protect_port --syn -m set --match-set mw_graylist -m limit --limit $graylist_verified/s src -j ACCEPT | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					iptables -A MineWall -p tcp --dport $protect_port --syn -m limit --limit $graylist_unverified/s -j ACCEPT | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					iptables -A MineWall -p tcp --dport $protect_port --syn -m connlimit ! --connlimit-above $graylist_concurrent -j ACCEPT | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					iptables -A MineWall -p tcp --dport $protect_port --syn -j DROP | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					# Add MineWall to iptables and remove it just in case it is already there. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$iptables -D INPUT -p tcp -j MineWall | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					$iptables -A INPUT -p tcp -j MineWall | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					echo "Firewall applied successfully." | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					echo "Firewall applied successfully. Please add the whitelister script to crontab (each minute) to finish installation" |