Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: Страннотии с firewall-a


  • Subject: Re: lug-bg: Страннотии с firewall-a
  • From: Ivaylo Toshev <ivaylo.toshev@xxxxxxxxx>
  • Date: Thu, 09 Mar 2006 09:27:14 +0200
  • Delivered-to: lug-bg-list@xxxxxxxxxxxxxxxxxx
  • Delivered-to: lug-bg@xxxxxxxxxxxxxxxxxx
  • Organization: Unimasters Logistics Group

Здрасти,

Първо - изпол.зването на разни такива скриптове за изи конфигуриране на защитна стена е много съмнително какво дава като резултат, още повече ако не си съвсем наясно какво прави този скрипт. Не мога сега да го проследя, а не искам да го изпълнявам за да видя какво точно прави.
Така че - най-добре е да пратиш резултата, т.е.

iptables -L -n

iptables -t nat -L -n

Vladimir Vitkov написа:
Здрасти банда (no offence pls),

имам следния сетъп
net -> pppoe (ppp0) -> linux (forwarding/masq/snat/dnat) -> eth0 -> clients (ludnica)

1) Това е локална мрежа
2) това е студентско изпълнение
3) само познати сме тези които делим конекцията

По мое скромно мнение машината би трябвало да е затворена от текущия firewall но не е

Предистория:
Днес си играх с Privoxy и съвсем случайно прегледах /var/log/mailog и там видях
отхвърлен релаъ до yahoo. реших да проверя и се оказа че порт 25 е достъпен отвън
въпреки че е изрично забранен. Слдва самият firewall.
Забелейки:
Изграден е на база netfilter.org + easy firewall generator.
Полиците за веригите се сетват накрая (проблеми със стар хардуер)

======== FW START =========
# cat /etc/rc.d/rc.fire
#!/bin/bash

#conf
SYSCTL="/sbin/sysctl -w"
IPT="/usr/sbin/iptables"
IPTS="/usr/sbin/iptables-save"
IPTR="/usr/sbin/iptables-restore"
INET_IFACE="ppp0"
INET_ADDRESS="`/sbin/ifconfig $INET_IFACE | grep addr: | cut -d: -f2 | cut -d" " -f1`"
EXTERN_PORTS="53 80 <ssh> <DNAT ports> "
LOCAL_IFACE="eth0"
LOCAL_IP="<loc ip>"
LOCAL_NET="<loc net>"
LOCAL_BCAST="<loc bcast"
LO_IFACE="lo"
LO_IP="127.0.0.1"

if [ "$1" = "save" ]
then
        echo -n "Saving firewall to /etc/sysconfig/iptables ... "
        $IPTS > /etc/sysconfig/iptables
        echo "done"
        exit 0
elif [ "$1" = "restore" ]
then
        echo -n "Restoring firewall from /etc/sysconfig/iptables ... "
        $IPTR < /etc/sysconfig/iptables
        echo "done"
        exit 0
fi

echo "Loading kernel modules ..."
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc

#tuning some params
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/ip_forward
    echo "1" > /proc/sys/net/ipv4/tcp_syncookies
    echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
    echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
    echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
    echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
    echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
    echo "1200" > /proc/sys/net/ipv4/tcp_keepalive_time
    echo "2048 65000" > /proc/sys/net/ipv4/ip_local_port_range
    echo "2" > /proc/sys/net/ipv4/tcp_synack_retries
    echo "3" > /proc/sys/net/ipv4/tcp_syn_retries
    echo "2048" > /proc/sys/net/ipv4/tcp_syn_retries
    echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
    echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
else
    $SYSCTL net.ipv4.ip_forward="1"
    $SYSCTL net.ipv4.tcp_syncookies="1"
    $SYSCTL net.ipv4.conf.all.rp_filter="1"
    $SYSCTL net.ipv4.icmp_echo_ignore_broadcasts="1"
    $SYSCTL net.ipv4.conf.all.accept_source_route="0"
    $SYSCTL net.ipv4.conf.all.secure_redirects="1"
    $SYSCTL net.ipv4.conf.all.log_martians="1"
    $SYSCTL net.ipv4.tcp_fin_timeout="15"
    $SYSCTL net.ipv4.tcp_keepalive_time="1200"
    $SYSCTL net.ipv4.ip_local_port_range="2048 65000"
    $SYSCTL net.ipv4.tcp_synack_retries="2"
    $SYSCTL net.ipv4.tcp_syn_retries="3"
    $SYSCTL net.ipv4.tcp_max_syn_backlog="2048"
    $SYSCTL net.ipv4.tcp_tw_reuse="1"
    $SYSCTL net.ipv4.tcp_tw_recycle="1"
    $SYSCTL net.ipv4.conf.all.arp_ignore="1"
fi

echo "Flushing Tables ..."
# Reset Default Policies
$IPT -P INPUT ACCEPT
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT
# Flush all rules
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
# Erase all non-default chains
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

if [ "$1" = "stop" ]
then
        if [ "$SYSCTL" = "" ]
        then
                # Double security
                echo "0" > /proc/sys/net/ipv4/ip_forward
        else
                $SYSCTL net.ipv4.ip_forward="0"
        fi
        echo "Firewall completely flushed! Not routing."
        exit 0
fi

# Set Policies

$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT

echo "Create and populate chains ..."
$IPT -N bad_packets
$IPT -N bad_tcp_packets
$IPT -N protections
$IPT -N udp_inbound
$IPT -N udp_outbound
$IPT -N tcp_inbound
$IPT -N tcp_outbound

# 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"??

Всяклакви подсказки са добре дошли. Не че няма да си напиша 6итнята на ново ама ..
мързел ...



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.