( zamolxyse | 2007. 11. 30., p – 14:13 )

#!/bin/sh

echo "==================== Tüzfal inditása ===================================="

## Megkeressük az iptables -t
IPTABLES="/sbin/iptables"
IPTS="/sbin/iptables-save"
IPTR="/sbin/iptables-restore"

# Internet interface adatai
INET_IFACE="eth0"
INET_ADDRESS="192.168.0.100"

# Intranet interface adatai
LO_IFACE="lo"
LO_IP="127.0.0.1"

echo "Kernel modulok betöltése:............................................[OK]"

/sbin/depmod -a

/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
# /sbin/modprobe iptable_filter
# /sbin/modprobe iptable_mangle
# /sbin/modprobe iptable_nat
# /sbin/modprobe ipt_LOG
# /sbin/modprobe ipt_limit
# /sbin/modprobe ipt_MASQUERADE
# /sbin/modprobe ipt_owner
# /sbin/modprobe ipt_REJECT
# /sbin/modprobe ipt_mark
# /sbin/modprobe ipt_tcpmss
# /sbin/modprobe multiport
# /sbin/modprobe ipt_state
# /sbin/modprobe ipt_unclean
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc

echo "Kernel paraméterek beállítása:.......................................[OK]"
# IP továbbítás engedélyezése.
echo "1" > /proc/sys/net/ipv4/ip_forward
# DynamicAddr engedélyezése.
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
# SYN Flood védelem aktiválása.
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# This enables source validation by reversed path according to RFC1812.
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
# This option allows a subnet to be firewalled with a single IP address.
#echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
# ICMP csomagok elfogadása.
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# This option can be used to accept or refuse source routed
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
# This option can disable ICMP redirects. ICMP redirects
#echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
# Secure_redirect kérések elfogadása csak az alapértelmezett gateway-től.
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
# Valótlan címekről érkező csomagok naplózása.
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

echo "Irányelvek beállítása:...............................................[OK]"

echo "Alapértelmezett szabályok irányelveinek átállítása:..................[OK]"
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT

echo "Láncok szabályainak törlése:.........................................[OK]"
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F

echo "Üres láncok törlése:.................................................[OK]"
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

echo "Irányelvek beállítása:...............................................[OK]"
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

echo "Saját láncok és szabályok létrehozása, beállítása:...................[OK]"

$IPTABLES -N bad_packets
$IPTABLES -N bad_tcp_packets
$IPTABLES -N icmp_packets
$IPTABLES -N udp_inbound
$IPTABLES -N udp_outbound
$IPTABLES -N tcp_inbound
$IPTABLES -N tcp_outbound

echo "Saját láncok és szabályok beállítása:................................[OK]"

### bad_packets szabályok
$IPTABLES -A bad_packets -p ALL -m state --state INVALID -j LOG --log-prefix "Invalid packet: "
$IPTABLES -A bad_packets -p ALL -m state --state INVALID -j DROP
$IPTABLES -A bad_packets -p tcp -j bad_tcp_packets
$IPTABLES -A bad_packets -p ALL -j RETURN

### bad_tcp_packets szabályok
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn: "
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j LOG --log-prefix "Stealth scan: "
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j DROP
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "Stealth scan: "
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-prefix "Stealth scan: "
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG --log-prefix "Stealth scan: "
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "Stealth scan: "
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix "Stealth scan: "
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A bad_tcp_packets -p tcp -j RETURN

### icmp_packets szabályok
$IPTABLES -A icmp_packets --fragment -p ICMP -j LOG --log-prefix "ICMP Fragment: "
$IPTABLES -A icmp_packets --fragment -p ICMP -j DROP
# $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j LOG --log-prefix "Ping detected: "
# $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j DROP
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -j RETURN
#
echo "Szerver szolgáltatások engedélyezése:................................[OK]"
#
### udp_inbound szabályok
# NetBIOS Server"
#$IPTABLES -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j DROP
#$IPTABLES -A udp_inbound -p UDP -s 0/0 --destination-port 138 -j DROP

# Network Time Protocol (NTP) Server"
$IPTABLES -A udp_inbound -p UDP -s 0/0 --destination-port 123 -j ACCEPT
$IPTABLES -A udp_inbound -p UDP -s 0/0 --destination-port 123 -j LOG --log-prefix NTP

# DNS Server
# $IPTABLES -A udp_inbound -p UDP -s 0/0 --source-port 53 -j ACCEPT
$IPTABLES -A udp_inbound -p UDP -s 0/0 --destination-port 53 -j ACCEPT
$IPTABLES -A udp_inbound -p UDP -s 0/0 --destination-port 53 -j LOG --log-prefix DNS

# Not matched, so return for logging
$IPTABLES -A udp_inbound -p UDP -j RETURN

### udp_outbound szabályok
# No match, so ACCEPT
$IPTABLES -A udp_outbound -p UDP -s 0/0 -j ACCEPT

### tcp_inbound szabályok
# DNS Server - Allow TCP connections (zone transfers and large requests)
# $IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 53 -j ACCEPT

# HTTP (Web Server)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j LOG --log-prefix HTTP

# HTTPS (Secure Web Server)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 443 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 443 -j LOG --log-prefix HTTPS

# FTP Server (Control)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 21 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 21 -j LOG --log-prefix FTP

# FTP Client (Data Port for non-PASV transfers)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --source-port 20 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --source-port 20 -j LOG --log-prefix FTP

# Passive FTP
# $IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 62000:64000 -j ACCEPT
# $IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 62000:64000 -j LOG --log-prefix FTP

# Email Server (SMTP)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 25 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 25 -j LOG --log-prefix SMTP

# Email Server (POP3)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 110 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 110 -j LOG --log-prefix POP3

# Email Server (IMAP4)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 143 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 143 -j LOG --log-prefix IMAP4

# SSL Email Server (POP3s)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 995 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 995 -j LOG --log-prefix POP3s

# SSL Email Server (IMAP4)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 993 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 993 -j LOG --log-prefix IMAP4s

# SSH (SSH server)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 55555 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 55555 -j LOG --log-prefix SSH

# Not matched, so return so it will be logged
$IPTABLES -A tcp_inbound -p TCP -j RETURN

### tcp_outbound szabályok
# No match, so ACCEPT
$IPTABLES -A tcp_outbound -p TCP -s 0/0 -j ACCEPT

echo "INPUT lánc beállítása:...............................................[OK]"

# Allow all on localhost interface
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -j ACCEPT

# Drop bad packets
$IPTABLES -A INPUT -p ALL -j bad_packets

# DOCSIS kompatibilis kábelmodem beállítása.
#$IPTABLES -A INPUT -p ALL -d 224.0.0.1 -j DROP
#$IPTABLES -A INPUT -p ALL -d 224.0.0.1 -j ACCEPT

# Accept Established Connections
$IPTABLES -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

# Route the rest to the appropriate user chain
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_inbound
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

# Drop without logging broadcasts that get this far.
$IPTABLES -A INPUT -m pkttype --pkt-type broadcast -j DROP

# Log packets that still don't match
# $IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-prefix "INPUT packet died: " --log-level 4
$IPTABLES -A INPUT -j LOG --log-prefix "INPUT packet died: " --log-level 4
$IPTABLES -A INPUT -j DROP

echo "FORWARD lánc beállítása:.............................................[OK]"

echo "OUTPUT lánc beállítása:..............................................[OK]"
# However, invalid icmp packets need to be dropped
$IPTABLES -A OUTPUT -m state -p icmp --state INVALID -j DROP

# Localhost
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT

# To internet
$IPTABLES -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT

# Log packets that still don't match
# $IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-prefix "OUTPUT packet died: " --log-level 4
$IPTABLES -A OUTPUT -j LOG --log-prefix "OUTPUT packet died: " --log-level 4
$IPTABLES -A OUTPUT -j DROP

echo "====================== Tüzfal betöltése kész! ==========================="

véleményt szeretnék kérni erröl a tüzfalszabályról mennyire sikerült összehozni, illetve mi az amit kihagytam vagy rosszul csináltam