Код: Выделить всё
gw-local# uname -a
FreeBSD gw-local 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Fri Oct 1 17:10:49 NOVST 2010 root@gw-local.rzga.intra:/usr/obj/usr/src/sys
/main_kernell.2010-01-10 i386
gw-local# cat /usr/src/sys/i386/conf/main_kernell.2010-01-10
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_NAT
options IPFIREWALL_FORWARD
options LIBALIAS
options ROUTETABLES=2
options DUMMYNET
options HZ="1000"
Код: Выделить всё
gw-local# cat /etc/rc.firewall
#!/bin/sh -
echo "Checking ng_ipfw..."
kldstatscript=`kldstat | grep ng_ipfw`
if [ "$kldstatscript" = "" ]; then
echo "Starting ng_ipfw..."
kldload ng_ipfw > /dev/null 2>&1
fi
echo -n "Starting firewall..."
ipfw="/sbin/ipfw"
eq_if="bge0"
eq_ip="Внешний IP"
lan_if="rl1"
lan_ip="Внутренний IP"
lan_net="192.168.x.0/24"
${ipfw} -q flush
${ipfw} -q pipe flush
${ipfw} -q queue flush
${ipfw} -q table 1 flush
${ipfw} -q table 2 flush
${ipfw} -q table 3 flush
${ipfw} -q table 4 flush
${ipfw} -q table 5 flush
${ipfw} -q table 6 flush
${ipfw} -q table 7 flush
${ipfw} -q table 8 flush
${ipfw} -q table 9 flush
${ipfw} -q table 10 flush
${ipfw} -q table 11 flush
${ipfw} -q table 12 flush
${ipfw} -q table 13 flush
${ipfw} -q table 14 flush
# Доступ в Интернет по всем портам
${ipfw} table 1 add 192.168.x.0/24 #Сеть
# Бесплатные подсети на 100Mb\s ##############
${ipfw} table 10 add 192.198.x.0/24
#Доступ по IP к серверу
#${ipfw} table 11 add xxx.xxx.xxx.xxx
#Петля
${ipfw} add allow all from any to any via lo0
${ipfw} add deny all from any to 127.0.0.0/8
${ipfw} add deny all from 127.0.0.0/8 to any
################### Устанавливаем соединения #########################
${ipfw} add 00040 check-state
########## Блокируем подмену пакетов и всякий хлам ###################
${ipfw} add deny ip from any to 172.16.0.0/12 in via $eq_if
${ipfw} add deny ip from any to 172.16.0.0/12 in via $lan_if
${ipfw} add deny ip from any to 10.0.0.0/8 in via $eq_if
${ipfw} add deny ip from any to 10.0.0.0/8 in via $lan_if
${ipfw} add deny ip from any to 169.254.0.0/16 in via $eq_if
${ipfw} add deny ip from any to 169.254.0.0/16 in via $lan_if
${ipfw} add deny ip from any to 240.0.0.0/4 in via $eq_if
${ipfw} add deny ip from any to 240.0.0.0/4 in via $lan_if
${ipfw} add deny ip from any to 224.0.0.0/4 in via $eq_if
${ipfw} add deny ip from any to 224.0.0.0/4 in via $lan_if
##################### Сервер в интернет ###############################
#EQ
${ipfw} add allow tcp from $eq_ip to any setup keep-state via $eq_if
${ipfw} add allow udp from $eq_ip to any keep-state via $eq_if
##################### Доступ на сервер по портам #######################
#Дотуп на сервак по IP
#EQ
${ipfw} add allow all from "table(11)" to $eq_ip via $eq_if
${ipfw} add allow all from $eq_ip to "table(11)" via $eq_if
#EQ
${ipfw} add allow tcp from any to $eq_ip 80 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 25 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 110 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 3389 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 33892 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 33893 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 33894 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 33895 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 33896 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 33897 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 33898 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 33899 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 33900 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 33901 setup keep-state via $eq_if
${ipfw} add allow tcp from any to $eq_ip 2222 setup keep-state via $eq_if
################ Обмен трафиком между сервером и сетью. #####################
${ipfw} add allow all from $lan_net to $lan_net via $lan_if
#Загоняем всех в шейпер и делим на всех скорость
${ipfw} pipe 1 config bw 3Mbit/s
${ipfw} queue 1 config pipe 1 mask dst-ip 0xffffffff
${ipfw} add queue 1 all from not "table(10)" to "table(1)" out
#Конфигурация NAT.
#EQ
${ipfw} nat 1 config ip $eq_ip same_ports deny_in unreg_only
#NAT для EQ
${ipfw} add allow all from "table(1)" to any in via $lan_if
${ipfw} add nat 1 all from "table(1)" to any out via $eq_if
${ipfw} add allow all from $eq_ip to any out via $eq_if
${ipfw} add nat 1 all from any to $eq_ip in via $eq_if
${ipfw} add allow all from any to "table(1)" in via $eq_if
${ipfw} add allow all from any to "table(1)" out via $lan_if
#Блок флуда виндовозников
${ipfw} 65532 add deny all from any 137, 138, 139 to any
#Всё что не папало в правила.
${ipfw} 65533 add deny log ip from any to any
# $FreeBSD: src/etc/sysctl.conf,v 1.8.34.1.4.1 2010/06/14 02:09:06 kensmith Exp $
#
# This file is read when going to multi-user and its contents piped thru
# ``sysctl'' to adjust kernel values. ``man 5 sysctl.conf'' for details.
#
# Uncomment this to prevent users from seeing information about processes that
# are being run under another UID.
#security.bsd.see_other_uids=0
net.inet.ip.fw.one_pass=1
Прикол в том что когда я использую IPFW двойное прохождение правил net.inet.ip.fw.one_pass=1 пинг во внешку с любой машины идет в интернет, но самого сервера пинги не идут.... также как и с внешнки на сервер....
Я соответственно пишу правила: вставляю их в раздел "Сервер в интернет"
${ipfw} add allow icmp from any to $eq_ip via $eq_if
${ipfw} add allow icmp from $eq_ip to any via $eq_if
Тогда пинг с сервера в интернет идет, также с интернета на меня, но не кто с локалки не могужет пинговать внешние ресурсы... Пробовал писать выше этих двух правил правила skipto
${ipfw} add skipto 03800 icmp from any to $lan_net
${ipfw} add skipto 03800 icmp from $lan_net to any
до правил NAT'a... эфект тотже... Как мне так реализовать это все, чтобы с локалки могли пинговать внешку, и внешка меня, также сам сервер мог пинговать интернет.