Setting up a good firewall is an essential step to take in securing any modern operating system. Most Linux distributions ship with a few different firewall tools that we can use to configure our firewalls. In this guide, we’ll be covering the iptables firewall.
A good starting point is check the current rules that are configured for iptables if there is any.
# iptables -L
Install Instructions
Add script to startup when network start up:
# nano -w /etc/network/interfaces
Add these:
pre-up `/etc/network/firewall pre-up` up `/etc/network/firewall start`
Example added:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
#
# The loopback network interface
auto lo
iface lo inet loopback
#
# The primary network interface
auto eth0
iface eth0 inet static
address 10.10.10.2
netmask 255.255.255.0
network 10.10.10.0
broadcast 10.10.10.255
gateway 10.10.10.1
pre-up `/etc/network/firewall pre-up`
up `/etc/network/firewall start`
Then you need firewall script, so:
touch /etc/network/firewall chmod 750 /etc/network/firewall
Modify firewall script what you needed:
#/bin/sh
IP="10.10.10.2"
IF="eth0"
case "$1" in start)
# tiputetan kaikki
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# sallitaan localhostissa liikenne molempiin suuntiin
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#----------------------------------------------#
# Outgoing connections #
#----------------------------------------------#
# DNS
iptables -A OUTPUT -p udp --dport domain -j ACCEPT
iptables -A OUTPUT -p tcp --dport domain -j ACCEPT
# NTP
iptables -A OUTPUT -p udp --dport ntp -o $IF -j ACCEPT
# SSH / HTTP
iptables -A OUTPUT -p tcp --dport ssh -o $IF -j ACCEPT
iptables -A OUTPUT -p tcp --dport http -o $IF -j ACCEPT
iptables -A OUTPUT -p tcp --dport https -o $IF -j ACCEPT
# SMTP
iptables -A OUTPUT -p tcp -s $IP --dport 25 -o $IF -j ACCEPT
# ICMP
iptables -A INPUT -p icmp --icmp-type 8 -d $IP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -s $IP -m state --state ESTABLISHED,RELATED -j ACCEPT
#------------------------------------------------#
# Incoming connections #
#------------------------------------------------#
# Allow Established and Related Incoming/Outgoing Connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH
iptables -A INPUT -p tcp -d $IP --dport 22 -i $IF -j ACCEPT
;; stop)
iptables -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;; restart)
$0 stop ; $0 start
;; reload)
$0 start
;; pre-up)
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
;;
*)
echo "Usage: $0 {start|stop|restart|reload}" >&2
exit 1
;;
esac
exit 0