Artikelkategori: Säkerhet
Skriven av o21storm 2004-07-01 10:10
url: 

iptables

Kanske kan ge någon nått tips iaf :) Lite brandväggsscript...


#
# FW Script skrivet av Tom Johansson(o21storm), 2003
# Använd hur du vill, jag tar inget ansvar :)
#



#!/bin/sh

clear
# MAIN

IPTABLES=/usr/sbin/iptables
SMTPSERVER=192.168.0.2
SMTPPORT=25
POP3SERVER=192.168.0.3
POP3PORT=110
MORESSHIP=192.168.0.11
MORESSHPORT=21
#Interfaces

EXTERNAL=eth1
INTERNAL=eth0

# Programvariable

PROGG="BGE Firewall 1.0"

#Remote connection
REMOTE="10.10.10.1"
DMZ="Not configured"
SQUID="Yes"


# Firewall rules

echo $PROGG
echo ""
echo "Current settings"
echo ""
echo "------------------------------"
echo "iptables: $IPTABLES"
echo "::PORT ROUTING::"
echo "smtp-server: $SMTPSERVER"
echo "pop3-server: $POP3SERVER"
echo ""
echo "::INTERFACE SETTINGS::"
echo "External(WAN) interface: $EXTERNAL"
echo "DMZ Internface: $DMZ"
echo "Internal(LAN) interface: $INTERNAL"
echo ""
echo "::PROXY SETTINGS"
echo "Squid transparent proxy: $SQUID"
echo ""
echo "::MISC SETTINGS::"
echo "Remote IP Access: $REMOTE"
echo "------------------------------"
echo ""

if [ "$1" = "" ]; then
echo ""
echo "Starta med $0 start"
exit
fi;

# Sätt upp standardregler
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT

# Rensa bort gamla brandväggsregler
$IPTABLES -F
$IPTABLES -t nat -F

# Rensa bort gamla kedjor
$IPTABLES -X

# eth1 utsida
# eth0 insida

# Om maskeringen är kompilerad som modul
# aktivera raden nedan (genom att ta bort # i början på raden)
#modprobe iptable_nat

# Slå på routing
echo "1" > /proc/sys/net/ipv4/ip_forward

# Firewall rules
# IP Adress på eth1 (yttre interface)
MEeth1=`/sbin/ifconfig eth1 |sed -n '/inet/s/^[ ]*inet addr:\([0-9.]*\).*/\1/p'`

# Broadcastadress på eth1
MYBROADCASTeth1=`/sbin/ifconfig eth1 |sed -n '/inet/s/^.*Bcast:\([0-9.]*\).*/\1/p'`

# IP Adress på eth0 (inre interface)
MEeth0=`/sbin/ifconfig eth0 |sed -n '/inet/s/^[ ]*inet addr:\([0-9.]*\).*/\1/p'`

# Broadcastadress på eth0
MYBROADCASTeth0=`/sbin/ifconfig eth0 |sed -n '/inet/s/^.*Bcast:\([0-9.]*\).*/\1/p'`

# Skapa kedjan logdrop som loggar och kastar trafiken
$IPTABLES -N logdrop
$IPTABLES -A logdrop -j LOG
$IPTABLES -A logdrop -j DROP

# Logga och kasta nya TCP-paket som inte är SYN-paket
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "NEW NOT SYN "
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

$IPTABLES -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "NEW NOT SYN "
$IPTABLES -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP


# FORWARDREGLER
# Spärra trafik som kommer till broadcastadressen
$IPTABLES -A FORWARD --in-interface eth1 --destination $MYBROADCASTeth0/32 -j logdrop
$IPTABLES -A FORWARD --in-interface eth0 --destination $MYBROADCASTeth1/32 -j logdrop

# Släpp ut trafik från interna nätet, och släpp in svarstrafik
$IPTABLES -A FORWARD --in-interface eth0 -j ACCEPT
$IPTABLES -A FORWARD --in-interface eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Lägg på maskering på utgående trafik som ska ut till Internet så att
# det ser ut som att det är brandväggens utsida som surfar

$IPTABLES -t nat -A POSTROUTING -o eth1 -j SNAT --to $MEeth1



# Tillåt att prata med sig själv
$IPTABLES -A INPUT --in-interface lo --source 127.0.0.0/8 -j ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Tillåt ssh till server ifrån LAN
$IPTABLES -A INPUT -i eth0 -m state --state NEW -p tcp --syn --destination-port 22 -j ACCEPT
$IPTABLES -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -p tcp --destination-port 22 -j ACCEPT

# Tillåt inkomande proxy anslutningar
$IPTABLES -A INPUT -i eth0 -m state --state NEW -p tcp --syn --destination-port 3128 -j ACCEPT
$IPTABLES -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -p tcp --destination-port 3128 -j ACCEPT

# Tillåt www till server
$IPTABLES -A INPUT -m state --state NEW -p tcp --syn --destination-port 80 -j ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -p tcp --destination-port 80 -j ACCEPT

# Tillå ssl till server
$IPTABLES -A INPUT -m state --state NEW -p tcp --syn --destination-port 443 -j ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -p tcp --destination-port 443 -j ACCEPT

# Routa till transparent proxy
if [ "$SQUID" == "Yes" ]; then
$IPTABLES -t nat -A PREROUTING -i eth0 -p tcp -d ! 192.168.0.1 --dport 80 -j REDIRECT --to-port 3128
fi;

# Routa trafik till pop3 server

$IPTABLES --table nat -A PREROUTING -p tcp --in-interface $EXTERNAL --dport $POP3PORT -j DNAT --to $POP3SERVER:$POP3PORT
$IPTABLES -A FORWARD -p tcp --destination-port $POP3PORT -j ACCEPT

# Routa trafik till smtp server
$IPTABLES --table nat -A PREROUTING -p tcp --in-interface $EXTERNAL --dport $SMTPPORT -j DNAT --to $SMTPSERVER:$SMTPPORT
$IPTABLES -A FORWARD -p tcp --destination-port $SMTPPORT -j ACCEPT

#Routa trafik till Terminal servern
$IPTABLES --table nat -A PREROUTING -p tcp --in-interface $EXTERNAL --source $REMOTE --dport 3389 -j DNAT --to 192.168.0.5:33$
$IPTABLES -A FORWARD -p tcp --destination-port 3389 -j ACCEPT

# Routa trafik till citrix servern
$IPTABLES --table nat -A PREROUTING -p tcp --in-interface $EXTERNAL --dport 433 -j DNAT --to 192.168.0.4:1494
$IPTABLES -A FORWARD -p tcp --destination-port 1494 -j ACCEPT

# Logga och spärra resten
$IPTABLES -A INPUT -j logdrop
$IPTABLES -A FORWARD -j logdrop
echo "$PROGG startad"
×