Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Iptables Firewall 11/2015
- SERVER_IP="192.168.1.10"
- ##############
- # Clean first
- ##############
- # Make sure service is started
- systemctl restart iptables.service &&
- # Clean rules firs, start from scratch
- # Resets iptables rules
- # It's your choice how you wan to do this, method a or b
- # Method a
- # clean
- # iptables-restore < /etc/iptables/empty.rules &&
- # Method b (skipping forward and input)
- iptables -F -v &&
- iptables -X -v &&
- iptables -t nat -F -v &&
- iptables -t nat -X -v &&
- iptables -t mangle -F -v &&
- iptables -t mangle -X -v &&
- iptables -t raw -F -v &&
- iptables -t raw -X -v &&
- iptables -t security -F -v &&
- iptables -t security -X -v &&
- iptables -P OUTPUT ACCEPT -v &&
- # Tighten and start some chains (leaving OUTPUT open fta)
- iptables -P FORWARD DROP -v &&
- iptables -P INPUT DROP -v &&
- iptables -N TCP -v &&
- iptables -N UDP -v &&
- iptables -N IN_SSH -v &&
- # Accept - keep alive existing to salvage any ssh conn
- iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -v &&
- # allow loopback
- iptables -A INPUT -i lo -j ACCEPT -v &&
- # drop any invalid
- iptables -A INPUT -m conntrack --ctstate INVALID -j DROP -v &&
- # Accept - icmp echo request, important for good traffic flow, first packet only is new
- iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT -v &&
- # Command UDP and TCP input chains to take new incoming connections
- iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP -v &&
- iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP -v &&
- # reject anything other ports with clean message drop and close (what about stealth according to grc? should we not replyon these instead for stealth?)
- iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable -v &&
- iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset -v &&
- # Reject - final INPUT chain rule, securely reject unopened ports
- iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable -v &&
- ################################
- # TCP UDP Chain Service rules
- ##############################
- # ssh
- iptables -A TCP -p tcp --dport 22 -j ACCEPT -v &&
- # www
- iptables -A TCP -p tcp --dport 80 -j ACCEPT -v &&
- iptables -A TCP -p tcp --dport 443 -j ACCEPT -v &&
- iptables -A TCP -p tcp --dport 3000:3003 -j ACCEPT -v &&
- iptables -A TCP -p tcp --dport 27017 -j ACCEPT -v &&
- iptables -A TCP -p tcp --dport 35729 -j ACCEPT -v &&
- ## DNS
- iptables -A UDP -s 192.168.1.0/24 -p udp --dport 53 -j ACCEPT -v &&
- iptables -A TCP -s 192.168.1.0/24 -p tcp --dport 953 -j ACCEPT -v &&
- ## Samba
- iptables -A UDP -s 192.168.1.0/24 -p udp --dport 137:138 -j ACCEPT -v &&
- iptables -A TCP -s 192.168.1.0/24 -p tcp --dport 139 -j ACCEPT -v &&
- iptables -A UDP -s 192.168.1.0/24 -p udp --dport 445 -j ACCEPT -v &&
- iptables -A TCP -s 192.168.1.0/24 -p tcp --dport 445 -j ACCEPT -v &&
- ################
- #More Hardening
- ################
- # Mitigate brute force
- iptables -A TCP -p tcp --dport 22 -j IN_SSH -v &&
- iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 3 --seconds 10 -j DROP -v &&
- iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 4 --seconds 1800 -j DROP -v &&
- iptables -A IN_SSH -m recent --name sshbf --set -j ACCEPT -v &&
- #Block various port scanners
- iptables -I TCP -p tcp --dport 80 -m string --algo bm --string 'GET /w00tw00t.at.ISC.SANS.' -j DROP -v &&
- #######################
- # End iptables ruleset
- #
- # Save and restart
- ######################
- iptables-save > /etc/iptables/iptables.rules &&
- systemctl restart iptables
- ########
- # NOTES
- ########
- # for self testing watch incoming attempts `cat /proc/net/xt_recent/sshbf`
- # unblock IP during testing, from root `# echo / > /proc/net/xt_recent/sshbf
- ##########
- # NOT USED
- ##########
- # iptables -A OUTPUT -p tcp -s $SERVER_IP --sport 80 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
- # iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
- # iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
- # iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
- # iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
- # iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
- # iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
- # iptables -A OUTPUT -p tcp --dport 3306 -j ACCEPT
- # iptables -A OUTPUT -p tcp --dport 8080 -j ACCEPT
- # iptables -A OUTPUT -p tcp --dport 8009 -j ACCEPT
- # iptables -A OUTPUT -p tcp --dport 11211 -j ACCEPT
- # iptables -A OUTPUT -p tcp --dport 58069 -j ACCEPT
- # iptables -A OUTPUT -p tcp --dport 8140 -j ACCEPT
- # iptables -A OUTPUT -p tcp --dport 5224 -j ACCEPT
- # iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
- #more ssh stuff, testing
- ## iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT -v &&
- # iptables -A TCP -p tcp --dport 22 -m conntrack --ctstate NEW -j IN_SSH -v &&
- ## iptables -A TCP -p tcp --dport 22 -j IN_SSH -v &&
- # iptables -A UDP -p udp -m conntrack --ctstate NEW -j UDP -v &&
- ## iptables -A UDP -p udp -j UDP -v &&
Advertisement
Add Comment
Please, Sign In to add comment