Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- #
- # rc.firewall.sh
- IPT=/usr/sbin/iptables
- IP6TABLES="ip6tables"
- IPTABLES_RESTORE="iptables-restore"
- IP6TABLES_RESTORE="ip6tables-restore"
- IPSET="ipset"
- DEPMOD=/sbin/depmod
- MODPROBE=/sbin/modprobe
- $IPT -F
- $IPT -X
- $IPT -t mangle -F
- $IPT -t mangle -X
- $IPT -t nat -F
- $IPT -t nat -X
- # Default Policy
- $IPT -P FORWARD DROP
- $IPT -P INPUT DROP
- $IPT -P OUTPUT DROP
- # Completely disable IPv6.
- $IP6TABLES -F
- $IP6TABLES -X
- $IP6TABLES -t nat -F
- $IP6TABLES -t nat -X
- $IP6TABLES -t mangle -F
- $IP6TABLES -t mangle -X
- $IP6TABLES -P INPUT DROP
- $IP6TABLES -P FORWARD DROP
- $IP6TABLES -P OUTPUT DROP
- echo -e "\nDefault Policy set"
- FWVER=1.0
- #
- # Initial SIMPLE IP Masquerade test for 2.6 / 2.4 kernels
- # using IPTABLES.
- #
- # Once IP Masquerading has been tested, with this simple
- # ruleset, it is highly recommended to use a stronger
- # IPTABLES ruleset either given later in this HOWTO or
- # from another reputable resource.
- #
- #
- #
- # Log:
- # 0.76 - Added comments on why the default policy is ACCEPT
- # 0.75 - Added more kernel modules to the comments section
- # 0.74 - the ruleset now uses modprobe vs. insmod
- # 0.73 - REJECT is not a legal policy yet; back to DROP
- # 0.72 - Changed the default block behavior to REJECT not DROP
- # 0.71 - Added clarification that PPPoE users need to use
- # "ppp0" instead of "eth0" for their external interface
- # 0.70 - Added commented option for IRC nat module
- # - Added additional use of environment variables
- # - Added additional formatting
- # 0.63 - Added support for the IRC IPTABLES module
- # 0.62 - Fixed a typo on the MASQ enable line that used eth0
- # instead of $EXTIF
- # 0.61 - Changed the firewall to use variables for the internal
- # and external interfaces.
- # 0.60 - 0.50 had a mistake where the ruleset had a rule to DROP
- # all forwarded packets but it didn't have a rule to ACCEPT
- # any packets to be forwarded either
- # - Load the ip_nat_ftp and ip_conntrack_ftp modules by default
- # 0.50 - Initial draft
- #
- echo -e "\n\nLoading simple rc.firewall-iptables version $FWVER..\n"
- # The location of the iptables and kernel module programs
- #
- # If your Linux distribution came with a copy of iptables,
- # most likely all the programs will be located in /sbin. If
- # you manually compiled iptables, the default location will
- # be in /usr/local/sbin
- #
- # ** Please use the "whereis iptables" command to figure out
- # ** where your copy is and change the path below to reflect
- # ** your setup
- #
- #Setting the EXTERNAL and INTERNAL interfaces for the network
- #
- # Each IP Masquerade network needs to have at least one
- # external and one internal network. The external network
- # is where the natting will occur and the internal network
- # should preferably be addressed with a RFC1918 private address
- # scheme.
- #
- # For this example, "eth0" is external and "eth1" is internal"
- #
- #
- # NOTE: If this doesnt EXACTLY fit your configuration, you must
- # change the EXTIF or INTIF variables above. For example:
- #
- # If you are a PPPoE or analog modem user:
- #
- # EXTIF="ppp0"
- #
- #
- EXTIF="eth0"
- INTIF="eth1"
- echo " External Interface: $EXTIF"
- echo " Internal Interface: $INTIF"
- #======================================================================
- #== No editing beyond this line is required for initial MASQ testing ==
- echo -en " loading modules: "
- # Need to verify that all modules have all required dependencies
- #
- ####echo " - Verifying that all kernel modules are ok"
- ####$DEPMOD -a
- # With the new IPTABLES code, the core MASQ functionality is now either
- # modular or compiled into the kernel. This HOWTO shows ALL IPTABLES
- # options as MODULES. If your kernel is compiled correctly, there is
- # NO need to load the kernel modules manually.
- #
- # NOTE: The following items are listed ONLY for informational reasons.
- # There is no reason to manual load these modules unless your
- # kernel is either mis-configured or you intentionally disabled
- # the kernel module autoloader.
- #
- # Upon the commands of starting up IP Masq on the server, the
- # following kernel modules will be automatically loaded:
- #
- # NOTE: Only load the IP MASQ modules you need. All current IP MASQ
- # modules are shown below but are commented out from loading.
- # ===============================================================
- echo "----------------------------------------------------------------------"
- #Load the main body of the IPTABLES module - "iptable"
- # - Loaded automatically when the "iptables" command is invoked
- #
- # - Loaded manually to clean up kernel auto-loading timing issues
- #
- echo -en "\nip_tables, "
- $MODPROBE ip_tables
- #Load the IPTABLES filtering module - "iptable_filter"
- # - Loaded automatically when filter policies are activated
- #Load the stateful connection tracking framework - "ip_conntrack"
- #
- # The conntrack module in itself does nothing without other specific
- # conntrack modules being loaded afterwards such as the "ip_conntrack_ftp"
- # module
- #
- # - This module is loaded automatically when MASQ functionality is
- # enabled
- #
- # - Loaded manually to clean up kernel auto-loading timing issues
- #
- echo -en "\nip_conntrack, "
- $MODPROBE ip_conntrack
- #Load the FTP tracking mechanism for full FTP tracking
- #
- # Enabled by default -- insert a "#" on the next line to deactivate
- #
- echo -en "\nip_conntrack_ftp, "
- $MODPROBE ip_conntrack_ftp
- #Load the IRC tracking mechanism for full IRC tracking
- #
- # Enabled by default -- insert a "#" on the next line to deactivate
- #
- echo -en "\nip_conntrack_irc, "
- $MODPROBE ip_conntrack_irc
- #Load the general IPTABLES NAT code - "iptable_nat"
- # - Loaded automatically when MASQ functionality is turned on
- #
- # - Loaded manually to clean up kernel auto-loading timing issues
- #
- echo -en "\niptable_nat, "
- $MODPROBE iptable_nat
- #Loads the FTP NAT functionality into the core IPTABLES code
- # Required to support non-PASV FTP.
- #
- # Enabled by default -- insert a "#" on the next line to deactivate
- #
- echo -en "\nip_nat_ftp, "
- $MODPROBE ip_nat_ftp
- #Loads the IRC NAT functionality into the core IPTABLES code
- # Required to support NAT of IRC DCC requests
- #
- # Disabled by default -- remove the "#" on the next line to activate
- #
- #echo -e "ip_nat_irc"
- #$MODPROBE ip_nat_irc
- echo -e "\n----------------------------------------------------------------------"
- # Just to be complete, here is a partial list of some of the other
- # IPTABLES kernel modules and their function. Please note that most
- # of these modules (the ipt ones) are automatically loaded by the
- # master kernel module for proper operation and don't need to be
- # manually loaded.
- # --------------------------------------------------------------------
- #
- # ip_nat_snmp_basic - this module allows for proper NATing of some
- # SNMP traffic
- #
- # iptable_mangle - this target allows for packets to be
- # manipulated for things like the TCPMSS
- # option, etc.
- #
- # --
- #
- # ipt_mark - this target marks a given packet for future action.
- # This automatically loads the ipt_MARK module
- #
- # ipt_tcpmss - this target allows to manipulate the TCP MSS
- # option for braindead remote firewalls.
- # This automatically loads the ipt_TCPMSS module
- #
- # ipt_limit - this target allows for packets to be limited to
- # to many hits per sec/min/hr
- #
- # ipt_multiport - this match allows for targets within a range
- # of port numbers vs. listing each port individually
- #
- # ipt_state - this match allows to catch packets with various
- # IP and TCP flags set/unset
- #
- # ipt_unclean - this match allows to catch packets that have invalid
- # IP/TCP flags set
- #
- # iptable_filter - this module allows for packets to be DROPped,
- # REJECTed, or LOGged. This module automatically
- # loads the following modules:
- #
- # ipt_LOG - this target allows for packets to be
- # logged
- #
- # ipt_REJECT - this target DROPs the packet and returns
- # a configurable ICMP packet back to the
- # sender.
- #
- echo -e " Done loading modules.\n"
- #CRITICAL: Enable IP forwarding since it is disabled by default since
- #
- # Redhat Users: you may try changing the options in
- # /etc/sysconfig/network from:
- #
- # FORWARD_IPV4=false
- # to
- # FORWARD_IPV4=true
- #
- echo " Enabling forwarding.."
- echo "1" > /proc/sys/net/ipv4/ip_forward
- echo "0" > /proc/sys/net/ipv6/conf/all/forwarding
- # Dynamic IP users:
- #
- # If you get your IP address dynamically from SLIP, PPP, or DHCP,
- # enable this following option. This enables dynamic-address hacking
- # which makes the life with Diald and similar programs much easier.
- #
- echo " Enabling DynamicAddr.."
- echo "1" > /proc/sys/net/ipv4/ip_dynaddr
- # Enable simple IP forwarding and Masquerading
- #
- # NOTE: In IPTABLES speak, IP Masquerading is a form of SourceNAT or SNAT.
- #
- # NOTE #2: The following is an example for an internal LAN address in the
- # 192.168.0.x network with a 255.255.255.0 or a "24" bit subnet mask
- # connecting to the Internet on external interface "eth0". This
- # example will MASQ internal traffic out to the Internet but not
- # allow non-initiated traffic into your internal network.
- #
- #
- # ** Please change the above network numbers, subnet mask, and your
- # *** Internet connection interface name to match your setup
- #
- #Clearing any previous configuration
- #
- # Unless specified, the defaults for INPUT and OUTPUT is ACCEPT
- # The default for FORWARD is DROP (REJECT is not a valid policy)
- #
- # Isn't ACCEPT insecure? To some degree, YES, but this is our testing
- # phase. Once we know that IPMASQ is working well, I recommend you run
- # the rc.firewall-*-stronger rulesets which set the defaults to DROP but
- # also include the critical additional rulesets to still let you connect to
- # the IPMASQ server, etc.
- #
- # DISABLE TCP TIMESTAMPS ON LINUX
- # http://www.tmltechnologies.com/html-2012/index.php/linux-rescue-kits/82-secret/91-disable-tcp-timestamps-on-linux
- #echo 0 > /proc/sys/net/ipv4/tcp_timestamps
- echo 1 > /proc/sys/net/ipv4/tcp_timestamps
- #for i in /proc/sys/net/ipv4/conf/all/mc_forwarding; do echo 0 > $i; done # doesn't work with my current setup
- echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
- echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
- echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
- echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
- echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
- echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
- echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
- echo 1 > /proc/sys/net/ipv4/tcp_syncookies
- for i in /proc/sys/net/ipv4/conf/all/send_redirects; do echo 0 > $i; done
- for i in /proc/sys/net/ipv4/conf/all/proxy_arp; do echo 0 > $i; done
- for i in /proc/sys/net/ipv4/conf/all/secure_redirects; do echo 1 > $i; done
- for i in /proc/sys/net/ipv4/conf/all/bootp_relay; do echo 0 > $i; done
- echo -n "Block Broadcast Response"
- #net.ipv4.icmp_echo_ignore_broadcasts=1
- echo -n "Enable protection for bad icmp error messages"
- #net.ipv4.icmp_ignore_bogus_error_responses = 1
- echo -n "Enable syncookies for SYN flood attack protection"
- #net.ipv4.tcp_syncookies = 1
- echo -n "Log spoofed, source routed, and redirect packets"
- #net.ipv4.conf.all.log_martians = 1
- net.ipv4.conf.default.log_martians = 1
- echo -n "Don't allow source routed packets"
- #net.ipv4.conf.all.accept_source_route = 0
- net.ipv4.conf.default.accept_source_route = 0
- echo -n "Turn on reverse path filtering"
- #net.ipv4.conf.all.rp_filter = 1
- net.ipv4.conf.default.rp_filter = 1
- echo -n "Don't allow outsiders to alter the routing tables"
- #net.ipv4.conf.all.accept_redirects = 0
- net.ipv4.conf.default.accept_redirects = 0
- #net.ipv4.conf.all.secure_redirects = 0
- #net.ipv4.conf.default.secure_redirects = 0
- echo -n "Don't pass traffic between networks or act as a router"
- #net.ipv4.conf.all.send_redirects = 0
- #net.ipv4.conf.default.send_redirects = 0
- echo -n "Disable Core Dumps"
- fs.suid_dumpable = 0
- $IPSET flush
- $IPSET destroy blacklist
- $IPSET destroy IANA
- $IPSET create blacklist hash:ip hashsize 4096
- $IPSET create IANA hash:net
- $IPSET restore < /usr/local/security/blacklists/blacklist
- $IPSET restore < /usr/local/security/blacklists/IANA
- echo "Setting up Mangle"
- # Generated by iptables-save v1.4.20 on Sun Mar 2 00:55:26 2014
- #$IPT -t mangle -P PREROUTING ACCEPT
- #$IPT -t mangle -P INPUT ACCEPT
- #$IPT -t mangle -P FORWARD ACCEPT
- #$IPT -t mangle -P OUTPUT ACCEPT
- #$IPT -t mangle -P POSTROUTING ACCEPT
- #$IPT -t mangle -A PREROUTING -i lo -j ACCEPT
- #$IPT -t mangle -A PREROUTING -i eth1 -j ACCEPT
- #$IPT -t mangle -A PREROUTING -s 192.168.0.0/16 -i eth1 -j ACCEPT
- #$IPT -t mangle -A PREROUTING -d 192.168.0.0/16 -i eth1 -j ACCEPT
- #$IPT -t mangle -A PREROUTING -s 10.0.0.0/8 -i eth0 -j DROP
- #$IPT -t mangle -A PREROUTING -s 169.254.0.0/16 -i eth0 -j DROP
- #$IPT -t mangle -A PREROUTING -s 172.16.0.0/12 -i eth0 -j DROP
- #$IPT -t mangle -A PREROUTING -s 192.168.0.0/16 -i eth0 -j DROP
- #$IPT -t mangle -A PREROUTING -d 10.0.0.0/8 -i eth0 -j DROP
- #$IPT -t mangle -A PREROUTING -d 168.254.0.0/16 -i eth0 -j DROP
- #$IPT -t mangle -A PREROUTING -d 172.16.0.0/12 -i eth0 -j DROP
- #$IPT -t mangle -A PREROUTING -d 192.168.0.0/16 -i eth0 -j DROP
- #$IPT -t mangle -A FORWARD -o lo -j ACCEPT
- #$IPT -t mangle -A FORWARD -o eth0 -j ACCEPT
- #$IPT -t mangle -A FORWARD -o eth1 -j ACCEPT
- #$IPT -t mangle -A OUTPUT -o lo -j ACCEPT
- #$IPT -t mangle -A OUTPUT -o eth0 -j ACCEPT
- #$IPT -t mangle -A OUTPUT -o eth1 -j ACCEPT
- #$IPT -t mangle -A POSTROUTING -o lo -j ACCEPT
- #$IPT -t mangle -A POSTROUTING -o eth0 -j ACCEPT
- #$IPT -t mangle -A POSTROUTING -o eth1 -j ACCEPT
- # Completed on Sun Mar 2 00:55:26 2014
- # Generated by iptables-save v1.4.20 on Sun Mar 2 00:55:26 2014
- echo "Setting up NAT"
- $IPT -t nat -A PREROUTING -i eth0 -m state --state RELATED,ESTABLISHED -j DNAT --to-destination windows_ip
- $IPT -t nat -A PREROUTING -i eth0 -p udp -m udp --dport p2pport1 -j DNAT --to-destination windows_ip:p2pport1
- $IPT -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport utorrent_port -j DNAT --to-destination windows_ip:utorrent_port
- $IPT -t nat -A PREROUTING -i eth0 -p udp -m udp --dport utorrent_port -j DNAT --to-destination windows_ip:utorrent_port
- $IPT -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport p2pport2 -j DNAT --to-destination windows_ip:p2pport2
- $IPT -t nat -A PREROUTING -i eth0 -p udp -m udp --dport p2pport2 -j DNAT --to-destination windows_ip:p2pport2
- $IPT -t nat -A PREROUTING -i eth1 -j ACCEPT
- $IPT -t nat -A OUTPUT -o lo -j ACCEPT
- $IPT -t nat -A OUTPUT -o eth0 -j ACCEPT
- $IPT -t nat -A OUTPUT -o eth1 -j ACCEPT
- echo " Enabling SNAT (MASQUERADE) functionality on $EXTIF"
- $IPT -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
- # These two rules did not work
- #$IPT -t nat -A POSTROUTING -i eth1 -o eth0 -j MASQUERADE
- #$IPT -t nat -A POSTROUTING -o eth0 -s windows_ip/32 -d ! 192.168.0.0/24 -j MASQUERADE
- ######$IPT -t nat -A POSTROUTING -s windows_ip/32 -o eth0 -j MASQUERADE
- #$IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- $IPT -t nat -A POSTROUTING -o lo -j ACCEPT
- $IPT -t nat -A POSTROUTING -o eth0 -j ACCEPT
- $IPT -t nat -A POSTROUTING -o eth1 -j ACCEPT
- # Completed on Sun Mar 2 00:55:26 2014
- # Generated by iptables-save v1.4.20 on Sun Mar 2 00:55:26 2014
- # Filter
- echo " Clearing any existing rules and setting default policy."
- # Filter Chains
- echo "Setting up Chains"
- # Established, Related
- $IPT -N ESTABLISHED_FWD
- $IPT -N ESTABLISHED_IN
- $IPT -N ESTABLISHED_OUT
- # Bad / Invalid Flags
- $IPT -N BAD_FLAGS_FWD
- $IPT -N BAD_FLAGS_IN
- $IPT -N BAD_FLAGS_OUT
- # Blacklist
- $IPT -N BLACKLISTED_IN
- $IPT -N BLACKLISTED_OUT
- $IPT -N BLACKLISTED_FWD_OUT
- $IPT -N BLACKLISTED_FWD_IN
- # Broadcast / DHCP
- $IPT -N BROADCAST_IN
- $IPT -N BROADCAST_OUT
- $IPT -N BROADCAST_TO_DHCP
- $IPT -N IP_TO_DHCP_OUT
- $IPT -N DHCP_TO_BROADCAST
- $IPT -N DHCP_TO_IP
- # DNS
- $IPT -N DNS_OUT
- # Default Access in and out
- $IPT -N DEFAULT_FWD_OUT
- $IPT -N DEFAULT_FWD_IN
- $IPT -N DEFAULT_IN
- $IPT -N DEFAULT_OUT
- # SSH access
- $IPT -N WIN_TO_LINUX_SSH_IN
- # Access to Synergy
- $IPT -N SYNERGY_IN
- $IPT -N SYNERGY_OUT
- $IPT -N ACCESS_TO_SYNERGY
- # Miscellaneous access
- $IPT -N GITHUB_OUT
- $IPT -N SLACKBUILD_RSYNC_OUT
- # Chaos and Tarpit
- $IPT -N CHAOS_DELUDE_UDP_FWD
- $IPT -N CHAOS_DELUDE_UDP_IN
- $IPT -N CHAOS_TARPIT_TCP_FWD
- $IPT -N CHAOS_TARPIT_TCP_IN
- # Log and Drop
- $IPT -N DROP_ALL_FWD
- $IPT -N DROP_ALL_IN
- $IPT -N DROP_ALL_OUT
- $IPT -N DROP_INVALID
- # Access to Loopback
- $IPT -N LOCALHOST_TRAFFIC
- # Block public access to loopback
- $IPT -N LOOPBACK_TO_PUBLIC
- $IPT -N PUBLIC_TO_LOOPBACK
- # IANA Spoofs
- $IPT -N SPOOFED_FWD_OUT
- $IPT -N SPOOFED_FWD_IN
- $IPT -N SPOOFED_IN_1
- $IPT -N SPOOFED_IN_2
- $IPT -N SPOOFED_OUT_1
- $IPT -N SPOOFED_OUT_2
- # Internal Spoofs
- # Ip Spoofs
- $IPT -N SPOOFED_IP_FWD_1
- $IPT -N SPOOFED_IP_FWD_2
- $IPT -N SPOOFED_IP_IN_1
- $IPT -N SPOOFED_IP_IN_2
- $IPT -N SPOOFED_IP_OUT_1
- $IPT -N SPOOFED_IP_OUT_2
- # Linux Spoofs
- $IPT -N SPOOFED_LINUX_FWD_1
- $IPT -N SPOOFED_LINUX_FWD_2
- $IPT -N SPOOFED_LINUX_IN_1
- $IPT -N SPOOFED_LINUX_IN_2
- $IPT -N SPOOFED_LINUX_OUT_1
- $IPT -N SPOOFED_LINUX_OUT_2
- # Windows Spoofs
- $IPT -N SPOOFED_WINDOWS_FWD_1
- $IPT -N SPOOFED_WINDOWS_FWD_2
- $IPT -N SPOOFED_WIN_IN_1
- $IPT -N SPOOFED_WIN_IN_2
- $IPT -N SPOOFED_WIN_OUT_1
- $IPT -N SPOOFED_WIN_OUT_2
- # Access to router
- $IPT -N WIN_TO_ROUTER_FWD_OUT
- $IPT -N WIN_TO_ROUTER_FWD_IN
- $IPT -N WIN_TO_ROUTER_IN
- $IPT -N WIN_TO_ROUTER_OUT
- # Problematic Rules
- $IPT -N PROBLEMATIC_FORWARD_RULES
- echo "Forward"
- # Established, Related
- $IPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ESTABLISHED_FWD
- # Suggestion by lartc.org/howto/lartc.cookbook.mtu-mss.html
- # Circumventing Path MTU Discovery issues with MSS Clamping (for ADSL, cable, PPPoE & PPtP users)
- # As explained above, Path MTU Discovery doesn't work as well as it should anymore.
- # If you know for a fact that a hop somewhere in your network has a limited (<1500) MTU, you cannot rely on PMTU Discovery finding this out.
- # Besides MTU, there is yet another way to set the maximum packet size, the so called Maximum Segment Size.
- # This is a field in the TCP Options part of a SYN packet. Recent Linux kernels, and a few PPPoE drivers
- # (notably, the excellent Roaring Penguin one), feature the possibility to 'clamp the MSS'. The good thing about this is
- # that by setting the MSS value, you are telling the remote side unequivocally
- # 'do not ever try to send me packets bigger than this value'. No ICMP traffic is needed to get this to work.
- # The bad thing is that it's an obvious hack - it breaks 'end to end' by modifying packets.
- # Having said that, we use this trick in many places and it works like a charm.
- $IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
- echo " FWD: Allow all connections OUT and only existing and related ones IN"
- $IPT -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
- $IPT -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
- #echo "Allowing forward input from eth0 and output to eth1"
- #$IPT -A FORWARD -d windows_ip/32 -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
- #echo "Allowing forward input from eth1 and output to eth0"
- #$IPT -A FORWARD -s windows_ip/32 -i eth1 -o eth0 -j ACCEPT
- # Bad / Invalid Flags
- $IPT -A FORWARD -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j BAD_FLAGS_FWD
- $IPT -A FORWARD -m state --state INVALID -j DROP_INVALID
- # Blacklist
- $IPT -A FORWARD -m set --match-set blacklist src -j BLACKLISTED_FWD_OUT
- $IPT -A FORWARD -m set --match-set blacklist dst -j BLACKLISTED_FWD_IN
- # Internal Spoofs
- $IPT -A FORWARD -s public_ip/32 -d public_ip/32 -o eth0 -j SPOOFED_IP_FWD_1
- $IPT -A FORWARD -s public_ip/32 -d public_ip/32 -o eth1 -j SPOOFED_IP_FWD_2
- $IPT -A FORWARD -s linux_ip/32 -d linux_ip/32 -o eth1 -j SPOOFED_LINUX_FWD_1
- $IPT -A FORWARD -s linux_ip/32 -d linux_ip/32 -o eth0 -j SPOOFED_LINUX_FWD_2
- $IPT -A FORWARD -s windows_ip/32 -d windows_ip/32 -o eth1 -j SPOOFED_WINDOWS_FWD_1
- $IPT -A FORWARD -s windows_ip/32 -d windows_ip/32 -o eth0 -j SPOOFED_WINDOWS_FWD_2
- # Access to Synergy
- $IPT -A FORWARD -p tcp -m tcp --dport real_ssh_port2 -j ACCESS_TO_SYNERGY
- # Access to router
- $IPT -A FORWARD -s windows_ip/32 -i eth1 -m state --state NEW -j WIN_TO_ROUTER_FWD_OUT
- $IPT -A FORWARD -d windows_ip/32 -o eth1 -m state --state NEW -j WIN_TO_ROUTER_FWD_IN
- # Access to loopback
- $IPT -A FORWARD -s 127.0.0.0/31 -d 127.0.0.0/31 -i lo -j LOCALHOST_TRAFFIC
- $IPT -A FORWARD -s 127.0.0.0/31 -d 127.0.0.0/31 -o lo -j LOCALHOST_TRAFFIC
- # IANA Spoofs
- $IPT -A FORWARD -s 0.0.0.0/8 -j SPOOFED_FWD_OUT
- $IPT -A FORWARD -d 0.0.0.0/8 -j SPOOFED_FWD_IN
- $IPT -A FORWARD -m set --match-set IANA dst -j SPOOFED_FWD_OUT
- $IPT -A FORWARD -m set --match-set IANA src -j SPOOFED_FWD_IN
- # Default in and out to Windows
- $IPT -A FORWARD -s windows_ip/32 -i eth1 -j DEFAULT_FWD_IN
- $IPT -A FORWARD -s windows_ip/32 -o eth0 -j DEFAULT_FWD_IN
- $IPT -A FORWARD -d windows_ip/32 -o eth1 -j DEFAULT_FWD_OUT
- $IPT -A FORWARD -d windows_ip/32 -i eth0 -j DEFAULT_FWD_OUT
- # Chaos and Tarpit
- $IPT -A FORWARD -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -i eth0 -p tcp -m tcp --dport 1:1023 -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -i eth0 -p tcp -m tcp --dport 6000:6063 -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -i eth0 -p tcp -m tcp -m multiport --dports 5631,5060,5061,2967,8080,9943,9981,6667,1433,3306,2049,5432,1935,4321,1080 -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -i eth0 -p tcp -m tcp -m multiport --dports 3128,5000,5431,5900,5901,5800,5801,3389,3390,5222,5223,5269,5270 -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -p tcp -m tcp --dport 1:1023 -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -p tcp -m tcp --dport 6000:6063 -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -p tcp -m tcp -m multiport --dports 5631,5060,5061,2967,8080,9943,9981,6667,1433,3306,2049,5432,1935,4321,1080 -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -p tcp -m tcp -m multiport --dports 3128,5000,5431,5900,5901,5800,5801,3389,3390,5222,5223,5269,5270 -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -o eth1 -j CHAOS_TARPIT_TCP_FWD
- $IPT -A FORWARD -i eth0 -p udp -m udp --dport 33434:33524 -j CHAOS_DELUDE_UDP_FWD
- $IPT -A FORWARD -i eth0 -p udp -m udp --sport 1 --dport 1023 -j CHAOS_DELUDE_UDP_FWD
- $IPT -A FORWARD -i eth0 -p udp -m udp -m multiport --dports 4000,1194,5632,1645,1900,22555,4444,2049,1024 -j CHAOS_DELUDE_UDP_FWD
- $IPT -A FORWARD -p udp -m udp --dport 33434:33524 -j CHAOS_DELUDE_UDP_FWD
- $IPT -A FORWARD -p udp -m udp --sport 1 --dport 1023 -j CHAOS_DELUDE_UDP_FWD
- $IPT -A FORWARD -p udp -m udp -m multiport --dports 4000,1194,5632,1645,1900,22555,4444,2049,1024 -j CHAOS_DELUDE_UDP_FWD
- $IPT -A FORWARD -o eth1 -j CHAOS_DELUDE_UDP_FWD
- $IPT -A FORWARD -j LOG
- $IPT -A FORWARD -j DROP_ALL_FWD
- echo "Input"
- # Established, Related
- $IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ESTABLISHED_IN
- # DISABLE TCP TIMESTAMPS to get rid of unreachables, may significantly hurt performance of programs that rely on it
- $IPT -A INPUT -p icmp --icmp-type timestamp-request -j DROP
- # Bad / Invalid Flags
- $IPT -A INPUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j BAD_FLAGS_IN
- $IPT -A INPUT -m state --state INVALID -j DROP_INVALID
- # Blacklist
- $IPT -A INPUT -m set --match-set blacklist src -j BLACKLISTED_IN
- # Broadcast / DHCP
- $IPT -A INPUT -s 0.0.0.0/32 -d 255.255.255.255/32 -i eth0 -p udp -m udp --sport 67 --dport 68 -j BROADCAST_IN
- $IPT -A INPUT -d 255.255.255.255/32 -i eth0 -p udp -m udp --sport 67 --dport 68 -j DHCP_TO_BROADCAST
- $IPT -A INPUT -d public_ip/32 -i eth0 -p udp -m udp --sport 67 --dport 68 -j DHCP_TO_IP
- # Internal spoofs
- $IPT -A INPUT -s public_ip/32 -d public_ip/32 -i eth0 -j SPOOFED_IP_IN_1
- $IPT -A INPUT -s public_ip/32 -d public_ip/32 -i eth1 -j SPOOFED_IP_IN_2
- $IPT -A INPUT -s linux_ip/32 -d linux_ip/32 -i eth1 -j SPOOFED_LINUX_IN_1
- $IPT -A INPUT -s linux_ip/32 -d linux_ip/32 -i eth0 -j SPOOFED_LINUX_IN_2
- $IPT -A INPUT -s windows_ip/32 -d windows_ip/32 -i eth1 -j SPOOFED_WIN_IN_1
- $IPT -A INPUT -s windows_ip/32 -d windows_ip/32 -i eth0 -j SPOOFED_WIN_IN_2
- # Block public access to loopback
- $IPT -A INPUT -s public_ip/32 -d 127.0.0.1/32 -j PUBLIC_TO_LOOPBACK
- $IPT -A INPUT -s 127.0.0.1/32 -d public_ip/32 -j LOOPBACK_TO_PUBLIC
- # Synergy access
- $IPT -A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -i lo -p tcp -m tcp --dport real_ssh_port2 -j SYNERGY_IN
- $IPT -A INPUT -p tcp -m tcp --dport real_ssh_port2 -j ACCESS_TO_SYNERGY
- # Router access
- $IPT -A INPUT -s router_ip/32 -i eth0 -m state --state NEW -j WIN_TO_ROUTER_IN
- # Access to loopback
- $IPT -A INPUT -s 127.0.0.0/31 -d 127.0.0.0/31 -i lo -j LOCALHOST_TRAFFIC
- # IANA Spoofs
- $IPT -A INPUT -s 0.0.0.0/8 -j SPOOFED_IN_1
- $IPT -A INPUT -d 0.0.0.0/8 -j SPOOFED_IN_2
- $IPT -A FORWARD -m set --match-set IANA src -j SPOOFED_IN_1
- $IPT -A FORWARD -m set --match-set IANA dst -j SPOOFED_IN_2
- # SSH access
- $IPT -A INPUT -s windows_ip/32 -d linux_ip/32 -i eth1 -p tcp -m tcp --dport real_ssh_port1 -j WIN_TO_LINUX_SSH_IN
- # Default In
- $IPT -A INPUT -d public_ip/32 -i eth0 -j DEFAULT_IN
- # Chaos and Tarpit
- $IPT -A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j CHAOS_TARPIT_TCP_IN
- $IPT -A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j CHAOS_TARPIT_TCP_IN
- $IPT -A INPUT -i eth0 -p tcp -m tcp --dport 1:1023 -j CHAOS_TARPIT_TCP_IN
- $IPT -A INPUT -i eth0 -p tcp -m tcp --dport 6000:6063 -j CHAOS_TARPIT_TCP_IN
- $IPT -A INPUT -i eth0 -p tcp -m tcp -m multiport --dports 5631,5060,5061,2967,8080,9943,9981,6667,1433,3306,2049,5432,1935,4321,1080 -j CHAOS_TARPIT_TCP_IN
- $IPT -A INPUT -i eth0 -p tcp -m tcp -m multiport --dports 3128,5000,5431,5900,5901,5800,5801,3389,3390,5222,5223,5269,5270 -j CHAOS_TARPIT_TCP_IN
- $IPT -A INPUT -i eth0 -p udp -m udp --dport 33434:33524 -j CHAOS_DELUDE_UDP_IN
- $IPT -A INPUT -i eth0 -p udp -m udp --sport 1 --dport 1023 -j CHAOS_DELUDE_UDP_IN
- $IPT -A INPUT -i eth0 -p udp -m udp -m multiport --dports 4000,1194,5632,1645,1900,22555,4444,2049,1024 -j CHAOS_DELUDE_UDP_IN
- #echo "Allowing input from eth1, might be needed for internal communications, i.e ssh"
- $IPT -A INPUT -d linux_ip -i eth1 -j ACCEPT
- $IPT -A INPUT -j LOG
- $IPT -A INPUT -j DROP_ALL_IN
- echo "Output"
- $IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ESTABLISHED_OUT
- # DISABLE TCP TIMESTAMPS to get rid of unreachables, may significantly hurt performance of programs that rely on it
- iptables -A OUTPUT -p icmp --icmp-type timestamp-reply -j DROP
- # Invalid / Bad
- $IPT -A OUTPUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j BAD_FLAGS_OUT
- $IPT -A OUTPUT -m state --state INVALID -j DROP_INVALID
- # Blacklist
- $IPT -A OUTPUT -m set --match-set blacklist dst -j BLACKLISTED_OUT
- # Broadcast / DHCP
- $IPT -A OUTPUT -s 0.0.0.0/32 -d 255.255.255.255/32 -o eth0 -p udp -m udp --sport 68 --dport 67 -j BROADCAST_OUT
- $IPT -A OUTPUT -s 0.0.0.0/32 -o eth0 -p udp -m udp --sport 68 --dport 67 -j BROADCAST_TO_DHCP
- $IPT -A OUTPUT -s public_ip/32 -o eth0 -p udp -m udp --sport 68 --dport 67 -j IP_TO_DHCP_OUT
- # Internal Spoofs
- $IPT -A OUTPUT -s public_ip/32 -d public_ip/32 -o eth0 -j SPOOFED_IP_OUT_1
- $IPT -A OUTPUT -s public_ip/32 -d public_ip/32 -o eth1 -j SPOOFED_IP_OUT_2
- $IPT -A OUTPUT -s linux_ip/32 -d linux_ip/32 -o eth1 -j SPOOFED_LINUX_OUT_1
- $IPT -A OUTPUT -s linux_ip/32 -d linux_ip/32 -o eth0 -j SPOOFED_LINUX_OUT_2
- $IPT -A OUTPUT -s windows_ip/32 -d windows_ip/32 -o eth1 -j SPOOFED_WIN_OUT_1
- $IPT -A OUTPUT -s windows_ip/32 -d windows_ip/32 -o eth0 -j SPOOFED_WIN_OUT_2
- #Block access to loopback from the public
- $IPT -A OUTPUT -s public_ip/32 -d 127.0.0.1/32 -j PUBLIC_TO_LOOPBACK
- $IPT -A OUTPUT -s 127.0.0.1/32 -d public_ip/32 -j LOOPBACK_TO_PUBLIC
- # Synergy access
- $IPT -A OUTPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -o lo -p tcp -m tcp --dport real_ssh_port2 -j SYNERGY_OUT
- $IPT -A OUTPUT -p tcp -m tcp --dport real_ssh_port2 -j ACCESS_TO_SYNERGY
- # Access to router
- $IPT -A OUTPUT -d router_ip/32 -o eth0 -j WIN_TO_ROUTER_OUT
- # Loopback access
- $IPT -A OUTPUT -s 127.0.0.0/31 -d 127.0.0.0/31 -o lo -j LOCALHOST_TRAFFIC
- # IANA Spoofs
- $IPT -A OUTPUT -s 0.0.0.0/8 -j SPOOFED_OUT_1
- $IPT -A OUTPUT -d 0.0.0.0/8 -j SPOOFED_OUT_2
- $IPT -A FORWARD -m set --match-set IANA src -j SPOOFED_OUT_1
- $IPT -A FORWARD -m set --match-set IANA dst -j SPOOFED_OUT_2
- # Miscellaneous out
- $IPT -A OUTPUT -s public_ip/32 -d slackbuild_ip/32 -o eth0 -p tcp -m tcp --dport 873 -j SLACKBUILD_RSYNC_OUT
- $IPT -A OUTPUT -s public_ip/32 -d github_ip/22 -o eth0 -p tcp -m tcp --dport 9418 -j GITHUB_OUT
- # DNS out
- $IPT -A OUTPUT -s public_ip/32 -o eth0 -p tcp -m tcp --dport 53 -j DNS_OUT
- $IPT -A OUTPUT -s public_ip/32 -o eth0 -p udp -m udp --dport 53 -j DNS_OUT
- # DEFAULT out
- $IPT -A OUTPUT -s public_ip/32 -o eth0 -j DEFAULT_OUT
- #echo "Allowing output to eth1, this might be needed for internal communications, i.e. ssh"
- $IPT -A OUTPUT -s linux_ip/32 -o eth1 -j ACCEPT
- $IPT -A OUTPUT -j LOG
- $IPT -A OUTPUT -j DROP_ALL_OUT
- echo "Finalizing Chains"
- echo "Setting up Established, Related"
- $IPT -A ESTABLISHED_FWD -j ACCEPT
- $IPT -A ESTABLISHED_IN -j ACCEPT
- $IPT -A ESTABLISHED_OUT -j ACCEPT
- echo "Setting up Synergy"
- $IPT -A SYNERGY_IN -s 127.0.0.1/32 -d 127.0.0.1/32 -i lo -p tcp -m tcp --dport real_ssh_port2 -j ACCEPT
- $IPT -A SYNERGY_OUT -s 127.0.0.1/32 -d 127.0.0.1/32 -o lo -p tcp -m tcp --dport real_ssh_port2 -j ACCEPT
- $IPT -A ACCESS_TO_SYNERGY -j LOG --log-prefix "ACCESS_TO_SYNERGY -- DENY " --log-level 6
- $IPT -A ACCESS_TO_SYNERGY -j DROP
- echo "Setting up Bad and Invalid Flags"
- $IPT -A BAD_FLAGS_FWD -j LOG --log-prefix "BAD_FLAGS_FWD -- DENY " --log-level 6
- $IPT -A BAD_FLAGS_FWD -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
- $IPT -A BAD_FLAGS_IN -j LOG --log-prefix "BAD_FLAGS_IN -- DENY " --log-level 6
- $IPT -A BAD_FLAGS_IN -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
- $IPT -A BAD_FLAGS_OUT -j LOG --log-prefix "BAD_FLAGS_OUT -- DENY " --log-level 6
- $IPT -A BAD_FLAGS_OUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
- $IPT -A DROP_INVALID -j LOG --log-prefix "DROP_INVALID state -- DENY " --log-level 7
- $IPT -A DROP_INVALID -j DROP
- echo "Setting up Blacklist"
- $IPT -A BLACKLISTED_IN -j LOG --log-prefix "BLACKLISTED_IN -- DENY " --log-level 6
- $IPT -A BLACKLISTED_IN -j DROP
- $IPT -A BLACKLISTED_OUT -j LOG --log-prefix "BLACKLISTED_OUT -- DENY " --log-level 6
- $IPT -A BLACKLISTED_OUT -j DROP
- $IPT -A BLACKLISTED_FWD_OUT -j LOG --log-prefix "BLACKLISTED_FWD_OUT -- DENY " --log-level 6
- $IPT -A BLACKLISTED_FWD_OUT -j DROP
- $IPT -A BLACKLISTED_FWD_IN -j LOG --log-prefix "BLACKLISTED_FWD_IN -- DENY " --log-level 6
- $IPT -A BLACKLISTED_FWD_IN -j DROP
- echo "Setting up Broadcast and DHCP"
- $IPT -A BROADCAST_IN -s 0.0.0.0/32 -d 255.255.255.255/32 -i eth0 -p udp -m udp --sport 67 --dport 68 -j ACCEPT
- $IPT -A BROADCAST_OUT -s 0.0.0.0/32 -d 255.255.255.255/32 -o eth0 -p udp -m udp --sport 68 --dport 67 -j ACCEPT
- $IPT -A BROADCAST_TO_DHCP -d isp_ip1/32 -j ACCEPT
- $IPT -A BROADCAST_TO_DHCP -d isp_ip2/32 -j ACCEPT
- $IPT -A DHCP_TO_BROADCAST -s isp_ip1/32 -j ACCEPT
- $IPT -A DHCP_TO_BROADCAST -s isp_ip2/32 -j ACCEPT
- $IPT -A DHCP_TO_IP -s isp_ip1/32 -j ACCEPT
- $IPT -A DHCP_TO_IP -s isp_ip2/32 -j ACCEPT
- echo "Setting up DNS"
- $IPT -A DNS_OUT -d 4.4.4.4/32 -j ACCEPT
- $IPT -A DNS_OUT -d 8.8.8.8/32 -j ACCEPT
- $IPT -A DNS_OUT -d isp_dns1/32 -j ACCEPT
- $IPT -A DNS_OUT -d isp_dns2/32 -j ACCEPT
- $IPT -A DNS_OUT -d 208.67.220.220/32 -j ACCEPT
- $IPT -A DNS_OUT -d 208.67.222.222/32 -j ACCEPT
- echo "Setting up Chaos and Tarpit"
- $IPT -A CHAOS_DELUDE_UDP_FWD -j LOG --log-prefix "CHAOS_DELUDE_UDP_FWD - eth1 " --log-level 6
- $IPT -A CHAOS_DELUDE_UDP_FWD -j CHAOS --delude
- $IPT -A CHAOS_DELUDE_UDP_IN -j LOG --log-prefix "CHAOS_DELUDE_UDP_IN - eth0 " --log-level 6
- $IPT -A CHAOS_DELUDE_UDP_IN -j CHAOS --delude
- $IPT -A CHAOS_TARPIT_TCP_FWD -j LOG --log-prefix "CHAOS_TARPIT_TCP_FWD - eth1 " --log-level 6
- $IPT -A CHAOS_TARPIT_TCP_FWD -j CHAOS --tarpit
- $IPT -A CHAOS_TARPIT_TCP_IN -j LOG --log-prefix "CHAOS_TARPIT_TCP_IN - eth0 " --log-level 6
- $IPT -A CHAOS_TARPIT_TCP_IN -j CHAOS --tarpit
- echo "Setting up Default in and out for Windows"
- $IPT -A DEFAULT_FWD_OUT -p icmp -m icmp --icmp-type 12 -j ACCEPT
- $IPT -A DEFAULT_FWD_OUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
- $IPT -A DEFAULT_FWD_OUT -p icmp -m icmp --icmp-type 0/0 -j ACCEPT
- $IPT -A DEFAULT_FWD_OUT -p icmp -m icmp --icmp-type 11/0 -j ACCEPT
- $IPT -A DEFAULT_FWD_OUT -p icmp -m icmp --icmp-type 11/1 -j ACCEPT
- $IPT -A DEFAULT_FWD_OUT -p tcp -m tcp -m multiport --dports utorrent_port,p2pport2 -j ACCEPT
- $IPT -A DEFAULT_FWD_OUT -p udp -m udp -m multiport --dports utorrent_port,p2pport1,p2pport2 -j ACCEPT
- $IPT -A DEFAULT_FWD_IN -p icmp -m icmp --icmp-type 8/0 -j ACCEPT
- $IPT -A DEFAULT_FWD_IN -p tcp -m tcp --sport utorrent_port -j ACCEPT
- $IPT -A DEFAULT_FWD_IN -p tcp -m tcp -m multiport --dports 21,80,8080,443,143,993,110,995,25,465 -j ACCEPT
- $IPT -A DEFAULT_FWD_IN -p udp -m udp --sport utorrent_port -j ACCEPT
- $IPT -A DEFAULT_FWD_IN -p udp -m udp --sport p2pport1 -j ACCEPT
- $IPT -A DEFAULT_FWD_IN -p udp -m udp --dport 123 -j ACCEPT
- $IPT -A DEFAULT_FWD_IN -m state --state RELATED,ESTABLISHED -j ACCEPT
- echo "Setting up Default in and out for Linux"
- $IPT -A DEFAULT_IN -p icmp -m icmp --icmp-type 12 -j ACCEPT
- $IPT -A DEFAULT_IN -p icmp -m icmp --icmp-type 3 -j ACCEPT
- $IPT -A DEFAULT_IN -p icmp -m icmp --icmp-type 0/0 -j ACCEPT
- $IPT -A DEFAULT_IN -p icmp -m icmp --icmp-type 11/0 -j ACCEPT
- $IPT -A DEFAULT_IN -p icmp -m icmp --icmp-type 11/1 -j ACCEPT
- $IPT -A DEFAULT_OUT -p icmp -m icmp --icmp-type 8/0 -j ACCEPT
- $IPT -A DEFAULT_OUT -p tcp -m tcp -m multiport --dports 21,80,443,143,993,110,995,25,465 -j ACCEPT
- $IPT -A DEFAULT_OUT -p udp -m udp --dport 123 -j ACCEPT
- $IPT -A DEFAULT_OUT -m state --state RELATED,ESTABLISHED -j ACCEPT
- echo "Allowing access to router"
- $IPT -A WIN_TO_ROUTER_FWD_OUT -d router_gw_ip/32 -j ACCEPT
- $IPT -A WIN_TO_ROUTER_FWD_OUT -d router_gw_ip00/32 -j ACCEPT
- $IPT -A WIN_TO_ROUTER_FWD_IN -s router_gw_ip/32 -j ACCEPT
- $IPT -A WIN_TO_ROUTER_FWD_IN -s router_gw_ip00/32 -j ACCEPT
- $IPT -A WIN_TO_ROUTER_IN -d router_gw_ip/32 -j ACCEPT
- $IPT -A WIN_TO_ROUTER_IN -d linux_ip/32 -j ACCEPT
- $IPT -A WIN_TO_ROUTER_IN -d windows_ip/32 -j ACCEPT
- $IPT -A WIN_TO_ROUTER_OUT -s router_gw_ip/32 -j ACCEPT
- $IPT -A WIN_TO_ROUTER_OUT -s linux_ip/32 -j ACCEPT
- $IPT -A WIN_TO_ROUTER_OUT -s windows_ip/32 -j ACCEPT
- echo "Logging and Dropping everything"
- $IPT -A DROP_ALL_FWD -j LOG --log-prefix "DROP_ALL_FWD -- DENY " --log-level 6
- $IPT -A DROP_ALL_FWD -j DROP
- $IPT -A DROP_ALL_IN -j LOG --log-prefix "DROP_ALL_IN -- DENY " --log-level 6
- $IPT -A DROP_ALL_IN -j DROP
- $IPT -A DROP_ALL_OUT -j LOG --log-prefix "DROP_ALL_OUT -- DENY " --log-level 6
- $IPT -A DROP_ALL_OUT -j DROP
- # SSH access
- $IPT -A WIN_TO_LINUX_SSH_IN -j LOG --log-prefix "WINDOWS_TO_LINUX_SSH_IN -- AC" --log-level 6
- $IPT -A WIN_TO_LINUX_SSH_IN -j ACCEPT
- $IPT -A GITHUB_OUT -s public_ip/32 -d github_ip/22 -o eth0 -p tcp -m tcp --dport 9418 -j ACCEPT
- $IPT -A SLACKBUILD_RSYNC_OUT -s public_ip/32 -d slackbuild_ip/32 -o eth0 -p tcp -m tcp --dport 873 -j ACCEPT
- # Broadcast / DHCP
- $IPT -A IP_TO_DHCP_OUT -d isp_ip1/32 -j ACCEPT
- $IPT -A IP_TO_DHCP_OUT -d isp_ip2/32 -j ACCEPT
- # Loopback
- $IPT -A LOCALHOST_TRAFFIC -s 127.0.0.1/32 -d 127.0.0.1/32 -i lo -j ACCEPT
- $IPT -A LOCALHOST_TRAFFIC -s 127.0.0.1/32 -d 127.0.0.1/32 -o lo -j ACCEPT
- # Block access to loopback from public
- $IPT -A LOOPBACK_TO_PUBLIC -j LOG --log-prefix "LOOPBACK_TO_PUBLIC -- DENY " --log-level 6
- $IPT -A LOOPBACK_TO_PUBLIC -j DROP
- $IPT -A PUBLIC_TO_LOOPBACK -j LOG --log-prefix "PUBLIC_TO_LOOPBACK -- DENY " --log-level 6
- $IPT -A PUBLIC_TO_LOOPBACK -j DROP
- #$IPT -A PROBLEMATIC_FORWARD_RULES -d windows_ip/32 -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
- #$IPT -A PROBLEMATIC_FORWARD_RULES -s windows_ip/32 -i eth1 -o eth0 -j ACCEPT
- #$IPT -A PROBLEMATIC_FORWARD_RULES -o eth0 -m state --state NEW -j ACCEPT
- # IANA Spoofs
- $IPT -A SPOOFED_FWD_OUT -j LOG --log-prefix "SPOOFED_FWD_OUT -- DENY " --log-level 6
- $IPT -A SPOOFED_FWD_OUT -j DROP
- $IPT -A SPOOFED_FWD_IN -j LOG --log-prefix "SPOOFED_FWD_IN -- DENY " --log-level 6
- $IPT -A SPOOFED_FWD_IN -j DROP
- $IPT -A SPOOFED_IN_1 -j LOG --log-prefix "SPOOFED_IN_1 -- DENY " --log-level 6
- $IPT -A SPOOFED_IN_1 -j DROP
- $IPT -A SPOOFED_IN_2 -j LOG --log-prefix "SPOOFED_IN_2 -- DENY " --log-level 6
- $IPT -A SPOOFED_IN_2 -j DROP
- $IPT -A SPOOFED_OUT_1 -j LOG --log-prefix "SPOOFED_OUT_1 -- DENY " --log-level 6
- $IPT -A SPOOFED_OUT_1 -j DROP
- $IPT -A SPOOFED_OUT_2 -j LOG --log-prefix "SPOOFED_OUT_2 -- DENY " --log-level 6
- $IPT -A SPOOFED_OUT_2 -j DROP
- # Internal Spoofs
- # Spoofed Ip
- $IPT -A SPOOFED_IP_FWD_1 -j LOG --log-prefix "SPOOFED_HOME_IP_FWD_1 -- DENY" --log-level 6
- $IPT -A SPOOFED_IP_FWD_1 -j DROP
- $IPT -A SPOOFED_IP_FWD_2 -j LOG --log-prefix "SPOOFED_HOME_IP_FWD_2 -- DENY" --log-level 6
- $IPT -A SPOOFED_IP_FWD_2 -j DROP
- $IPT -A SPOOFED_IP_IN_1 -j LOG --log-prefix "SPOOFED_HOME_IP_IN_1 -- DENY " --log-level 6
- $IPT -A SPOOFED_IP_IN_1 -j DROP
- $IPT -A SPOOFED_IP_IN_2 -j LOG --log-prefix "SPOOFED_HOME_IP_IN_2 -- DENY " --log-level 6
- $IPT -A SPOOFED_IP_IN_2 -j DROP
- $IPT -A SPOOFED_IP_OUT_1 -j LOG --log-prefix "SPOOFED_HOME_IP_OUT_1 -- DENY" --log-level 6
- $IPT -A SPOOFED_IP_OUT_1 -j DROP
- $IPT -A SPOOFED_IP_OUT_2 -j LOG --log-prefix "SPOOFED_HOME_IP_OUT_2 -- DENY" --log-level 6
- $IPT -A SPOOFED_IP_OUT_2 -j DROP
- # Spoofed Linux Internal Ip
- $IPT -A SPOOFED_LINUX_FWD_1 -j LOG --log-prefix "SPOOFED_LINUX_FWD_1 -- DENY " --log-level 6
- $IPT -A SPOOFED_LINUX_FWD_1 -j DROP
- $IPT -A SPOOFED_LINUX_FWD_2 -j LOG --log-prefix "SPOOFED_IN_LINUX_FWD_2 -- DEN" --log-level 6
- $IPT -A SPOOFED_LINUX_FWD_2 -j DROP
- $IPT -A SPOOFED_LINUX_IN_1 -j LOG --log-prefix "SPOOFED_LINUX_IN_1 -- DENY " --log-level 6
- $IPT -A SPOOFED_LINUX_IN_1 -j DROP
- $IPT -A SPOOFED_LINUX_IN_2 -j LOG --log-prefix "SPOOFED_LINUX_IN_2 -- DENY " --log-level 6
- $IPT -A SPOOFED_LINUX_IN_2 -j DROP
- $IPT -A SPOOFED_LINUX_OUT_1 -j LOG --log-prefix "SPOOFED_LINUX_OUT_1 -- DENY " --log-level 6
- $IPT -A SPOOFED_LINUX_OUT_1 -j DROP
- $IPT -A SPOOFED_LINUX_OUT_2 -j LOG --log-prefix "SPOOFED_LINUX_OUT_2 -- DENY " --log-level 6
- $IPT -A SPOOFED_LINUX_OUT_2 -j DROP
- # Spoofed Windows Internal Ip
- $IPT -A SPOOFED_WINDOWS_FWD_1 -j LOG --log-prefix "SPOOFED_WINDOWS_FWD_1 -- DENY" --log-level 6
- $IPT -A SPOOFED_WINDOWS_FWD_1 -j DROP
- $IPT -A SPOOFED_WINDOWS_FWD_2 -j LOG --log-prefix "SPOOFED_WINDOWS_FWD_2 -- DENY" --log-level 6
- $IPT -A SPOOFED_WINDOWS_FWD_2 -j DROP
- $IPT -A SPOOFED_WIN_IN_1 -j LOG --log-prefix "SPOOFED_WINDOWS_IN_1 -- DENY " --log-level 6
- $IPT -A SPOOFED_WIN_IN_1 -j DROP
- $IPT -A SPOOFED_WIN_IN_2 -j LOG --log-prefix "SPOOFED_WINDOWS_IN_2 -- DENY " --log-level 6
- $IPT -A SPOOFED_WIN_IN_2 -j DROP
- $IPT -A SPOOFED_WIN_OUT_1 -j LOG --log-prefix "SPOOFED_WINDOWS_OUT_1 -- DENY" --log-level 6
- $IPT -A SPOOFED_WIN_OUT_1 -j DROP
- $IPT -A SPOOFED_WIN_OUT_2 -j LOG --log-prefix "SPOOFED_WINDOWS_OUT_2 -- DENY" --log-level 6
- $IPT -A SPOOFED_WIN_OUT_2 -j DROP
- # For psad
- #/usr/sbin/iptables -A INPUT -j LOG
- #/usr/sbin/iptables -A FORWARD -j LOG
- #/usr/sbin/iptables -A OUTPUT -j LOG
- #/usr/sbin/ipt6ables -A INPUT -j LOG
- #/usr/sbin/ip6tables -A FORWARD -j LOG
- #/usr/sbin/ip6tables -A OUTPUT -j LOG
- echo -e "\nrc.firewall.sh v$FWVER done.\n"
Advertisement
Add Comment
Please, Sign In to add comment