|
###############################
|
|
# SIMPLE FIREWALL RULES FOR IPTABLES
|
|
#
|
|
#
|
|
# These rules are intended to be used
|
|
# without other firewalls such as UFW.
|
|
# If you have additional firewall settings
|
|
# in your system/iptables, take care adapting
|
|
# these rules in to your current firewall ruleset.
|
|
#
|
|
# It is highly recommended to remove all conflicting
|
|
# firewall configuration
|
|
#
|
|
# I do not take responsibility of breaking
|
|
# your working firewall configuration!
|
|
#
|
|
############
|
|
#
|
|
# The rules in this file do the following:
|
|
#
|
|
# A) do not respond to incoming ping requests
|
|
# Can be used as a replacement for sysctl 'net.ipv4.icmp_echo_ignore_all=1' setting
|
|
#
|
|
# B) Reject connection if connection cycle is too intense
|
|
# from one client. This setting may be useful against all kind of intense brute force
|
|
# attacks.
|
|
#
|
|
# C) drop all incoming traffic by default, except for
|
|
# SSH, HTTP and HTTPS protocols
|
|
#
|
|
#
|
|
############
|
|
#
|
|
# INSTALLATION
|
|
#
|
|
# NOTE: Intended to be used without UFW or any other
|
|
# firewall settings!!
|
|
#
|
|
# 1) Recommended: Remove existing firewall front-ends such as UFW from your system
|
|
#
|
|
# 2) Delete all previous firewall rules by issuing
|
|
# sudo iptables --flush && sudo iptables --delete-chain
|
|
#
|
|
# 3) Check output of 'iptables -S'. It should be
|
|
# -P INPUT ACCEPT
|
|
# -P FORWARD ACCEPT
|
|
# -P OUTPUT ACCEPT
|
|
#
|
|
# 4) In this file, change SSH, HTTP and HTTPS port numbers to fit your server environment
|
|
#
|
|
# Default values are:
|
|
#
|
|
# SSH: 22
|
|
# HTTP: 80
|
|
# HTTPS: 443
|
|
#
|
|
# Default setting for bruteforce prevention is 10 maximum connection attempts in 30 seconds
|
|
# Adapt the values to your server environment.
|
|
#
|
|
# 5) Save this file to /etc/iptables/iptables.rules
|
|
#
|
|
# 6) Check that it is used by 'iptables-restore' command
|
|
#
|
|
# In systemd environments, check the value of 'ExecStart' and 'ExecReload'
|
|
# in file /lib/systemd/system/iptables.service. The entries should be as follows:
|
|
#
|
|
# ExecStart=/usr/bin/iptables-restore /etc/iptables/iptables.rules
|
|
# ExecReload=/usr/bin/iptables-restore /etc/iptables/iptables.rules
|
|
#
|
|
# 7) Once you have double-checked that the parameters in this file are correct (step 4), run
|
|
# sudo iptables-restore /etc/iptables/iptables.rules
|
|
# sudo systemctl enable iptables && sudo systemctl start iptables
|
|
#
|
|
# 8) Check that the rules have been applied:
|
|
# sudo iptables -S
|
|
#
|
|
#
|
|
###############################
|
|
# USEFUL LINKS
|
|
#
|
|
# https://www.thegeekstuff.com/scripts/iptables-rules
|
|
# https://gist.github.com/thomasfr/9712418
|
|
# http://blog.sevagas.com/?Iptables-firewall-versus-nmap-and,31
|
|
#
|
|
###############################
|
|
#
|
|
# BEGINNING OF FIREWALL RULES
|
|
#
|
|
|
|
*filter
|
|
|
|
###############################
|
|
# Default policy for this chain - drop all input traffic
|
|
# This is a dangerous setting. If you drop all incoming connections,
|
|
# make sure you have accepted at least incoming SSH connection below.
|
|
# Otherwise you will be locked out from the server!
|
|
#
|
|
# Do not use 'REJECT' because it gives a response to hostile clients such
|
|
# as bruteforcers and port scanners. Instead, drop incoming packets
|
|
# and do not give reponse at all.
|
|
#
|
|
|
|
-P INPUT DROP
|
|
|
|
###############################
|
|
# We are not a router, we drop all (non-existent) forward connections
|
|
#
|
|
|
|
-P FORWARD DROP
|
|
|
|
###############################
|
|
# By default, all outgoing traffic from the server is accepted
|
|
#
|
|
|
|
-P OUTPUT ACCEPT
|
|
|
|
###############################
|
|
# Drop all incoming ping requests
|
|
#
|
|
|
|
-A INPUT -p icmp --icmp-type echo-request -j DROP
|
|
|
|
###############################
|
|
# Allow loopback connections
|
|
#
|
|
|
|
-A INPUT -i lo -j ACCEPT
|
|
#-A OUTPUT -o lo -j ACCEPT
|
|
|
|
###############################
|
|
# Block bruteforce attacks
|
|
# Works against dirbuster, nmap and similar tools.
|
|
#
|
|
#
|
|
# Default values are allowing max 10 connections from a client within 30 seconds
|
|
# Please adjust these values for your server environment
|
|
#
|
|
# Based on: https://rudd-o.com/linux-and-free-software/a-better-way-to-block-brute-force-attacks-on-your-ssh-server
|
|
|
|
# If you need to enable this for specific TCP ports, add the following parameter:
|
|
# -m multiport --dports 80
|
|
|
|
-A INPUT -p tcp -m tcp -m state --state NEW -m recent --set --name BRUTEFORCE --rsource
|
|
#-A INPUT -p tcp -m tcp -m multiport --dports 80 -m recent --rcheck --seconds 30 --hitcount 10 --rttl --name BRUTEFORCE --rsource -j LOG --log-prefix "Brute force attack detected "
|
|
-A INPUT -p tcp -m tcp -m recent --rcheck --seconds 30 --hitcount 10 --rttl --name BRUTEFORCE --rsource -j REJECT --reject-with tcp-reset
|
|
|
|
###############################
|
|
# Allow incoming SSH connections
|
|
#
|
|
|
|
-A INPUT -p tcp --dport 765 -m state --state NEW -j ACCEPT
|
|
#-A OUTPUT -p tcp --sport 765 -m state --state NEW -j ACCEPT
|
|
|
|
###############################
|
|
# Allow incoming HTTP/HTTPS connections
|
|
#
|
|
|
|
-A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -j ACCEPT
|
|
#-A OUTPUT -p tcp -m multiport --sports 80,443 -m state --state NEW -j ACCEPT
|
|
|
|
###############################
|
|
# Allow established and related connections
|
|
#
|
|
|
|
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
|
|
#-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
|
|
|
|
###############################
|
|
|
|
COMMIT
|
|
|
|
# END OF FIREWALL RULES
|