sergeev 1 Posted 2012-02-10 10:55:09 Share Posted 2012-02-10 10:55:09 Здравствуйте! Есть сервер доступа freebsd(mpd), часть клиентов из сети 172.16.0.0/16 ходят через него в интернет, и есть сеть 172.22.0.0/16 которым нужно заблокировать доступ в интернет и перебрасывать их запросы на веб-сервер(1.1.1.1) со страницей заглушкой. На линуксе такое сделать получилось: 11857 571K DNAT tcp -- * * 172.22.0.0/16 0.0.0.0/0 to:1.1.1.1 1000 111K DNAT udp -- * * 172.22.0.0/16 0.0.0.0/0 to:1.1.1.1 Chain POSTROUTING (policy ACCEPT 217K packets, 21M bytes) pkts bytes target prot opt in out source destination 34M 2458M MASQUERADE all -- * * 172.16.0.0/16 0.0.0.0/0 14532 792K MASQUERADE all -- * * 172.22.0.0/16 0.0.0.0/0 А как сделать это на фри? Link to post Share on other sites
adeep 212 Posted 2012-02-10 10:59:01 Share Posted 2012-02-10 10:59:01 man ipfw /fwd ? Link to post Share on other sites
natiss 16 Posted 2012-02-10 12:04:25 Share Posted 2012-02-10 12:04:25 ipfw fwd - это и так понятно проблема то намного глубже: в заголовке http-запроса имя домена вот научите веб-сервер с виртуальными сайтами ответить на запрос "vkontakte.ru" кстати fwd | forward ipaddr | tablearg[,port] Change the next-hop on matching packets to ipaddr, which can be an IP address or a host name. The next hop can also be supplied by the last table looked up for the packet by using the tablearg keyword instead of an explicit address. The search terminates if this rule matches. If ipaddr is a local address, then matching packets will be for- warded to port (or the port number in the packet if one is not specified in the rule) on the local machine. If ipaddr is not a local address, then the port number (if speci- fied) is ignored, and the packet will be forwarded to the remote address, using the route as found in the local routing table for that IP. A fwd rule will not match layer-2 packets (those received on ether_input, ether_output, or bridged). The fwd action does not change the contents of the packet at all. In particular, the destination address remains unmodified, so packets forwarded to another system will usually be rejected by that system unless there is a matching rule on that system to capture them. For packets forwarded locally, the local address of the socket will be set to the original destination address of the packet. This makes the netstat(1) entry look rather weird but is intended for use with transparent proxy servers. To enable fwd a custom kernel needs to be compiled with the option options IPFIREWALL_FORWARD. Во как интересно! Это к вопросу о построении запрещающих правил ipfw в таком случае. Link to post Share on other sites
adeep 212 Posted 2012-02-10 13:16:46 Share Posted 2012-02-10 13:16:46 К заголовкам - в чем проблема? апач отвечает первой конструкцией virtualhost при неизвестном имени домена Link to post Share on other sites
maxx 202 Posted 2012-02-10 15:06:04 Share Posted 2012-02-10 15:06:04 для начала отпределись чем вы натите, пфом или ипфв. Link to post Share on other sites
stroitel 4 Posted 2012-02-10 15:41:48 Share Posted 2012-02-10 15:41:48 PF: rdr inet proto tcp from <deny_clients> to any port 80 -> $SERVER_IP port 80 Link to post Share on other sites
natiss 16 Posted 2012-02-10 17:12:12 Share Posted 2012-02-10 17:12:12 К заголовкам - в чем проблема? апач отвечает первой конструкцией virtualhost при неизвестном имени домена Не всегда удобно лепить первый виртуалхост страницей-отбойником. Кстати, nginx тоже отвечает первой конструкцией? А если имеем frontend-bakend? Куда более красиво будет посылать header... Link to post Share on other sites
ssalvadorx 0 Posted 2012-02-10 18:13:01 Share Posted 2012-02-10 18:13:01 А c fwd точно получится, или для этого еще нужен SQUID? Link to post Share on other sites
sergeev 1 Posted 2012-02-10 18:19:28 Author Share Posted 2012-02-10 18:19:28 Натим ipfw ipfw nat 12 config ip 2.2.2.2 same_ports reset nat 12 ip from 172.16.0.0/16 to any out nat 12 ip from any to 2.2.2.2 in Link to post Share on other sites
natiss 16 Posted 2012-02-10 18:53:45 Share Posted 2012-02-10 18:53:45 А c fwd точно получится, или для этого еще нужен SQUID? "точно" не получится, я бы форвардил на поднятый на localhost nginx , который бы уже посылал клиентам нормально хидеры С чего бы это сторонний веб-сервер ответил на пакет, предназначенный для vk.com? А еще лучше, конечно же, proxy. Но зачем же монстрообразный squid, когда можно 3proxy? Link to post Share on other sites
natiss 16 Posted 2012-02-10 19:00:31 Share Posted 2012-02-10 19:00:31 Натим ipfw ipfw nat 12 config ip 2.2.2.2 same_ports reset nat 12 ip from 172.16.0.0/16 to any out nat 12 ip from any to 2.2.2.2 in Мне кажется, это заведомо "марш смерти". Попытки внести все существующие виды обработки пакетов в ipfw, заканчиваются плачевно. Например в соседней теме сервер не может обработать даже 100 мбит/с... Чем короче и понятней дерево правил, тем лучше. Самый правильный ipfw (после случая, когда он выключен) - это add 1 pass all from any to any Link to post Share on other sites
stroitel 4 Posted 2012-02-10 19:09:37 Share Posted 2012-02-10 19:09:37 Натим ipfw ipfw nat 12 config ip 2.2.2.2 same_ports reset nat 12 ip from 172.16.0.0/16 to any out nat 12 ip from any to 2.2.2.2 in Чем короче и понятней дерево правил, тем лучше. Самый правильный ipfw (после случая, когда он выключен) - это add 1 pass all from any to any А толк от него тогда? Link to post Share on other sites
Gang 5 Posted 2012-02-10 19:49:46 Share Posted 2012-02-10 19:49:46 Поднимите на том-же сервере на другом порту любой http сервер. По критерию, который Вам нравится форвадите все запросы на 80-й порт на него. На нем вешаете заглушку. Остальное запрещаете. ipfw add 20 fwd 127.0.0.1,1123 tcp from "table(40)" to any dst-port 80 in via vlan20 В качестве примера. P.S. Форвад работает только локально! Link to post Share on other sites
natiss 16 Posted 2012-02-10 20:08:18 Share Posted 2012-02-10 20:08:18 Поднимите на том-же сервере на другом порту любой http сервер. По критерию, который Вам нравится форвадите все запросы на 80-й порт на него. На нем вешаете заглушку. Остальное запрещаете. ipfw add 20 fwd 127.0.0.1,1123 tcp from "table(40)" to any dst-port 80 in via vlan20 В качестве примера. P.S. Форвад работает только локально! Форвард как-раз работает нормально, просто надо понимать, что происходит. Пакет пересылается на указанный хост без изменения. Т.е., вместо кастера вконтакта пакет приходит на ваш веб-сервер, кторый его отфутболивает. В случае локального адреса вам "делают одолжение" For packets forwarded locally, the local address of the socket will be set to the original destination address of the packet. This makes the netstat(1) entry look rather weird but is intended for use with transparent proxy servers. Локальный веб-сервер хорош, если имееет место запрос GET /. А если он запросит более сложный путь? В 3proxy теоретически работает конструкция parent 1000 http 1.1.1.1 на практике, естественно, - нет. Идем далее, если открывается сокет с адресом вконтакта, то что вы должны написать в ipfw? Вы должны разрешить ВСЁ (ну во всяком случае 80-ый порт) на внутреннем интерфейсе. А как вы это сделаете, если там форвардинг? Значит запрещающие правила надо на внешнем интерфейсе, а туда "мы" притулили nat и еще непойми-что. Получается "бред" (с). Link to post Share on other sites
Gang 5 Posted 2012-02-10 20:44:13 Share Posted 2012-02-10 20:44:13 Поднимите на том-же сервере на другом порту любой http сервер. По критерию, который Вам нравится форвадите все запросы на 80-й порт на него. На нем вешаете заглушку. Остальное запрещаете. ipfw add 20 fwd 127.0.0.1,1123 tcp from "table(40)" to any dst-port 80 in via vlan20 В качестве примера. P.S. Форвад работает только локально! Форвард как-раз работает нормально, просто надо понимать, что происходит. Пакет пересылается на указанный хост без изменения. Т.е., вместо кастера вконтакта пакет приходит на ваш веб-сервер, кторый его отфутболивает. В случае локального адреса вам "делают одолжение" For packets forwarded locally, the local address of the socket will be set to the original destination address of the packet. This makes the netstat(1) entry look rather weird but is intended for use with transparent proxy servers. Локальный веб-сервер хорош, если имееет место запрос GET /. А если он запросит более сложный путь? В 3proxy теоретически работает конструкция parent 1000 http 1.1.1.1 на практике, естественно, - нет. Идем далее, если открывается сокет с адресом вконтакта, то что вы должны написать в ipfw? Вы должны разрешить ВСЁ (ну во всяком случае 80-ый порт) на внутреннем интерфейсе. А как вы это сделаете, если там форвардинг? Значит запрещающие правила надо на внешнем интерфейсе, а туда "мы" притулили nat и еще непойми-что. Получается "бред" (с). Нат не использую. Не понимаю в чем сложность во всем остальном ) Если запросит что-то окромя "GET /" - на локальном вебсервере редиректим все запросы на "/" (средствами вебсервера) Я использую lighttpd. Там достаточно ловить 404 и перенаправлять куда нужно : $SERVER["socket"] == ":1123" { server.name = "lalalalala" [b]server.error-handler-404 = "/index.html"[/b] index.file-names = ( "index.html" ) server.document-root = "/usr/local/www/info" } На прошлой работе был шлюз на freebsd, отправлял на заглушку всех неугодных. Даже сообщения клиентам так слал. Не далее как позавчера на новом участке сети сделал такую штуку : циска отправляет через PBR всех неугодных на сервер, который в общем и не роутит ничего, а для этого дела отдельный vlan интерфейс - все прекрасно работает. Даже приведу рабочий больше не используемый пример с одного из серверов : ### Forwarding to blockpage #${fwcmd} add 50003 fwd 127.0.0.1,1123 tcp from { not "table(5)" or not "table(40)" } to any dst-port 80 in via vlan333 #${fwcmd} add 50004 allow tcp from { not "table(5)" or not "table(40)" } to any via vlan333 vlan333 - интерфейс смотрящий в сеть. Link to post Share on other sites
sergeev 1 Posted 2012-02-11 10:56:29 Author Share Posted 2012-02-11 10:56:29 Натим ipfw ipfw nat 12 config ip 2.2.2.2 same_ports reset nat 12 ip from 172.16.0.0/16 to any out nat 12 ip from any to 2.2.2.2 in Мне кажется, это заведомо "марш смерти". Попытки внести все существующие виды обработки пакетов в ipfw, заканчиваются плачевно. Например в соседней теме сервер не может обработать даже 100 мбит/с... Чем короче и понятней дерево правил, тем лучше. Самый правильный ipfw (после случая, когда он выключен) - это add 1 pass all from any to any Ну у нас Nas-ы прокачивают в час пик до 350 мбит/с, ngX - около 500 Link to post Share on other sites
sergeev 1 Posted 2012-02-11 11:12:31 Author Share Posted 2012-02-11 11:12:31 Значит получается у фри нету DNAT, и нужно ставить на насе ngnix и туда форвардить подсеть должников? Link to post Share on other sites
Gang 5 Posted 2012-02-11 12:22:32 Share Posted 2012-02-11 12:22:32 Значит получается у фри нету DNAT, и нужно ставить на насе ngnix и туда форвардить подсеть должников? Вам выше подсказали посредством PF : PF: rdr inet proto tcp from <deny_clients> to any port 80 -> $SERVER_IP port 80 Link to post Share on other sites
sergeev 1 Posted 2012-02-11 15:38:46 Author Share Posted 2012-02-11 15:38:46 Как то не очень хочется на насе держать два файервола. Сейчас поставил ngnix и туда сливаю подсеть. Думал может как-то можно обойтись одним ipfw. Link to post Share on other sites
Gang 5 Posted 2012-02-11 16:07:37 Share Posted 2012-02-11 16:07:37 Как то не очень хочется на насе держать два файервола. Сейчас поставил ngnix и туда сливаю подсеть. Думал может как-то можно обойтись одним ipfw. А чем вы натите? Не вижу ничего плохого в pf в связке с ipfw. В своем время у меня НАТ был именно на pf. UPDATE: увидел ipfw kernel nat Ну вы можете сфорвадить на другой сервер. А там точно так-же использовать форвард уже локальный, как вариант. Но как по мне - все не имеет смысла. Оставляйте заглушку на насе и еже с ним. Либо через pf ) Link to post Share on other sites
sergeev 1 Posted 2012-02-11 16:16:16 Author Share Posted 2012-02-11 16:16:16 ipfw натим. Ок, попробуем еще и pf. Link to post Share on other sites
Ромка 567 Posted 2012-02-11 16:24:40 Share Posted 2012-02-11 16:24:40 Мы перенаправляем неплательщиков через transporent proxy на заглушку. Link to post Share on other sites
natiss 16 Posted 2012-02-11 16:25:27 Share Posted 2012-02-11 16:25:27 Как то не очень хочется на насе держать два файервола. Сейчас поставил ngnix и туда сливаю подсеть. Думал может как-то можно обойтись одним ipfw. Пакетных фильтра может быть? Вы еще скажите "брандмауэра" Почему бы действительно не разделить ф-ции трансяции адресов и фильтрации пакетов? Link to post Share on other sites
sergeev 1 Posted 2012-02-11 18:30:36 Author Share Posted 2012-02-11 18:30:36 Как то не очень хочется на насе держать два файервола. Сейчас поставил ngnix и туда сливаю подсеть. Думал может как-то можно обойтись одним ipfw. Пакетных фильтра может быть? Вы еще скажите "брандмауэра" Почему бы действительно не разделить ф-ции трансяции адресов и фильтрации пакетов? Ну ладно Вам, щас еще пошлёте учить матчасть Ну а все таки, одним ipfw fwd можно организовать заглушку не используя на насе ngnix? Link to post Share on other sites
natiss 16 Posted 2012-02-12 12:42:19 Share Posted 2012-02-12 12:42:19 Ну а все таки, одним ipfw fwd можно организовать заглушку не используя на насе ngnix? нет 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