Thursday 26 August 2010

Linux IPTables Firewall #1

Το πρώτο πράγμα που με συνάρπασε στο Linux ήταν και είναι ο πυρήνας τους. Πρόκειται για ένα λειτουργικό που πραγματικά είναι μοναδικό από όλες τις απόψεις. Αν και είμαι τις φιλοσοφίας ότι πάντα πρέπει να χρησιμοποιούμε το λογισμικό που μας κάνει τη ζωή πιο εύκολη πάνω στο συγκεκριμένο θέμα, networking, firewall, routing και bandwidth management, δεν δέχομαι καμία άλλη άποψη και αυτό γιατί ξέρω πραγματικά πόσο ευέλικτες μπορεί να είναι οι λύσεις που προσφέρει το Linux. Για να μη μακρηγορώ η αγαπημένη μου διανομή (distro) είναι το Centos.




Παρακάτω παραθέτω κάποια script που τρέχουν στο pc που χρησιμοποιώ ως router και σκοπό έχουν να διαφυλάξουν το εσωτερικό δίκτυο και φυσικά να προσφέρουν την απόλυτη απόλαυση στο surfάρσισμα.



1ο Script (IPTABLES)



#!/bin/bash



#

# Binaries

#



PATH="/bin:/sbin:/usr/bin"



#

# Standard Configuration Parameters

#



# Accept and Flush ALL

iptables -F

iptables -t nat -F

iptables -t mangle -F

iptables -X

iptables -t nat -X

iptables -t mangle -X

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT



# Drop ALL

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP



#

# Create Custom Chains

#



iptables -N INVALID

iptables -N INVPACKETS

iptables -N GOOD_TCP_PACKETS

iptables -N BAD_TCP_PACKETS

iptables -N BADPACKETS

iptables -N TCP_FLAGS

iptables -N BADFLAGS

iptables -N IEXT

iptables -N WEXT

iptables -N LAN

iptables -N OK

iptables -N LAN_NET

iptables -N NET_LAN

iptables -N VPN

iptables -t mangle -N SHAPEIN

iptables -t mangle -N SHAPEOUT



# Localhost

iptables -A INPUT -p all -i lo -j ACCEPT

iptables -A OUTPUT -p all -o lo -j ACCEPT



#

# Logs

#



iptables -A BADFLAGS -j LOG --log-prefix "IPT BADFLAGS: "

iptables -A BADFLAGS -j DROP

iptables -A BADPACKETS -j LOG --log-prefix "IPT BADPACKETS: "

iptables -A BADPACKETS -j DROP

iptables -A INVPACKETS -j LOG --log-prefix "IPT INVALID: "

iptables -A INVPACKETS -j DROP



#

# Stateful Checks $ Tricks

#



iptables -A GOOD_TCP_PACKETS -p tcp --syn -j ACCEPT

iptables -A GOOD_TCP_PACKETS -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INVALID -p all -m state --state INVALID -j INVPACKETS

iptables -A BAD_TCP_PACKETS -p tcp ! --syn -m state --state NEW -j BADPACKETS

iptables -A TCP_FLAGS -p tcp --tcp-flags ACK,FIN FIN -j BADFLAGS

iptables -A TCP_FLAGS -p tcp --tcp-flags ACK,PSH PSH -j BADFLAGS

iptables -A TCP_FLAGS -p tcp --tcp-flags ACK,URG URG -j BADFLAGS

iptables -A TCP_FLAGS -p tcp --tcp-flags FIN,RST FIN,RST -j BADFLAGS

iptables -A TCP_FLAGS -p tcp --tcp-flags SYN,FIN SYN,FIN -j BADFLAGS

iptables -A TCP_FLAGS -p tcp --tcp-flags SYN,RST SYN,RST -j BADFLAGS

iptables -A TCP_FLAGS -p tcp --tcp-flags ALL ALL -j BADFLAGS

iptables -A TCP_FLAGS -p tcp --tcp-flags ALL NONE -j BADFLAGS

iptables -A TCP_FLAGS -p tcp --tcp-flags ALL FIN,PSH,URG -j BADFLAGS

iptables -A TCP_FLAGS -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j BADFLAGS

iptables -A TCP_FLAGS -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j BADFLAGS



#

# Chain Jumps

#



iptables -A INPUT -i $INET -j IEXT

iptables -A OUTPUT -o $INET -j OK

iptables -A INPUT -i $WNET -j WEXT

iptables -A OUTPUT -o $WNET -j OK

iptables -A INPUT -i $LAN -j LAN

iptables -A OUTPUT -o $LAN -j LAN

iptables -A INPUT -i $VPN -j VPN

iptables -A OUTPUT -o $VPN -j VPN

iptables -A FORWARD -i $LAN -o $INET -j LAN_NET

iptables -A FORWARD -i $LAN -o $WNET -j LAN_NET

iptables -A FORWARD -i $INET -o $LAN -j NET_LAN

iptables -A FORWARD -i $WNET -o $LAN -j NET_LAN

iptables -A FORWARD -i $VPN -j LAN_NET

iptables -t mangle -A FORWARD -o $LAN -j SHAPEIN

iptables -t mangle -A FORWARD -o $INET -j SHAPEOUT



#

# Banned Hosts

#



iptables -A IEXT -s $BANNED -j DROP

iptables -A IEXT -d $BANNED -j DROP

iptables -A WEXT -s $BANNED -j DROP

iptables -A WEXT -d $BANNED -j DROP

iptables -A LAN_NET -d $BANNED -j DROP

iptables -A NET_LAN -s $BANNED -j DROP



#

# Open Ports External Interfaces

#



# Internet Interface

iptables -A IEXT -j INVALID

iptables -A IEXT -j BAD_TCP_PACKETS

iptables -A IEXT -j TCP_FLAGS

iptables -A IEXT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT

iptables -A IEXT -p tcp --dport 20 -j GOOD_TCP_PACKETS

iptables -A IEXT -p tcp --dport 21 -j GOOD_TCP_PACKETS

iptables -A IEXT -p tcp --dport 25 -j GOOD_TCP_PACKETS

iptables -A IEXT -p tcp --dport 80 -j GOOD_TCP_PACKETS

iptables -A IEXT -p tcp --dport 143 -j GOOD_TCP_PACKETS

iptables -A IEXT -p tcp --dport 443 -j GOOD_TCP_PACKETS

iptables -A IEXT -p tcp --dport 3306 -j GOOD_TCP_PACKETS

iptables -A IEXT -p tcp --dport 10000 -j GOOD_TCP_PACKETS

iptables -A IEXT -p tcp -m tcp --dport 49160:49300 -j GOOD_TCP_PACKETS

iptables -A IEXT -p tcp -m tcp --sport 49160:49300 -j GOOD_TCP_PACKETS

iptables -A IEXT -p tcp --dport 1723 -j ACCEPT

iptables -A IEXT -p udp --dport 1723 -j ACCEPT

iptables -A IEXT -p udp --dport 67:68 --sport 67:68 -j ACCEPT

iptables -A IEXT -p udp --dport 53 -j ACCEPT

iptables -A IEXT -p udp --dport 53 -j ACCEPT

iptables -A IEXT -p udp --dport 123 -j ACCEPT

iptables -A IEXT -p udp --dport 123 -j ACCEPT

iptables -A IEXT -m state --state ESTABLISHED,RELATED -j ACCEPT



# Wireless Interface

iptables -A WEXT -j INVALID

iptables -A WEXT -j BAD_TCP_PACKETS

iptables -A WEXT -j TCP_FLAGS

iptables -A WEXT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT

iptables -A WEXT -p tcp --dport 20 -j GOOD_TCP_PACKETS

iptables -A WEXT -p tcp --dport 21 -j GOOD_TCP_PACKETS

iptables -A WEXT -p tcp --dport 22 -j GOOD_TCP_PACKETS

iptables -A WEXT -p tcp --dport 25 -j GOOD_TCP_PACKETS

iptables -A WEXT -p tcp --dport 80 -j GOOD_TCP_PACKETS

iptables -A WEXT -p udp --dport 53 -j ACCEPT

iptables -A WEXT -p udp --dport 53 -j ACCEPT

iptables -A WEXT -p udp --dport 123 -j ACCEPT

iptables -A WEXT -p udp --dport 123 -j ACCEPT

iptables -A WEXT -m state --state ESTABLISHED,RELATED -j ACCEPT



# Output Wireless & Internet

iptables -A OK -p all -d 0/0 -j ACCEPT

iptables -A OK -m state --state ESTABLISHED,RELATED -j ACCEPT



# Lan Trusted Interface

iptables -A LAN -p all -s $LAN_MASK -j ACCEPT

iptables -A LAN -m state --state ESTABLISHED,RELATED -j ACCEPT



# VPN

iptables -A VPN -p all -s $VPN_MASK -j ACCEPT

iptables -A VPN -m state --state ESTABLISHED,RELATED -j ACCEPT



#

# Forward Rules

#



# From Lan to Internet and Wireless

iptables -A LAN_NET -j ACCEPT

iptables -A LAN_NET -m state --state ESTABLISHED,RELATED -j ACCEPT



# From Internet and Wireless to Lan

iptables -A NET_LAN -p tcp -d $DB --dport 3389 -j ACCEPT

iptables -A NET_LAN -p tcp -d $DB --dport 19064 -j ACCEPT

iptables -A NET_LAN -p udp -d $DB --dport 19064 -j ACCEPT

iptables -A NET_LAN -p tcp -d $DB --dport 3830 -j ACCEPT

iptables -A NET_LAN -p udp -d $DB --dport 3830 -j ACCEPT

iptables -A NET_LAN -p tcp -d $DB --dport 19065 -j ACCEPT

iptables -A NET_LAN -p udp -d $DB --dport 19065 -j ACCEPT

iptables -A NET_LAN -p tcp -d $NICK --dport 35980 -j ACCEPT

iptables -A NET_LAN -p udp -d $NICK --dport 35980 -j ACCEPT

iptables -A NET_LAN -m state --state ESTABLISHED,RELATED -j ACCEPT



#

# NAT

#



iptables -t nat -A POSTROUTING -o $INET -j SNAT --to-source $INET_IP

iptables -t nat -A POSTROUTING -o $WNET -j SNAT --to-source $WNET_IP

iptables -t nat -A POSTROUTING -o $VPN -j SNAT --to-source $VPN_IP

iptables -t nat -A POSTROUTING -o $FAKE -s $DB -j SNAT --to-source $FAKE_IP

iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination $DB

iptables -t nat -A PREROUTING -p tcp --dport 3830 -j DNAT --to-destination $DB

iptables -t nat -A PREROUTING -p tcp --dport 19064 -j DNAT --to-destination $DB

iptables -t nat -A PREROUTING -p udp --dport 19064 -j DNAT --to-destination $DB

iptables -t nat -A PREROUTING -p tcp --dport 19065 -j DNAT --to-destination $DB

iptables -t nat -A PREROUTING -p udp --dport 19065 -j DNAT --to-destination $DB

iptables -t nat -A PREROUTING -p tcp --dport 35980 -j DNAT --to-destination $NICK

iptables -t nat -A PREROUTING -p udp --dport 35980 -j DNAT --to-destination $NICK



# EOF

No comments:

Post a Comment