Apply fail2ban to wordpress
authorTom Hughes <tom@compton.nu>
Wed, 20 Nov 2013 21:08:15 +0000 (21:08 +0000)
committerTom Hughes <tom@compton.nu>
Wed, 20 Nov 2013 21:18:22 +0000 (21:18 +0000)
cookbooks/fail2ban/definitions/fail2ban_jail.rb [new file with mode: 0644]
cookbooks/fail2ban/recipes/default.rb
cookbooks/fail2ban/templates/default/jail.erb
cookbooks/wordpress/definitions/wordpress_site.rb
cookbooks/wordpress/recipes/default.rb

diff --git a/cookbooks/fail2ban/definitions/fail2ban_jail.rb b/cookbooks/fail2ban/definitions/fail2ban_jail.rb
new file mode 100644 (file)
index 0000000..b738896
--- /dev/null
@@ -0,0 +1,31 @@
+#
+# Cookbook Name:: networking
+# Definition:: fail2ban_jail
+#
+# Copyright 2013, OpenStreetMap Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+define :fail2ban_jail, :action => :create do
+  config = resources(:template => "/etc/fail2ban/jail.local")
+
+  config.variables[:jails] << Hash[
+    :name => params[:name],
+    :filter => params[:filter],
+    :logpath => params[:logpath],
+    :protocol => params[:protocol],
+    :port => Array(params[:ports]).join(","),
+    :maxretry => params[:maxretry]
+  ]
+end
index 3b1752a..1fe3840 100644 (file)
@@ -24,6 +24,7 @@ template "/etc/fail2ban/jail.local" do
   owner "root"
   group "root"
   mode 0644
+  variables :jails => []
 end
 
 service "fail2ban" do
index fc0f8bd..20010d1 100644 (file)
@@ -4,3 +4,17 @@
 destemail = admins@openstreetmap.org
 banaction = shorewall
 bantime = 14400
+<% @jails.each do |jail| -%>
+
+[<%= jail[:name] %>]
+enabled = true
+<% if jail[:protocol] -%>
+protocol = <%= jail[:protocol] %>
+<% end -%>
+port = <%= jail[:port] %>
+filter = <%= jail[:filter] %>
+logpath = <%= jail[:logpath] %>
+<% if jail[:maxretry] -%>
+maxretry = <%= jail[:maxretry] %>
+<% end -%>
+<% end -%>
index b418f96..d2aea61 100644 (file)
@@ -135,4 +135,8 @@ define :wordpress_site, :action => [ :create, :enable ] do
     url "http://#{name}/wp-admin/upgrade.php?step=1"
     subscribes :get, "subversion[#{directory}]"
   end
+
+  wordpress_plugin "wp-fail2ban" do
+    site name
+  end
 end
index 36485d2..bb004f6 100644 (file)
@@ -30,3 +30,17 @@ package "php-apc"
 
 apache_module "php5"
 apache_module "rewrite"
+
+remote_file "/etc/fail2ban/filter.d/wordpress.conf" do
+  action :create_if_missing
+  source "http://plugins.svn.wordpress.org/wp-fail2ban/trunk/wordpress.conf"
+  owner "root"
+  group "root"
+  mode 0644
+end
+
+fail2ban_jail "wordpress" do
+  filter "wordpress"
+  logpath "/var/log/auth.log"
+  ports 80, 443
+end