Saját iptables

Jött egy ötlet, hogy "dobjam be a közösbe" az iptables scriptet amit készítettem. A fórumot kihagynám, van már elég téma, meg elég hosszú is szerintem, ezt nem nagyon szeretik a fórumban, ezért csak ide raknám be.
Az eredetit illesztem be, nem amit az iptables-save készít, így eredetibb:

Kis módosítás! Vélemények jöhetnek
eth2 = LAN
eth0 = INT

#!/bin/bash

echo "Start firewall input and output filter..."

# szukseges modul betoltese
modprobe ip_conntrack_ftp

# lancok alaphelyzetbe allitasa
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -F
iptables -X
iptables -N in_attack
iptables -N syn_flood

#---------------------------INPUT-------------------------------
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# innen már csak SYN csomagok jöhetnének
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --syn -m state --state NEW -j ACCEPT

iptables -A INPUT -i eth2 -d 192.168.2.1 -p icmp -j ACCEPT
ping beengedése, először 5, majd mp-ént 1
iptables -A INPUT -p icmp -i eth1 -m limit --limit=1/s --limit-burst=5 -j LOG --log-prefix "ICMP_ACCEPT: "
iptables -A INPUT -p icmp -i eth1 -m limit --limit=1/s --limit-burst=5 -j ACCEPT

iptables -A INPUT -d 255.255.255.255 -j DROP
iptables -A INPUT -d 224.0.0.0/8 -j DROP

# samba engedese
# bár már csak SYN lehet, de azért megkövetelem. (de lehet kikerül, ha lebeszéltek róla :))
iptables -A INPUT -i eth2 -p udp --sport 137 --dport 137 -j ACCEPT
iptables -A INPUT -i eth2 -p udp --sport 138 --dport 138 -j ACCEPT
iptables -A INPUT -i eth2 -p tcp --syn -m state --state NEW --dport 445 -j ACCEPT
iptables -A INPUT -i eth2 -p tcp --syn -m state --state NEW --dport 139 -j ACCEPT

# LAN felol a 80-as port engedese
iptables -A INPUT -i eth2 -p tcp --syn -m state --state NEW --dport 80 -j ACCEPT

# gyanus csomagok eldobasa
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j in_attack
iptables -A INPUT -i eth0 -s 172.16.0.0/16 -j in_attack
iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j in_attack
iptables -A INPUT -i eth2 -s ! 192.168.2.0/24 -j in_attack

# ssh beengedese es loggolasa
iptables -A INPUT -p tcp --syn -m state --state NEW --dport 22 -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "ssh_befele: "
iptables -A INPUT -p tcp --syn -m state --state NEW --dport 22 -m limit --limit 3/m --limit-burst 1 -j ACCEPT
iptables -A INPUT -p tcp --syn -m state --state NEW --dport 22 -j DROP

# minden mas eldobasa elotte loggolasa
iptables -A INPUT -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "tiltott_bejovo_kapcsolat: "
iptables -A INPUT -j DROP

#-------------------------OUTPUT--------------------------------
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# gaim(1863),novell-zen(2544),irc(6667)
iptables -A OUTPUT -p tcp --syn -m state --state NEW -m multiport --dport 20,21,22,25,80,8080,110,443,1863,2544,6667 -j ACCEPT
iptables -A OUTPUT -p udp --dport 21 -j ACCEPT
# dns
iptables -A OUTPUT -p udp első DNS IP --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp második DNS IP --dport 53 -j ACCEPT

# minden mas loggolva lesz
iptables -A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "DROP_OUT_PACK: "
iptables -A OUTPUT -j DROP

#--------------------in_attack-------------------------------

iptables -A in_attack -m limit --limit 10/min --limit-burst=1 -j LOG --log-prefix "in_attack: "
iptables -A in_attack -j DROP

#------------------------------------------------------------
#----ezek akkor lesznek érvényesek ha lesz belső hálózat-----
#------------------------------------------------------------
# NAT letrehozasa
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.2.0/24 -j MASQUERADE

# Syn-flood vedelem:

iptables -A FORWARD -p tcp --syn -m state --state NEW -j syn_flood
iptables -A syn_flood -p tcp --syn -m limit --limit 5/s --limit-burst=10 -j RETURN
iptables -A syn_flood -p tcp --syn -m limit --limit 1/s --limit-burst=1 -j LOG --log-prefix "SYN_DROP "
iptables -A syn_flood -p tcp --syn -j DROP

# Alattomos portscan elleni vedelem:
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# A halál pingje elleni vedelem:
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# Internet lelől ne jöjjenek SYN csomagok
iptables -A FORWARD -i eth0 -o eth2 -m state --state NEW -j DROP

# kiépített kapcsolat csomagjainak engedése
iptables -A FORWARD -i eth0 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth2 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i eth2 -o eth0 -p tcp -m multiport --dport 20,21,80,110,443,1863,51240,6667,9100 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth0 -d DNS1IP -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth0 -d DNS2IP -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth0 -p udp --dport 53 -j LOG --log-prefix "DNS REQUEST DROP "
iptables -A FORWARD -i eth2 -o eth0 -p udp --dport 53 -j DROP
# 192.168.1.0/24 = beső háló
iptables -A FORWARD -s 192.168.2.1/24 -p tcp --dport 25 -j mail_check
# érdemes lehet megszabni a célszervereket
iptables -A FORWARD -i eth1 -o eth0 -p udp --dport 123 -j ACCEPT
# minden mas loggolva lesz
iptables -A FORWARD -m limit --limit 3/min -j LOG --log-prefix "DROP_forward_PACK: "
iptables -A FORWARD -j DROP

#--------------------mail_check-------------------------------

iptables -A mail_check -d MY_Mail_Server -j ACCEPT
iptables -A mail_check -d T-Online -j ACCEPT
iptables -A mail_check -d T-Online2 -j ACCEPT
iptables -A mail_check -d Masik_engedelyezett -j ACCEPT
iptables -A mail_check -j LOG --log-prefix "MAIL_DROP "
iptables -A mail_check -j DROP

Hát ennyire futotta tőlem, de megmondo őszintén nekem nagyon tetszik, elsősorban azért, mert végre ez saját, másrészt mindenről kapok logot ami érdekel.

Következő dolgom most a levelezés (postfix és valami pop3/imap4 szerver) és Samba elsajátítása lesz.

Amiért szertem még ezt a tűzfalat, hogy pl a Samba szükséges portjait is innen tudtam meg:
iptables -A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "DROP_OUT_PACK: "
iptables -A OUTPUT -j DROP
és az msn -ét is és a torrentét is, meg mindenét. Nem kellett keresgélni, elég volt belenézni mit dobott el és azt megnyitni. Ajánlom minden kezdő Linuxos számára. Persze csak okosan a loggal!!

Hozzászólások

Szia!

Nem vittem túlzásba az ismerkedést az iptablessel. Van vmi magyar nyelvű link ahol igen szájbarágósan elmagyarázva meg lehet tanulni? Eddig csak c&p módszerrel kész konfigokat használtam, de kedvet kaptam hozzá :-)