On Thursday 09 March 2006 02:19, Vladimir Vitkov wrote:
> # populating invalid/broken/shit
> $IPT -A bad_packets -p ALL -i $INET_IFACE -s $LOCAL_NET -j DROP
> $IPT -A bad_packets -p ALL -m state --state INVALID -j DROP
> $IPT -A bad_packets -p tcp -j bad_tcp_packets
> $IPT -A bad_packets -p ALL -j RETURN
>
> # Portscans mbuahahahah
> $IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j REJECT
> --reject-with icmp-host-unreachable
> $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j REJECT
> $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j REJECT
> $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j REJECT
> $IPT -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j
> REJECT $IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j REJECT
> $IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j REJECT $IPT
> -A bad_tcp_packets -p tcp -j protections
> $IPT -A bad_tcp_packets -p tcp -j RETURN
>
> # Protections from rusty russel
> $IPT -A protections -p tcp --syn -m limit --limit 5/s -j ACCEPT
> $IPT -A protections -p icmp --icmp-type echo-request -m limit --limit 5/s
> -j ACCEPT $IPT -A protections -p ALL -j RETURN
> # efg
> $IPT -A protections --fragment -p ICMP -j REJECT
> $IPT -A protections -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
> $IPT -A protections -j RETURN
>
> # incoming udp services
> for PORT in $EXTERN_PORTS ; do
>         $IPT -A udp_inbound -p UDP -s 0/0 --dport $PORT -j ACCEPT
> done
> $IPT -A udp_inbound -p UDP -j RETURN
>
> $IPT -A udp_outbound -p UDP -s 0/0 -j ACCEPT
>
> # incoming tcp services
> for PORT in $EXTERN_PORTS ; do
>         $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port $PORT -j
> ACCEPT done
> $IPT -A tcp_inbound -p TCP -j RETURN
>
> # outgoing tcp services
> $IPT -A tcp_outbound -p TCP -s 0/0 -j ACCEPT
>
> echo "Process INPUT chain ..."
> # Start feeding the pig
> $IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT
> $IPT -A INPUT -p ALL -j bad_packets
> # local access
> $IPT -A INPUT -p ALL -i $LOCAL_IFACE -s $LOCAL_NET                       -j
> ACCEPT $IPT -A INPUT -p ALL -i $LOCAL_IFACE -d $LOCAL_BCAST                
>     -j ACCEPT
>
> $IPT -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j
> ACCEPT
>
> $IPT -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound
> $IPT -A INPUT -p UDP -i $INET_IFACE -j udp_inbound
>
> $IPT -A INPUT -m pkttype --pkt-type broadcast -j DROP
>
> echo "Process FORWARD chain ..."
> $IPT -A FORWARD -p ALL -j bad_packets
> $IPT -A FORWARD -p tcp -i $LOCAL_IFACE -j tcp_outbound
> $IPT -A FORWARD -p udp -i $LOCAL_IFACE -j udp_outbound
> $IPT -A FORWARD -p ALL -i $LOCAL_IFACE -j ACCEPT
> $IPT -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j
> ACCEPT
>
> echo "Process OUTPUT chain ..."
> $IPT -A OUTPUT -m state -p icmp --state INVALID -j DROP
> $IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
> $IPT -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT
> $IPT -A OUTPUT -p ALL -s $LOCAL_IP -j ACCEPT
> $IPT -A OUTPUT -p ALL -o $LOCAL_IFACE -j ACCEPT
> $IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT
>
> echo "Load rules for nat table ..."
> ## DNAT's
> $IPT -t nat -A PREROUTING -p tcp -i $INET_IFACE --dport <port> -j DNAT --to
> <ip>:<port>
>
> ## MASQ & SNAT
> $IPT -t nat -A POSTROUTING -s <IP> -o $INET_IFACE -j SNAT --to-source
> $INET_ADDRESS $IPT -t nat -A POSTROUTING -s <IP2>  -o $INET_IFACE -j
> MASQUERADE
>
> echo "Load rules for mangle table ..."
> $IPT -t mangle -A PREROUTING -i $LOCAL_IFACE -j TTL --ttl-inc 1
> $IPT -t mangle -A POSTROUTING -o $LOCAL_IFACE -j TTL --ttl-inc 1
>
> $IPT -t mangle -A PREROUTING -i $INET_IFACE -j TTL --ttl-inc 1
> $IPT -t mangle -A POSTROUTING -o $INET_IFACE -j TTL --ttl-set 128
>
> # mangle MAC protection
> $IPT -t mangle -A PREROUTING -i $LOCAL_IFACE -s <IP> -m mac --mac-source !
> <mac> -j DROP
>
> $IPT -P INPUT DROP
> $IPT -P OUTPUT DROP
> $IPT -P FORWARD DROP
> ======== FW END   =========
>
> Моля за за съвети/забележки и т.н.
> Да знам че е селско да разчитам ня някакви скриптове за такова нещо но
> самият FW е сглобяван преди толкова време и толкова пъти е надграждан на
> парче че не ми се мисли. Конкретно в случая търся помощ по следните
> въпроси:
> 1) Защо по дяволите порт който би трябвали да е брутално затворен не е?
> 2) как конекция в състояние NEW минава пре firewall който няма правило от
> типа  "-m state NEW -j ACCEPT"??
Като попрегледах набързо, без да се задълбочавам, струва ми се че всички 
нормални TCP конекции, независимо от порта, минават по следния път:
[bad_packets] => [bad_tcp_packets] => [protections] => ACCEPT(още с първото 
правило модул limit)
В действителност рутера ти е отворен, а не затворен за света!

Георги Акабалиев

Reply via email to