Kastilio 0 Posted 2006-07-14 08:45:25 Share Posted 2006-07-14 08:45:25 Дело вот в чем. На шлюзе стоит stg 2.4 для разграничения доступа пользователей к сервисам в интернете. Какие-то сервисы должны быть доступны постоянно (почта, аська и проч), остальные типа www и ftp, должны ограничиваться, т.е. юзверю даётся на начало лимит, например 100 метров, а по истечении оного нет у него рубится, но только просмотр сайтов и закачка файла с ftp. Так вот суть проблемы: При загрузке основных правил ipfw я не имею доступ к нужным мне сервисам, но при подключении себя как пользователя доступ имею ко всему. Вот мой rc.firewall: ext_net="10.0.1.0" ext_mask="255.255.255.0" our_net="10.0.2.0/29" our_mask="255.255.255.248" int_if="rl0" ext_if="rl1" int_ip="10.0.2.1" ext_ip="10.0.1.90" /sbin/ipfw -f flush ${fwcmd} add 50 divert natd all from any to any via ${ext_if} ${fwcmd} add 100 pass all from any to any via lo0 ${fwcmd} add 200 deny all from any to 127.0.0.0/8 ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any ${fwcmd} add 400 deny all from ${our_net} to any in via ${ext_if} ${fwcmd} add 500 deny all from ${ext_net} to any in via ${int_if} #${fwcmd} add 600 deny all from any to 10.0.0.0/8 via ${ext_if} #${fwcmd} add 700 deny all from 10.0.0.0/8 to any via ${ext_if} ${fwcmd} add 800 deny all from any to 172.16.0.0/12 via ${ext_if} ${fwcmd} add 900 deny all from 172.16.0.0/12 to any via ${ext_if} ${fwcmd} add 1000 deny all from any to 0.0.0.0/8 via ${ext_if} ${fwcmd} add 1100 deny all from 0.0.0.0/8 to any via ${ext_if} ${fwcmd} add 1200 deny all from any to 169.254.0.0/16 via ${ext_if} ${fwcmd} add 1300 deny all from 169.254.0.0/16 to any via ${ext_if} ${fwcmd} add 1400 deny all from any to 192.0.2.0/24 via ${ext_if} ${fwcmd} add 1500 deny all from 192.0.2.0/24 to any via ${ext_if} ${fwcmd} add 1600 deny all from any to 224.0.0.0/4 via ${ext_if} ${fwcmd} add 1700 deny all from 224.0.0.0/4 to any via ${ext_if} ${fwcmd} add 1800 deny all from any to 240.0.0.0/4 via ${ext_if} ${fwcmd} add 1900 deny all from 240.0.0.0/4 to any via ${ext_if} # Diefine rule for manage firwal from admin station and from internet ${fwcmd} add 2000 allow log tcp from 10.0.2.4 to me 22 via ${int_if} ${fwcmd} add 2100 allow log tcp from me 22 to 10.0.2.4 via ${int_if} ${fwcmd} add 2200 allow log tcp from any to me 22 via ${ext_if} ${fwcmd} add 2300 allow log tcp from me 22 to any via ${ext_if} ${fwcmd} add 2350 allow log tcp from ${our_net} to any 25, 110, 143, 407, 5190, 5222 via ${ext_if} ${fwcmd} add 2400 allow tcp from any to any established # Сюда добавляются правила пользователя для доступа к www и ftp ${fwcmd} add 52100 deny icmp from any to any frag ${fwcmd} add 52200 pass icmp from any to any #${fwcmd} add 52300 pass tcp from any 20 to any setup #${fwcmd} add 52400 pass tcp from any to ${ext_ip} 25 setup #${fwcmd} add 52500 pass tcp from any to ${ext_ip} 53 setup #${fwcmd} add 52600 pass tcp from any to ${ext_ip} 110 setup #${fwcmd} add 52700 pass tcp from any to ${ext_ip} 143 setup #${fwcmd} add 52800 pass tcp from any to ${ext_ip} 465 setup #${fwcmd} add 52900 pass tcp from any to ${ext_ip} 993 setup #${fwcmd} add 53000 pass tcp from any to ${ext_ip} 995 setup ${fwcmd} add 53100 deny log tcp from any to any in via ${ext_if} setup #${fwcmd} add 53200 pass tcp from any to any 25, 110, 143, 5190, 407 setup ${fwcmd} add 53300 pass udp from ${ext_ip} to any 53 keep-state ${fwcmd} add 53400 pass udp from any to ${ext_ip} 53 keep-state ${fwcmd} add 53500 pass udp from ${int_ip} to ${our_net} 53 keep-state ${fwcmd} add 53600 pass udp from ${our_net} to ${int_ip} 53 keep-state ${fwcmd} add 53700 pass udp from ${ext_ip} to any 123 keep-state ${fwcmd} add 53800 pass udp from any 123 to ${ext_ip} keep-state ${fwcmd} add 53900 pass udp from ${our_net} to ${int_ip} 123 keep-state ${fwcmd} add 54000 pass udp from ${int_ip} 123 to ${our_net} keep-state ${fwcmd} add 54100 allow udp from ${our_net} to me 5555 via ${int_if} ${fwcmd} add 54200 allow udp from me 5555 to ${our_net} via ${int_if} #${fwcmd} add 54300 divert natd all from any to any via ${ext_if} ${fwcmd} add 65534 deny log logamount 10000 all from any to any Правило пользователя одно: ${fwcmd} add 2900 pass tcp from ${IP} to any 20, 21, 80, 81, 8080, 2121, 3128 via ${ext_if} setup - Так не работает ${fwcmd} add 2900 pass tcp from $any to any setup - так работает, но это не правильно. Прошу сильно не ругать, если что неправильно - в файерволе я практически ноль. Поднимал давно и на linux. Если что не оптимизировано, тоже не ругайте, а дайте дельные советы. Заранее благодарен. Link to post Share on other sites
denz 0 Posted 2006-07-14 13:23:29 Share Posted 2006-07-14 13:23:29 Версия ipfw, если не в курсе - то какая ветка freebsd? Эт для начала... Link to post Share on other sites
Kastilio 0 Posted 2006-07-17 08:17:29 Author Share Posted 2006-07-17 08:17:29 Версия 5.5-STABLE, обновленная с 5.3-STABLE. Link to post Share on other sites
Kastilio 0 Posted 2006-07-18 14:00:02 Author Share Posted 2006-07-18 14:00:02 Короче поправил, теперь ситуация такая. Правила файервола (смотри комментарии): #!/bin/sh fwcmd="/sbin/ipfw" natdcmd="/sbin/natd" ext_net="0.0.0.0/0" our_net="10.0.1.0/24" int_if="rl0" ext_if="tun0" ext_ip="10.0.2.1" int_ip="10.0.1.90" /sbin/ipfw -f flush ${fwcmd} add 50 divert natd all from any to any via ${ext_if} ${fwcmd} add 100 pass all from any to any via lo0 ${fwcmd} add 200 deny all from any to 127.0.0.0/8 ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any ${fwcmd} add 400 deny all from ${our_net} to any in via ${ext_if} ${fwcmd} add 500 deny all from not ${our_net} to any in via ${int_if} ${fwcmd} add 800 deny all from any to 172.16.0.0/12 via ${ext_if} ${fwcmd} add 900 deny all from 172.16.0.0/12 to any via ${ext_if} ${fwcmd} add 1000 deny all from any to 0.0.0.0/8 via ${ext_if} ${fwcmd} add 1100 deny all from 0.0.0.0/8 to any via ${ext_if} ${fwcmd} add 1200 deny all from any to 169.254.0.0/16 via ${ext_if} ${fwcmd} add 1300 deny all from 169.254.0.0/16 to any via ${ext_if} ${fwcmd} add 1400 deny all from any to 192.0.2.0/24 via ${ext_if} ${fwcmd} add 1500 deny all from 192.0.2.0/24 to any via ${ext_if} ${fwcmd} add 1600 deny all from any to 224.0.0.0/4 via ${ext_if} ${fwcmd} add 1700 deny all from 224.0.0.0/4 to any via ${ext_if} ${fwcmd} add 1800 deny all from any to 240.0.0.0/4 via ${ext_if} ${fwcmd} add 1900 deny all from 240.0.0.0/4 to any via ${ext_if} ${fwcmd} add 2000 allow tcp from 10.0.1.4 to me 22 via ${int_if} ${fwcmd} add 2100 allow tcp from me 22 to 10.0.1.4 via ${int_if} ${fwcmd} add 2110 allow tcp from 10.0.1.4 to me 4444 via ${int_if} ${fwcmd} add 2120 allow tcp from me 4444 to 10.0.1.4 via ${int_if} ${fwcmd} add 2200 allow tcp from any to me 22 via ${ext_if} ${fwcmd} add 2300 allow tcp from me 22 to any via ${ext_if} # This window for user rules ${fwcmd} add 52100 deny icmp from any to any frag ${fwcmd} add 52200 pass icmp from any to any ${fwcmd} add 53100 deny log tcp from any to any in via ${ext_if} setup ${fwcmd} add 53300 pass udp from me to any 53 keep-state ${fwcmd} add 53400 pass udp from any to me 53 keep-state ${fwcmd} add 53500 pass udp from ${int_ip} to ${our_net} 53 keep-state ${fwcmd} add 53600 pass udp from ${our_net} to ${int_ip} 53 keep-state ${fwcmd} add 53700 pass udp from me to any 123 keep-state ${fwcmd} add 53800 pass udp from any 123 to me keep-state ${fwcmd} add 53900 pass udp from ${our_net} to ${int_ip} 123 keep-state ${fwcmd} add 54000 pass udp from ${int_ip} 123 to ${our_net} keep-state ${fwcmd} add 54100 allow udp from ${our_net} to me 5555 via ${int_if} ${fwcmd} add 54200 allow udp from me 5555 to ${our_net} via ${int_if} ${fwcmd} add 65534 allow log logamount 10000 all from any to any # Если здесь поставить deny то трафик, естесственно не ходит для юзверей. Когда юзверь коннектится к проксе, правила нормально добавляются, так что stg тут ни при чем. Всё дело именно в IPFW Выполняется OnConnect: #!/bin/sh fwcmd="/sbin/ipfw" # Login LOGIN=$1 #user IP IP=$2 #Gate ip int_ip="10.0.2.1" ext_ip="10.0.1.90" #Gate interfaces int_if="rl0" ext_if="rl1" #cash CASH=$3 #user ID ID=$4 #HTTP ports http_ports="80, 8080, 81, 443" #FTP ports ftp_ports="20, 21" #Mail ports mail_ports="25, 110, 143" #Other other_ports="22, 5190, 123" uports="1025-65535" cur_date=`date \+\%Y.\%m.\%d`cur_time=`date \+\%H:\%M:\%S` # Configuration firewall for access user to him services ${fwcmd} add $(expr $ID \* 10 + 2900) fwd 10.0.1.90,3128 log tcp from $IP to any 80, 81, 8080 via ${int_if} ${fwcmd} add $(expr $ID \* 10 + 2901) allow log tcp from $IP 1024-65535 to any in via rl0 ${fwcmd} add $(expr $ID \* 10 + 2902) allow log tcp from $IP 1024-65535 to any out via tun0 ${fwcmd} add $(expr $ID \* 10 + 2903) allow log tcp from any to $IP 1024-65535 in via tun0 ${fwcmd} add $(expr $ID \* 10 + 2904) allow log tcp from any to $IP 1024-65535 out via rl0 echo "C `date +%Y.%m.%d-%H.%M.%S` $IP $CASH" >> /var/stargazer/users/$LOGIN/connect.log echo "C `date +%Y.%m.%d-%H.%M.%S` $ID $LOGIN $IP $CASH" >> /var/stargazer/users/allconnect.log echo "<=;$cur_date;$cur_time;$ID;$LOGIN;$IP;$CASH" >> /home/stat/logs/connect.log Когда дисконнектится, ети правила ессно удаляются.Так вот, если в файере поставить в правиле 65534 deny, то трафик нихрена не ходит, если allow, то прокся пускает всех и вся, даже тех, кому это не надо. Link to post Share on other sites
Septima 0 Posted 2006-07-19 22:29:03 Share Posted 2006-07-19 22:29:03 С основными правилами разбирайся сам - медленно и вдумчиво проанализируй /etc/rc.firewall. А вот с этим: Правило пользователя одно: ${fwcmd} add 2900 pass tcp from ${IP} to any 20, 21, 80, 81, 8080, 2121, 3128 via ${ext_if} setup - Так не работает Ты разрешаешь ходить наружу через внешний интерфейс. Но пакеты должны еще войти через внутренний интерфейс. Так что либо пиши по два правила - для наружнего и внутреннего интерфейсов, либо просто выбрось from ${IP}. ЗЫ: Для разборок я рекомендую прописывать: ${fwcmd} add 65534 deny log logamount 500 all from any to any , а потом смотреть в /var/log/security, где у тебя затыкаются пакеты. Link to post Share on other sites
Kastilio 0 Posted 2006-07-20 05:28:48 Author Share Posted 2006-07-20 05:28:48 ЗЫ: Для разборок я рекомендую прописывать:${fwcmd} add 65534 deny log logamount 500 all from any to any , а потом смотреть в /var/log/security, где у тебя затыкаются пакеты. Когда я ставлю deny, в логах ничего не пишется. Link to post Share on other sites
Max 0 Posted 2006-07-20 08:01:56 Share Posted 2006-07-20 08:01:56 а слово log в правиле есть? Link to post Share on other sites
Kastilio 0 Posted 2006-07-20 08:28:17 Author Share Posted 2006-07-20 08:28:17 Да, естественно есть. Если бы было время (которого, к сожалению, никогда нет), можно было бы очистить все правила и добавлять их постепенно, на каждый сервис, но времени нет, так как сервер выполняет свою работу, и закрыв доступ в инет, я фактически останавливаю работу конторы, деятельность которой связана с инетрнет. Link to post Share on other sites
Max 0 Posted 2006-07-20 09:42:58 Share Posted 2006-07-20 09:42:58 перепустите сислог, проверьте в вар/лог/security Link to post Share on other sites
XoRe 0 Posted 2006-07-23 10:12:49 Share Posted 2006-07-23 10:12:49 Если ничего не пишется в лог, значит правило не задействуется. Либо условия правила не выполняются, либо трафик режется на более ранних правилах. А вообще пошаговое отключение правил можно делать по или после рабочего времени конторы. Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now