|
|
- ###############################
- # SIMPLE FIREWALL RULES FOR IPTABLES
- #
- # By Pekka Helenius (~Fincer), 2018
- #
- # These rules are intended to be used
- # without UFW. If you have additional
- # firewall settings in your system/iptables,
- # take care adapting these rules in to your
- # current firewall ruleset.
- #
- # 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) drop all incoming traffic by default, except for
- # SSH, HTTP and HTTPS protocols
- #
- # C) start dropping packets if connection cycle is too intense
- # from one client. This setting may be useful against port scanners.
- #
- # Ruleset C) by Anthony Maro:
- # https://www.ossramblings.com/using_iptables_rate_limiting_to_prevent_portscans
- #
- ############
- #
- # 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 C) 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
- #
- ###############################
- #
- # 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 SSH CONNECTION INPUT BELOW
- # OTHERWISE YOU WILL BE LOCKED OUT FROM THE SERVER!
- #
- # DO NOT USE 'REJECT' BECAUSE IT GIVES A RESPONSE TO A HOSTILE CLIENTS (PORT SCANNERS)
- # INSTEAD, DROP INCOMING PACKETS AND DO NOT GIVE RESPONSE 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
-
- ###############################
- # ALLOW INCOMING SSH CONNECTIONS
- #
-
- -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
- #-A OUTPUT -p tcp --sport 22 -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
-
- ###############################
- # RULESET C)
- #
- # IF 10 NEW CONNECTIONS TO ANY PORT WITHIN 30 SECONDS IS REQUESTED BY A CLIENT, START DROPPING PACKETS FOR THE CLIENT
- #
- # SHOULD FREEZE NMAP AND OTHER PORT SCANNERS
- #
- # Source: https://www.ossramblings.com/using_iptables_rate_limiting_to_prevent_portscans
-
- -A INPUT -i $IFACE -p tcp -m state --state NEW -m recent --set --name DEFAULT --mask 255.255.255.255 --rsource
- -A INPUT -i $IFACE -p tcp -m state --state NEW -m recent --update --seconds 30 --hitcount 10 --name DEFAULT --mask 255.255.255.255 --rsource -j DROP
-
- ###############################
-
- COMMIT
-
- # END OF FIREWALL RULES
|