commit
					d83eee2daa
				
				 7 changed files with 842 additions and 0 deletions
			
			
		@ -0,0 +1,13 @@ | 
				
			|||||||
 | 
					*~ | 
				
			||||||
 | 
					\#*\# | 
				
			||||||
 | 
					/.emacs.desktop | 
				
			||||||
 | 
					/.emacs.desktop.lock | 
				
			||||||
 | 
					*.elc | 
				
			||||||
 | 
					auto-save-list | 
				
			||||||
 | 
					tramp | 
				
			||||||
 | 
					.\#* | 
				
			||||||
 | 
					.org-id-locations | 
				
			||||||
 | 
					*_archive | 
				
			||||||
 | 
					*_flymake.* | 
				
			||||||
 | 
					*.rel | 
				
			||||||
 | 
					/auto/ | 
				
			||||||
@ -0,0 +1,21 @@ | 
				
			|||||||
 | 
					The MIT License (MIT) | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (c) 2015 Taylor Bockman | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is hereby granted, free of charge, to any person obtaining a copy | 
				
			||||||
 | 
					of this software and associated documentation files (the "Software"), to deal | 
				
			||||||
 | 
					in the Software without restriction, including without limitation the rights | 
				
			||||||
 | 
					to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
				
			||||||
 | 
					copies of the Software, and to permit persons to whom the Software is | 
				
			||||||
 | 
					furnished to do so, subject to the following conditions: | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The above copyright notice and this permission notice shall be included in all | 
				
			||||||
 | 
					copies or substantial portions of the Software. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
				
			||||||
 | 
					IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
				
			||||||
 | 
					FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
				
			||||||
 | 
					AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
				
			||||||
 | 
					LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
				
			||||||
 | 
					OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 
				
			||||||
 | 
					SOFTWARE. | 
				
			||||||
@ -0,0 +1,13 @@ | 
				
			|||||||
 | 
					# Slackware VPS Configuration | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is a set of files that I use to configure a remote development VPS. These kinds of boxes are | 
				
			||||||
 | 
					handy when you don't want to haul a laptop around. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Here's a list of VPS providers that have Slackware images available: | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*Put list here* | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**These scripts are untested**. They are currently built mostly from my memory of how I configured | 
				
			||||||
 | 
					the systems before. There are many places commented where I have to devise a good solution on | 
				
			||||||
 | 
					how to make them work. I would love to have help. | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,23 @@ | 
				
			|||||||
 | 
					############################################## | 
				
			||||||
 | 
					#                                            # | 
				
			||||||
 | 
					#       Allow SSH in IPTables                # | 
				
			||||||
 | 
					#       Author: Taylor Bockman               # | 
				
			||||||
 | 
					#               <tbockman@taylorbockman.com> # | 
				
			||||||
 | 
					#                                            # | 
				
			||||||
 | 
					############################################## | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "SSH Port:" | 
				
			||||||
 | 
					read sshport | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Interface: " | 
				
			||||||
 | 
					read interface | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Allow incoming SSH | 
				
			||||||
 | 
					sudo iptables -A INPUT -i $interface -p tcp --dport $sshport -m state --state NEW,ESTABLISHED -j ACCEPT -m comment --comment "SSH Incoming" | 
				
			||||||
 | 
					sudo iptables -A OUTPUT -o $interface -p tcp --sport $sshport -m state --state ESTABLISHED -j ACCEPT -m comment --comment "SSH Incoming" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Allow outgoing SSH | 
				
			||||||
 | 
					sudo iptables -A OUTPUT -o $interface -p tcp --dport $sshport -m state --state NEW,ESTABLISHED -j ACCEPT -m comment --comment "SSH Outgoing" | 
				
			||||||
 | 
					sudo iptables -A INPUT -i $interface -p tcp --sport $sshport -m state --state ESTABLISHED -j ACCEPT -m comment --comment "SSH Outgoing" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Completed opening up SSH on interface $interface, port $sshport." | 
				
			||||||
@ -0,0 +1,34 @@ | 
				
			|||||||
 | 
					############################################ | 
				
			||||||
 | 
					#                                          # | 
				
			||||||
 | 
					#  Setup default chains in IPTables        # | 
				
			||||||
 | 
					#    Author: Taylor Bockman                # | 
				
			||||||
 | 
					#            <tbockman@taylorbockman.com>  # | 
				
			||||||
 | 
					#                                          # | 
				
			||||||
 | 
					#                                          # | 
				
			||||||
 | 
					############################################ | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Are you on a VPS? [Y/N]" | 
				
			||||||
 | 
					read onvps | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ $onvps=="Y" ]; | 
				
			||||||
 | 
					then | 
				
			||||||
 | 
					  echo "Did you open your SSH ports on iptables? Otherwise this will kill your access. [Y/N]" | 
				
			||||||
 | 
					  read openedssh | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if [ $openedssh=="Y" ]; | 
				
			||||||
 | 
					  then | 
				
			||||||
 | 
					    echo "Dropping INPUT and FORWARD..." | 
				
			||||||
 | 
					    sudo iptables -P INPUT DROP   | 
				
			||||||
 | 
					    sudo iptables -P FORWARD DROP | 
				
			||||||
 | 
					    echo "INPUT and FORWARD are now dropping traffic. You will have to configure a source and destination for each rule" | 
				
			||||||
 | 
					  else | 
				
			||||||
 | 
					    echo "Please configure your SSH access with IPTables and run this script again" | 
				
			||||||
 | 
					  fi | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					else | 
				
			||||||
 | 
					  echo "Dropping INPUT and FORWARD..." | 
				
			||||||
 | 
					  sudo iptables -P INPUT DROP | 
				
			||||||
 | 
					  sudo iptables -P FORWARD DROP | 
				
			||||||
 | 
					  echo "INPUT and FORWARD are now dropping traffic. You will have to configure a source and destination for each rule." | 
				
			||||||
 | 
					fi | 
				
			||||||
 | 
					   | 
				
			||||||
@ -0,0 +1,655 @@ | 
				
			|||||||
 | 
					#!/bin/sh | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Generated iptables firewall script for the Linux 2.4 kernel and later. | 
				
			||||||
 | 
					# Script generated by Easy Firewall Generator for IPTables 1.15 | 
				
			||||||
 | 
					# copyright 2002 Timothy Scott Morizot | 
				
			||||||
 | 
					# Modified for Slackware Linux by Eric Hameleers <alien@slackware.com> | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Special notes: | 
				
			||||||
 | 
					#   - This firewall script uses the output of "hostname -i" to set the right | 
				
			||||||
 | 
					#     interface. This will only work if the hostname can be resolved. | 
				
			||||||
 | 
					#     Further, you may need to use "hostname -I" and parse the output, or | 
				
			||||||
 | 
					#     write a secondary script, to handle this part if you have multiple | 
				
			||||||
 | 
					#     interfaces. | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					#   - This also uses route for compatibility with systems that are running | 
				
			||||||
 | 
					#     without the ip command. You may need to adjust the INET_IFACE script to | 
				
			||||||
 | 
					#     grab an interface if you are using one different than the one with the | 
				
			||||||
 | 
					#     default gateway. | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					#  | 
				
			||||||
 | 
					# Local Settings | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# sysctl location.  If set, it will use sysctl to adjust the kernel parameters. | 
				
			||||||
 | 
					# If this is set to the empty string (or is unset), the use of sysctl | 
				
			||||||
 | 
					# is disabled. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SYSCTL="/sbin/sysctl -w"  | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# To echo the value directly to the /proc file instead | 
				
			||||||
 | 
					# SYSCTL="" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# IPTables Location - adjust if needed | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IPT="/usr/sbin/iptables" | 
				
			||||||
 | 
					IPTS="/usr/sbin/iptables-save" | 
				
			||||||
 | 
					IPTR="/usr/sbin/iptables-restore" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Internet Interface | 
				
			||||||
 | 
					INET_IFACE="$(route -n | awk '$1 ~ /0.0.0.0/ {print $NF}')" | 
				
			||||||
 | 
					INET_ADDRESS="$(hostname -i)" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Configured for interface $INET_IFACE on IP address $INET_ADDRESS" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Localhost Interface | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LO_IFACE="lo" | 
				
			||||||
 | 
					LO_IP="127.0.0.1" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Save and Restore arguments handled here | 
				
			||||||
 | 
					if [ "$1" = "save" ] | 
				
			||||||
 | 
					then | 
				
			||||||
 | 
						echo -n "Saving firewall to /etc/sysconfig/iptables ... " | 
				
			||||||
 | 
						$IPTS > /etc/sysconfig/iptables | 
				
			||||||
 | 
						echo "done" | 
				
			||||||
 | 
						exit 0 | 
				
			||||||
 | 
					elif [ "$1" = "restore" ] | 
				
			||||||
 | 
					then | 
				
			||||||
 | 
						echo -n "Restoring firewall from /etc/sysconfig/iptables ... " | 
				
			||||||
 | 
						$IPTR < /etc/sysconfig/iptables | 
				
			||||||
 | 
						echo "done" | 
				
			||||||
 | 
						exit 0 | 
				
			||||||
 | 
					fi | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Load Modules | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Loading kernel modules ..." | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You should uncomment the line below and run it the first time just to | 
				
			||||||
 | 
					# ensure all kernel module dependencies are OK.  There is no need to run | 
				
			||||||
 | 
					# every time, however. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# /sbin/depmod -a | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Unless you have kernel module auto-loading disabled, you should not | 
				
			||||||
 | 
					# need to manually load each of these modules.  Other than ip_tables, | 
				
			||||||
 | 
					# ip_conntrack, and some of the optional modules, I've left these | 
				
			||||||
 | 
					# commented by default.  Uncomment if you have any problems or if | 
				
			||||||
 | 
					# you have disabled module autoload.  Note that some modules must | 
				
			||||||
 | 
					# be loaded by another kernel module. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# core netfilter module | 
				
			||||||
 | 
					/sbin/modprobe ip_tables | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# the stateful connection tracking module | 
				
			||||||
 | 
					/sbin/modprobe ip_conntrack | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# filter table module | 
				
			||||||
 | 
					# /sbin/modprobe iptable_filter | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# mangle table module | 
				
			||||||
 | 
					# /sbin/modprobe iptable_mangle | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# nat table module | 
				
			||||||
 | 
					# /sbin/modprobe iptable_nat | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# LOG target module | 
				
			||||||
 | 
					# /sbin/modprobe ipt_LOG | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This is used to limit the number of packets per sec/min/hr | 
				
			||||||
 | 
					# /sbin/modprobe ipt_limit | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# masquerade target module | 
				
			||||||
 | 
					# /sbin/modprobe ipt_MASQUERADE | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# filter using owner as part of the match | 
				
			||||||
 | 
					# /sbin/modprobe ipt_owner | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# REJECT target drops the packet and returns an ICMP response. | 
				
			||||||
 | 
					# The response is configurable.  By default, connection refused. | 
				
			||||||
 | 
					# /sbin/modprobe ipt_REJECT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This target allows packets to be marked in the mangle table | 
				
			||||||
 | 
					# /sbin/modprobe ipt_mark | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This target affects the TCP MSS | 
				
			||||||
 | 
					# /sbin/modprobe ipt_tcpmss | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This match allows multiple ports instead of a single port or range | 
				
			||||||
 | 
					# /sbin/modprobe multiport | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This match checks against the TCP flags | 
				
			||||||
 | 
					# /sbin/modprobe ipt_state | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This match catches packets with invalid flags | 
				
			||||||
 | 
					# /sbin/modprobe ipt_unclean | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The ftp nat module is required for non-PASV ftp support | 
				
			||||||
 | 
					/sbin/modprobe ip_nat_ftp | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# the module for full ftp connection tracking | 
				
			||||||
 | 
					/sbin/modprobe ip_conntrack_ftp | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# the module for full irc connection tracking | 
				
			||||||
 | 
					/sbin/modprobe ip_conntrack_irc | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Kernel Parameter Configuration | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# See http://ipsysctl-tutorial.frozentux.net/chunkyhtml/index.html | 
				
			||||||
 | 
					# for a detailed tutorial on sysctl and the various settings | 
				
			||||||
 | 
					# available. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Required to enable IPv4 forwarding. | 
				
			||||||
 | 
					# Redhat users can try setting FORWARD_IPV4 in /etc/sysconfig/network to true | 
				
			||||||
 | 
					# Alternatively, it can be set in /etc/sysctl.conf | 
				
			||||||
 | 
					#if [ "$SYSCTL" = "" ] | 
				
			||||||
 | 
					#then | 
				
			||||||
 | 
					#    echo "1" > /proc/sys/net/ipv4/ip_forward | 
				
			||||||
 | 
					#else | 
				
			||||||
 | 
					#    $SYSCTL net.ipv4.ip_forward="1" | 
				
			||||||
 | 
					#fi | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This enables dynamic address hacking. | 
				
			||||||
 | 
					# This may help if you have a dynamic IP address \(e.g. slip, ppp, dhcp\). | 
				
			||||||
 | 
					#if [ "$SYSCTL" = "" ] | 
				
			||||||
 | 
					#then | 
				
			||||||
 | 
					#    echo "1" > /proc/sys/net/ipv4/ip_dynaddr | 
				
			||||||
 | 
					#else | 
				
			||||||
 | 
					#    $SYSCTL net.ipv4.ip_dynaddr="1" | 
				
			||||||
 | 
					#fi | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This enables SYN flood protection. | 
				
			||||||
 | 
					# The SYN cookies activation allows your system to accept an unlimited | 
				
			||||||
 | 
					# number of TCP connections while still trying to give reasonable | 
				
			||||||
 | 
					# service during a denial of service attack. | 
				
			||||||
 | 
					if [ "$SYSCTL" = "" ] | 
				
			||||||
 | 
					then | 
				
			||||||
 | 
					    echo "1" > /proc/sys/net/ipv4/tcp_syncookies | 
				
			||||||
 | 
					else | 
				
			||||||
 | 
					    $SYSCTL net.ipv4.tcp_syncookies="1" | 
				
			||||||
 | 
					fi | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This enables source validation by reversed path according to RFC1812. | 
				
			||||||
 | 
					# In other words, did the response packet originate from the same interface | 
				
			||||||
 | 
					# through which the source packet was sent?  It's recommended for single-homed | 
				
			||||||
 | 
					# systems and routers on stub networks.  Since those are the configurations | 
				
			||||||
 | 
					# this firewall is designed to support, I turn it on by default. | 
				
			||||||
 | 
					# Turn it off if you use multiple NICs connected to the same network. | 
				
			||||||
 | 
					if [ "$SYSCTL" = "" ] | 
				
			||||||
 | 
					then | 
				
			||||||
 | 
					    echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter | 
				
			||||||
 | 
					else | 
				
			||||||
 | 
					    $SYSCTL net.ipv4.conf.all.rp_filter="1" | 
				
			||||||
 | 
					fi | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This option allows a subnet to be firewalled with a single IP address. | 
				
			||||||
 | 
					# It's used to build a DMZ.  Since that's not a focus of this firewall | 
				
			||||||
 | 
					# script, it's not enabled by default, but is included for reference. | 
				
			||||||
 | 
					# See: http://www.sjdjweis.com/linux/proxyarp/  | 
				
			||||||
 | 
					#if [ "$SYSCTL" = "" ] | 
				
			||||||
 | 
					#then | 
				
			||||||
 | 
					#    echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp | 
				
			||||||
 | 
					#else | 
				
			||||||
 | 
					#    $SYSCTL net.ipv4.conf.all.proxy_arp="1" | 
				
			||||||
 | 
					#fi | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The following kernel settings were suggested by Alex Weeks. Thanks! | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This kernel parameter instructs the kernel to ignore all ICMP | 
				
			||||||
 | 
					# echo requests sent to the broadcast address.  This prevents | 
				
			||||||
 | 
					# a number of smurfs and similar DoS nasty attacks. | 
				
			||||||
 | 
					if [ "$SYSCTL" = "" ] | 
				
			||||||
 | 
					then | 
				
			||||||
 | 
					    echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts | 
				
			||||||
 | 
					else | 
				
			||||||
 | 
					    $SYSCTL net.ipv4.icmp_echo_ignore_broadcasts="1" | 
				
			||||||
 | 
					fi | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This option can be used to accept or refuse source routed | 
				
			||||||
 | 
					# packets.  It is usually on by default, but is generally | 
				
			||||||
 | 
					# considered a security risk.  This option turns it off. | 
				
			||||||
 | 
					if [ "$SYSCTL" = "" ] | 
				
			||||||
 | 
					then | 
				
			||||||
 | 
					    echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route | 
				
			||||||
 | 
					else | 
				
			||||||
 | 
					    $SYSCTL net.ipv4.conf.all.accept_source_route="0" | 
				
			||||||
 | 
					fi | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This option can disable ICMP redirects.  ICMP redirects | 
				
			||||||
 | 
					# are generally considered a security risk and shouldn't be | 
				
			||||||
 | 
					# needed by most systems using this generator. | 
				
			||||||
 | 
					#if [ "$SYSCTL" = "" ] | 
				
			||||||
 | 
					#then | 
				
			||||||
 | 
					#    echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects | 
				
			||||||
 | 
					#else | 
				
			||||||
 | 
					#    $SYSCTL net.ipv4.conf.all.accept_redirects="0" | 
				
			||||||
 | 
					#fi | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# However, we'll ensure the secure_redirects option is on instead. | 
				
			||||||
 | 
					# This option accepts only from gateways in the default gateways list. | 
				
			||||||
 | 
					if [ "$SYSCTL" = "" ] | 
				
			||||||
 | 
					then | 
				
			||||||
 | 
					    echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects | 
				
			||||||
 | 
					else | 
				
			||||||
 | 
					    $SYSCTL net.ipv4.conf.all.secure_redirects="1" | 
				
			||||||
 | 
					fi | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This option logs packets from impossible addresses. | 
				
			||||||
 | 
					if [ "$SYSCTL" = "" ] | 
				
			||||||
 | 
					then | 
				
			||||||
 | 
					    echo "1" > /proc/sys/net/ipv4/conf/all/log_martians | 
				
			||||||
 | 
					else | 
				
			||||||
 | 
					    $SYSCTL net.ipv4.conf.all.log_martians="1" | 
				
			||||||
 | 
					fi | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Flush Any Existing Rules or Chains | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Flushing Tables ..." | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Reset Default Policies | 
				
			||||||
 | 
					$IPT -P INPUT ACCEPT | 
				
			||||||
 | 
					$IPT -P FORWARD ACCEPT | 
				
			||||||
 | 
					$IPT -P OUTPUT ACCEPT | 
				
			||||||
 | 
					$IPT -t nat -P PREROUTING ACCEPT | 
				
			||||||
 | 
					$IPT -t nat -P POSTROUTING ACCEPT | 
				
			||||||
 | 
					$IPT -t nat -P OUTPUT ACCEPT | 
				
			||||||
 | 
					$IPT -t mangle -P PREROUTING ACCEPT | 
				
			||||||
 | 
					$IPT -t mangle -P OUTPUT ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Flush all rules | 
				
			||||||
 | 
					$IPT -F | 
				
			||||||
 | 
					$IPT -t nat -F | 
				
			||||||
 | 
					$IPT -t mangle -F | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Erase all non-default chains | 
				
			||||||
 | 
					$IPT -X | 
				
			||||||
 | 
					$IPT -t nat -X | 
				
			||||||
 | 
					$IPT -t mangle -X | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ "$1" = "stop" ] | 
				
			||||||
 | 
					then | 
				
			||||||
 | 
						echo "Firewall completely flushed!  Now running with no firewall." | 
				
			||||||
 | 
						exit 0 | 
				
			||||||
 | 
					fi | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Rules Configuration | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Filter Table | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set Policies | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$IPT -P INPUT DROP | 
				
			||||||
 | 
					$IPT -P OUTPUT DROP | 
				
			||||||
 | 
					$IPT -P FORWARD DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# User-Specified Chains | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Create user chains to reduce the number of rules each packet | 
				
			||||||
 | 
					# must traverse. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Create and populate custom rule chains ..." | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create a chain to filter INVALID packets | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$IPT -N bad_packets | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create another chain to filter bad tcp packets | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$IPT -N bad_tcp_packets | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create separate chains for icmp, tcp (incoming and outgoing), | 
				
			||||||
 | 
					# and incoming udp packets. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$IPT -N icmp_packets | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Used for UDP packets inbound from the Internet | 
				
			||||||
 | 
					$IPT -N udp_inbound | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Used to block outbound UDP services from internal network | 
				
			||||||
 | 
					# Default to allow all | 
				
			||||||
 | 
					$IPT -N udp_outbound | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Used to allow inbound services if desired | 
				
			||||||
 | 
					# Default fail except for established sessions | 
				
			||||||
 | 
					$IPT -N tcp_inbound | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Used to block outbound services from internal network | 
				
			||||||
 | 
					# Default to allow all | 
				
			||||||
 | 
					$IPT -N tcp_outbound | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Populate User Chains | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# bad_packets chain | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Drop INVALID packets immediately | 
				
			||||||
 | 
					$IPT -A bad_packets -p ALL -m conntrack --ctstate INVALID -j LOG \ | 
				
			||||||
 | 
					    --log-prefix "fp=bad_packets:1 a=DROP " | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$IPT -A bad_packets -p ALL -m conntrack --ctstate INVALID -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Then check the tcp packets for additional problems | 
				
			||||||
 | 
					$IPT -A bad_packets -p tcp -j bad_tcp_packets | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# All good, so return | 
				
			||||||
 | 
					$IPT -A bad_packets -p ALL -j RETURN | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# bad_tcp_packets chain | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# All tcp packets will traverse this chain. | 
				
			||||||
 | 
					# Every new connection attempt should begin with | 
				
			||||||
 | 
					# a syn packet.  If it doesn't, it is likely a | 
				
			||||||
 | 
					# port scan.  This drops packets in state | 
				
			||||||
 | 
					# NEW that are not flagged as syn packets. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp ! --syn -m conntrack --ctstate NEW -j LOG \ | 
				
			||||||
 | 
					    --log-prefix "fp=bad_tcp_packets:1 a=DROP " | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp ! --syn -m conntrack --ctstate NEW -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j LOG \ | 
				
			||||||
 | 
					    --log-prefix "fp=bad_tcp_packets:2 a=DROP " | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j LOG \ | 
				
			||||||
 | 
					    --log-prefix "fp=bad_tcp_packets:3 a=DROP " | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG \ | 
				
			||||||
 | 
					    --log-prefix "fp=bad_tcp_packets:4 a=DROP " | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG \ | 
				
			||||||
 | 
					    --log-prefix "fp=bad_tcp_packets:5 a=DROP " | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j LOG \ | 
				
			||||||
 | 
					    --log-prefix "fp=bad_tcp_packets:6 a=DROP " | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG \ | 
				
			||||||
 | 
					    --log-prefix "fp=bad_tcp_packets:7 a=DROP " | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# All good, so return | 
				
			||||||
 | 
					$IPT -A bad_tcp_packets -p tcp -j RETURN | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# icmp_packets chain | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# This chain is for inbound (from the Internet) icmp packets only. | 
				
			||||||
 | 
					# Type 8 (Echo Request) is not accepted by default | 
				
			||||||
 | 
					# Enable it if you want remote hosts to be able to reach you. | 
				
			||||||
 | 
					# 11 (Time Exceeded) is the only one accepted | 
				
			||||||
 | 
					# that would not already be covered by the established | 
				
			||||||
 | 
					# connection rule.  Applied to INPUT on the external interface. | 
				
			||||||
 | 
					#  | 
				
			||||||
 | 
					# See: http://www.ee.siue.edu/~rwalden/networking/icmp.html | 
				
			||||||
 | 
					# for more info on ICMP types. | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Note that the stateful settings allow replies to ICMP packets. | 
				
			||||||
 | 
					# These rules allow new packets of the specified types. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ICMP packets should fit in a Layer 2 frame, thus they should | 
				
			||||||
 | 
					# never be fragmented.  Fragmented ICMP packets are a typical sign | 
				
			||||||
 | 
					# of a denial of service attack. | 
				
			||||||
 | 
					$IPT -A icmp_packets --fragment -p ICMP -j LOG \ | 
				
			||||||
 | 
					    --log-prefix "fp=icmp_packets:1 a=DROP " | 
				
			||||||
 | 
					$IPT -A icmp_packets --fragment -p ICMP -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Echo - uncomment to allow your system to be pinged. | 
				
			||||||
 | 
					# Uncomment the LOG command if you also want to log PING attempts | 
				
			||||||
 | 
					#  | 
				
			||||||
 | 
					# $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j LOG \ | 
				
			||||||
 | 
					#    --log-prefix "fp=icmp_packets:2 a=ACCEPT " | 
				
			||||||
 | 
					# $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# By default, however, drop pings without logging. Blaster | 
				
			||||||
 | 
					# and other worms have infected systems blasting pings. | 
				
			||||||
 | 
					# Comment the line below if you want pings logged, but it | 
				
			||||||
 | 
					# will likely fill your logs. | 
				
			||||||
 | 
					$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Time Exceeded | 
				
			||||||
 | 
					$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Not matched, so return so it will be logged | 
				
			||||||
 | 
					$IPT -A icmp_packets -p ICMP -j RETURN | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TCP & UDP | 
				
			||||||
 | 
					# Identify ports at: | 
				
			||||||
 | 
					#    http://www.chebucto.ns.ca/~rakerman/port-table.html | 
				
			||||||
 | 
					#    http://www.iana.org/assignments/port-numbers | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# udp_inbound chain | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# This chain describes the inbound UDP packets it will accept. | 
				
			||||||
 | 
					# It's applied to INPUT on the external or Internet interface. | 
				
			||||||
 | 
					# Note that the stateful settings allow replies. | 
				
			||||||
 | 
					# These rules are for new requests. | 
				
			||||||
 | 
					# It drops netbios packets (windows) immediately without logging. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Drop netbios calls | 
				
			||||||
 | 
					# Please note that these rules do not really change the way the firewall | 
				
			||||||
 | 
					# treats netbios connections.  Connections from the localhost and | 
				
			||||||
 | 
					# internal interface (if one exists) are accepted by default. | 
				
			||||||
 | 
					# Responses from the Internet to requests initiated by or through | 
				
			||||||
 | 
					# the firewall are also accepted by default.  To get here, the | 
				
			||||||
 | 
					# packets would have to be part of a new request received by the | 
				
			||||||
 | 
					# Internet interface.  You would have to manually add rules to | 
				
			||||||
 | 
					# accept these.  I added these rules because some network connections, | 
				
			||||||
 | 
					# such as those via cable modems, tend to be filled with noise from | 
				
			||||||
 | 
					# unprotected Windows machines.  These rules drop those packets | 
				
			||||||
 | 
					# quickly and without logging them.  This prevents them from traversing | 
				
			||||||
 | 
					# the whole chain and keeps the log from getting cluttered with | 
				
			||||||
 | 
					# chatter from Windows systems. | 
				
			||||||
 | 
					$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j DROP | 
				
			||||||
 | 
					$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 138 -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ident requests (Port 113) must have a REJECT rule rather than the | 
				
			||||||
 | 
					# default DROP rule.  This is the minimum requirement to avoid | 
				
			||||||
 | 
					# long delays while connecting.  Also see the tcp_inbound rule. | 
				
			||||||
 | 
					$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 113 -j REJECT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# A more sophisticated configuration could accept the ident requests. | 
				
			||||||
 | 
					# $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 113 -j ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Not matched, so return for logging | 
				
			||||||
 | 
					$IPT -A udp_inbound -p UDP -j RETURN | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# udp_outbound chain | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# This chain is used with a private network to prevent forwarding for | 
				
			||||||
 | 
					# UDP requests on specific protocols.  Applied to the FORWARD rule from | 
				
			||||||
 | 
					# the internal network.  Ends with an ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# No match, so ACCEPT | 
				
			||||||
 | 
					$IPT -A udp_outbound -p UDP -s 0/0 -j ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# tcp_inbound chain | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# This chain is used to allow inbound connections to the | 
				
			||||||
 | 
					# system/gateway.  Use with care.  It defaults to none. | 
				
			||||||
 | 
					# It's applied on INPUT from the external or Internet interface. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ident requests (Port 113) must have a REJECT rule rather than the | 
				
			||||||
 | 
					# default DROP rule.  This is the minimum requirement to avoid | 
				
			||||||
 | 
					# long delays while connecting.  Also see the tcp_inbound rule. | 
				
			||||||
 | 
					$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 113 -j REJECT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# A more sophisticated configuration could accept the ident requests. | 
				
			||||||
 | 
					# $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 113 -j ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# sshd | 
				
			||||||
 | 
					$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 3938 -j ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Not matched, so return so it will be logged | 
				
			||||||
 | 
					$IPT -A tcp_inbound -p TCP -j RETURN | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# tcp_outbound chain | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# This chain is used with a private network to prevent forwarding for | 
				
			||||||
 | 
					# requests on specific protocols.  Applied to the FORWARD rule from | 
				
			||||||
 | 
					# the internal network.  Ends with an ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# No match, so ACCEPT | 
				
			||||||
 | 
					$IPT -A tcp_outbound -p TCP -s 0/0 -j ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# INPUT Chain | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Process INPUT chain ..." | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Allow all on localhost interface | 
				
			||||||
 | 
					$IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Drop bad packets | 
				
			||||||
 | 
					$IPT -A INPUT -p ALL -j bad_packets | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DOCSIS compliant cable modems | 
				
			||||||
 | 
					# Some DOCSIS compliant cable modems send IGMP multicasts to find | 
				
			||||||
 | 
					# connected PCs.  The multicast packets have the destination address | 
				
			||||||
 | 
					# 224.0.0.1.  You can accept them.  If you choose to do so, | 
				
			||||||
 | 
					# Uncomment the rule to ACCEPT them and comment the rule to DROP | 
				
			||||||
 | 
					# them  The firewall will drop them here by default to avoid | 
				
			||||||
 | 
					# cluttering the log.  The firewall will drop all multicasts | 
				
			||||||
 | 
					# to the entire subnet (224.0.0.1) by default.  To only affect | 
				
			||||||
 | 
					# IGMP multicasts, change '-p ALL' to '-p 2'.  Of course, | 
				
			||||||
 | 
					# if they aren't accepted elsewhere, it will only ensure that | 
				
			||||||
 | 
					# multicasts on other protocols are logged. | 
				
			||||||
 | 
					# Drop them without logging. | 
				
			||||||
 | 
					$IPT -A INPUT -p ALL -d 224.0.0.1 -j DROP | 
				
			||||||
 | 
					# The rule to accept the packets. | 
				
			||||||
 | 
					# $IPT -A INPUT -p ALL -d 224.0.0.1 -j ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Inbound Internet Packet Rules | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Accept Established Connections | 
				
			||||||
 | 
					$IPT -A INPUT -p ALL -i $INET_IFACE -m conntrack --ctstate ESTABLISHED,RELATED \ | 
				
			||||||
 | 
					     -j ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Route the rest to the appropriate user chain | 
				
			||||||
 | 
					$IPT -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound | 
				
			||||||
 | 
					$IPT -A INPUT -p UDP -i $INET_IFACE -j udp_inbound | 
				
			||||||
 | 
					$IPT -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Drop without logging broadcasts that get this far. | 
				
			||||||
 | 
					# Cuts down on log clutter. | 
				
			||||||
 | 
					# Comment this line if testing new rules that impact | 
				
			||||||
 | 
					# broadcast protocols. | 
				
			||||||
 | 
					$IPT -A INPUT -m pkttype --pkt-type broadcast -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Log packets that still don't match | 
				
			||||||
 | 
					$IPT -A INPUT -j LOG --log-prefix "fp=INPUT:99 a=DROP " | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# FORWARD Chain | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Process FORWARD chain ..." | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Used if forwarding for a private network | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# OUTPUT Chain | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Process OUTPUT chain ..." | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Generally trust the firewall on output | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# However, invalid icmp packets need to be dropped | 
				
			||||||
 | 
					# to prevent a possible exploit. | 
				
			||||||
 | 
					$IPT -A OUTPUT -p icmp -m conntrack --ctstate INVALID -j DROP | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Localhost | 
				
			||||||
 | 
					$IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT | 
				
			||||||
 | 
					$IPT -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# To internet | 
				
			||||||
 | 
					$IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Log packets that still don't match | 
				
			||||||
 | 
					$IPT -A OUTPUT -j LOG --log-prefix "fp=OUTPUT:99 a=DROP " | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# nat table | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The nat table is where network address translation occurs if there | 
				
			||||||
 | 
					# is a private network.  If the gateway is connected to the Internet | 
				
			||||||
 | 
					# with a static IP, snat is used.  If the gateway has a dynamic address, | 
				
			||||||
 | 
					# masquerade must be used instead.  There is more overhead associated | 
				
			||||||
 | 
					# with masquerade, so snat is better when it can be used. | 
				
			||||||
 | 
					# The nat table has a builtin chain, PREROUTING, for dnat and redirects. | 
				
			||||||
 | 
					# Another, POSTROUTING, handles snat and masquerade. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Load rules for nat table ..." | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# PREROUTING chain | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# POSTROUTING chain | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# mangle table | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The mangle table is used to alter packets.  It can alter or mangle them in | 
				
			||||||
 | 
					# several ways.  For the purposes of this generator, we only use its ability | 
				
			||||||
 | 
					# to alter the TTL in packets.  However, it can be used to set netfilter | 
				
			||||||
 | 
					# mark values on specific packets.  Those marks could then be used in another | 
				
			||||||
 | 
					# table like filter, to limit activities associated with a specific host, for | 
				
			||||||
 | 
					# instance.  The TOS target can be used to set the Type of Service field in | 
				
			||||||
 | 
					# the IP header.  Note that the TTL target might not be included in the | 
				
			||||||
 | 
					# distribution on your system.  If it is not and you require it, you will | 
				
			||||||
 | 
					# have to add it.  That may require that you build from source. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Load rules for mangle table ..." | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,83 @@ | 
				
			|||||||
 | 
					#!/bin/bash | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					####################################################### | 
				
			||||||
 | 
					#                                                     # | 
				
			||||||
 | 
					#       An install script for zero-to-ready           # | 
				
			||||||
 | 
					#      remote development boxes on Slackware          # | 
				
			||||||
 | 
					#           !!! CURRENTLY UNTESTED !!!                # | 
				
			||||||
 | 
					#                                                     # | 
				
			||||||
 | 
					#      This assumes SSH Port is 3938, change this     # | 
				
			||||||
 | 
					#       in the rc.firewall file to make sure          # | 
				
			||||||
 | 
					#         iptables leaves it open for you.            # | 
				
			||||||
 | 
					#                                                     # | 
				
			||||||
 | 
					#                                                     # | 
				
			||||||
 | 
					# Author: Taylor Bockman <tbockman@taylorbockman.com> # | 
				
			||||||
 | 
					#                                                     # | 
				
			||||||
 | 
					#                                                     # | 
				
			||||||
 | 
					####################################################### | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Add user | 
				
			||||||
 | 
					echo "Enter desired username:" | 
				
			||||||
 | 
					read $newuser | 
				
			||||||
 | 
					useradd -m -g users -G wheel,floppy,audio,video,cdrom,plugdev,power,netdev,lp,scanner -s /bin/bash $newuser | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Modify sudoers to enable wheel group | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Install some critical packages | 
				
			||||||
 | 
					mkdir packages | 
				
			||||||
 | 
					cd packages | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Install Curl | 
				
			||||||
 | 
					wget http://slackware.cs.utah.edu/pub/slackware/slackware64-14.1/slackware64/n/cyrus-sasl-2.1.23-x86_64-5.txz | 
				
			||||||
 | 
					wget http://slackware.cs.utah.edu/pub/slackware/slackware64-14.1/slackware64/n/curl-7.31.0-x86_64-1.txz | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					upgradepkg --install-new cyrus-sasl-2.1.23-x86-64-5.txz | 
				
			||||||
 | 
					upgradepkg --install-new curl-7.31.0-x86_64-1.txz | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Install libpcap and libnl for iptables | 
				
			||||||
 | 
					wget libpcap-1.4.0-x86_64-1.txz | 
				
			||||||
 | 
					wget libnl3-3.2.21-x86_64-1.txz | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					upgradepkg --install-new libpcap-1.4.0-x86_64-1.txz | 
				
			||||||
 | 
					upgradepkg --install-new libnl3-3.2.21-x86_64-1.txz | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cd .. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Become user to install nix | 
				
			||||||
 | 
					echo "Becoming $newuser to install nix and packages..."  | 
				
			||||||
 | 
					su $newuser | 
				
			||||||
 | 
					cd /home/$newuser | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Install Nix | 
				
			||||||
 | 
					curl https://nixos.org/nix/install | sh | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Append the right stuff to the ~/.profiles file so nix is ready | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Install various nix packages | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					packages=("emacs", "vim", "zsh", "git", "tmux", "libpcap") | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for package in "${packages[@]}" | 
				
			||||||
 | 
					do | 
				
			||||||
 | 
					    : | 
				
			||||||
 | 
					    nix-env -i $package | 
				
			||||||
 | 
					done | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Symlink the rc.firewall to the right place | 
				
			||||||
 | 
					# !!!! THIS PART IS SUPER UNTESTED !!!!! | 
				
			||||||
 | 
					sudo ln -s /slackware-sysconfig/rc.firewall /etc/rc.d/rc.firewall | 
				
			||||||
 | 
					sudo chmod +x /etc/rc.d/rc.firewall | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use sed to configure /etc/ssh/sshd_config to be more secure | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Make zsh the default shell | 
				
			||||||
 | 
					command -v zsh | sudo tee -a /etc/shells | 
				
			||||||
 | 
					sudo chsh -s "$(command -v zsh)" "$USER" | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# cd into ~, git clone essentials | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Run essentials dotfile install script | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Restart sshd | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue