« -: Jan 05, 2006, 21:07 »
Здравейте, наскоро се опитах да премодифицирам един скрипт с iptables правила така, че да отговаря на мойте изисквания. Проблема е че нещо не работи, преди да го постна бих искал да дам малко повече инфо. Имам Slackware 10.2--2.4.31, който го ползвам за рутер и има IP 83.228.X.X(това е за и-нета, а за към LAN 192.168.110.1). Зад него има машина със същите параметри(192.168.110.2), която ще се ползва за Web и FTP . Имам ping от вътрешната машина и към двата и-фейса на рутера, но след това няма никой. Молбата ми е ако на някой му се занимава да го погледне и ако има нещо което да му се струва нередно да го сподели(критиката ще бъде градивна). Благодаря предварително
Та ето го и скрипта:
#!/bin/bash
#RULES FOR FIREWALL & NAT
IPT="/usr/sbin/iptables"
echo "Loading aditional modules ..."
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/conf/eth0/rp_filter
function flush() {
echo "Flushing firewall ..."
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$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
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
}
case $1 in
start)
echo "Starting firewall ..."
flush
#Zadavame "othvurlqne" kato standartno povedenie na trite vgradeni verigi
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
#Davame pulna svoboda na interfacite za obratna vruzka
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
echo "Executing FILTER table ..."
#Nqkolko osnovni pravila protiv podpraveni IP-addressi
$IPT -A INPUT -s 255.0.0.0/8 -j LOG --log-prefix "Spoofed source IP!"
$IPT -A INPUT -s 255.0.0.0/8 -j DROP
$IPT -A INPUT -s 0.0.0.0/8 -j LOG --log-prefix "Spoofed source IP!"
$IPT -A INPUT -s 0.0.0.0/8 -j DROP
$IPT -A INPUT -s 127.0.0.0/8 -j LOG --log-prefix "Spoofed source IP!"
$IPT -A INPUT -s 127.0.0.0/8 -j DROP
$IPT -A INPUT -s 10.0.0.0/8 -j LOG --log-prefix "Spoofed source IP!"
$IPT -A INPUT -s 10.0.0.0/8 -j DROP
$IPT -A INPUT -s 172.16.0.0/12 -j LOG --log-prefix "Spoofed source IP!"
$IPT -A INPUT -s 172.16.0.0/12 -j DROP
#$IPT -A INPUT -s 192.168.0.0/16 -j LOG --log-prefix "Spoofed source IP!"
#$IPT -A INPUT -s 192.168.0.0/16 -j DROP
$IPT -A INPUT -s 83.228.X.X -j LOG --log-prefix "Spoofed by my own IP!"
$IPT -A INPUT -s 83.228.X.X -j DROP
#Definirame pravilo, s koeto kazvame na "netfilter", che vsichki sessions po TCP,
#zaduljitelno trqbva da zapochvat sus SYN (Vuzmojno scanirane ot strana na nqkoi lubopitko)
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "Stealth scan attempt?"
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
echo "Processing INPUT chain ..."
#Priemame vhodqshti paketi, koito sa chast ot veche odobreni sessinos
$IPT -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
#Priema vhodqshti paketi, koito startirat sessions po FTP
$IPT -A INPUT -p tcp -j ACCEPT --dport 21 -m state --state NEW
#Priema vhodqshti paketi, koito startirat sessions po SSH
$IPT -A INPUT -p tcp -j ACCEPT --dport 22 -m state --state NEW
#Priema vhodqshti paketi, koito startirat sessions po HTTP
$IPT -A INPUT -p tcp -j ACCEPT --dport 80 -m state --state NEW
#Priema vsichko koeto idva ot vutreshnata mreja 192.168.110.0/24 Tuk mojebi e dobre da ima portove 1025-65355
$IPT -A INPUT -p all -s 192.168.110.0/24 -d 83.228.X.X -j ACCEPT
#Zapisvame vsichko ostanalo v LOG
$IPT -A INPUT -j LOG --log-prefix "Dropped by default:"
echo "Processing OUTPUT chain ..."
#Ako paketa e chast ot veche odobrena vruzka go puskame navun
$IPT -I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
#Pozvolqvame izhodqshti ICMP zaqvki- "ping"
$IPT -A OUTPUT -p icmp -j ACCEPT --icmp-type echo-reqest
#Pozvolqvame izhodqshti zaqvki po DNS "opredelqne na imena po IP address"
$IPT -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
#Zapisvame v LOG vsichko ostanalo
$IPT -A OUTPUT -j LOG --log-prefix "Dropped by default:"
echo "Processing FORWARD chain ..."
$IPT -A FORWARD -p all -j ACCEPT
echo "Executing NAT table ..."
#PREROUTING
#Prehvurlqne na vsichki zaqvki na port 21 kum vutreshno IP 192.168.110.2
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 21 -j DNAT --to 192.168.110.2:21
#Prehvurlqne na vsichki zaqvki na port 80 kum vutreshno IP 192.168.110.2
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.110.2:80
#POSTROUTING
#Prehvurlqne na vsichko ot vutreshnata mreja kum 83.228.X.X
IPT -t nat -A POSTROUTING -o eth0 -j SNAT –to--source 83.228.X.X
;;
stop)
echo "Stoping firewall ..."
flush
;;
nat)
echo "Running firewall but only NAT table ..."
flush
;;
*)
echo "Usage: FIREWALL & NAT start|stop|nat"
;;
esac