Определимся?
Если подключение к прову через PPPoE и т.п. NATD не нужен. (Как собственно и IP-Адрес на внешнем интерфейсе)
UDP тоже нужно закрыть, нужен только DNS. НУ и мелочи, traceroute к примеру.
Продумай схему:
1. Шлюзу наружу может соединяться, куда? (Можно разрешить всё, не взломают, проблем не будет)
2. Кто может подключаться к шлюзу из инета? (Лучше никто)
3. Кто может выходить в инет? (Твои пользователи)
4. Кому можно возвращать пакеты(Те же пользователи)
Реальный пример с реально-действующего сервера с подключением PPPoE.
Код: Выделить всё
#!/bin/sh -
echo "Перезапуск Файрвола" | /usr/bin/logger -t FIREWALL
SDIR=/var/log/savefirewall
NAME=$(date -v -0d "+%Y-%m-%d")
NAME2=$(date "+%H-%M")
/sbin/ipfw -ad l | gzip -c > $SDIR/$NAME..$NAME2.gz
iflan="rl0"
ifinet="rl1"
inetip="82.208.x.x"
mylan="192.168.x.x/24"
mytun="tun*"
mydns="IP-Адрес DNS1, IP-Адрес DNS2"
portusers="53,110,443,3120,5190"
# 1 таблица, куда нельзя ходить
fwtable="/sbin/ipfw table"
${fwtable} 1 f
NETS=" 0.0.0.0/8 10.0.0.0/8 172.16.0.0/12 169.254.0.0/16 192.0.2.0/24 192.168.0.0/16 224.0.0.0/4 240.0.0.0/4 "
for lan in ${NETS}
do
${fwtable} 1 add $lan
done
## 3 таблица, кому можно ходить ( Не забываем про MAC адреса !!! )
fwtable="/sbin/ipfw table"
${fwtable} 3 f
users=" 192.168.x.100 192.168.x.101 "
for lan in ${users}
do
${fwtable} 3 add $lan
done
#########################################################
fwcmd="/sbin/ipfw -q"
${fwcmd} -f flush
# Считаем траффик
${fwcmd} add count all from any to any in via tun*
# Пускаем lo
${fwcmd} add pass all from any to any via lo0
# Прибиваем приколы lo
${fwcmd} add deny all from any to 127.0.0.0/8
${fwcmd} add deny ip from 127.0.0.0/8 to any
# Пускаем Нашу сеть
${fwcmd} add pass all from any to any via ${iflan}
# Переходим к проверке входящего траффика
${fwcmd} add skipto 10000 all from any to me in via ${mytun}
# Переходим к проверке исходящего траффика
${fwcmd} add skipto 15000 all from me to any out via ${mytun}
# Переходим к проверке пользователей
${fwcmd} add skipto 20000 all from any to any
# Переходим к проверке на входящий траффик на неработающем интерфейсе
${fwcmd} add skipto 25000 all from any to any in via ${ifinet}
###########################################################
# Входящий траффик с интернета
#
# Прибиваем ненужный траффик
${fwcmd} add 10000 deny log all from table\(1\) to me in via ${mytun}
# Пропускаем ICMP-только нужные
${fwcmd} add pass icmp from any to me in via ${mytun} icmptype 0,11 limit src-addr 10
# Пропускаем траффик, с уже установленным соединением
${fwcmd} add pass all from any to me in via ${mytun} established
# Разрешаем входящие UDP DNS пакеты
${fwcmd} add pass udp from ${mydns} 53 to me in via ${mytun}
# log
${fwcmd} add deny log all from any to any
#####################################################
# Исходящий траффик в интернет
#
# Прибиваем ненужный траффик
${fwcmd} add 15000 deny log all from ${inetip} to table\(1\) out via ${mytun}
# Прибиваем ненужные порты наружу
${fwcmd} add deny all from ${inetip} to any 137-139,445 out via ${mytun}
# Наружу серверу всё остальное разрешено
${fwcmd} add pass all from ${inetip} to any out via ${mytun}
# log
${fwcmd} add deny log all from any to any
########################################################
# Прибиваем ненужный траффик
${fwcmd} add 20000 deny log all from ${mylan} to table\(1\) out via ${mytun}
${fwcmd} add deny log all from any to any in via ${ifinet}
# Прибиваем незарегистрированных пользователей
${fwcmd} add deny log all from not table\(3\) to any out via ${mytun}
# Пропускаем ICMP-только нужные
${fwcmd} add pass icmp from any to table\(3\) in via ${mytun} icmptype 0,3,11
${fwcmd} add pass icmp from table\(3\) to any out via ${mytun} icmptype 8
# Пропускаем траффик, с уже установленным соединением
${fwcmd} add allow all from any to table\(3\) in via ${mytun} established
# Разрешаем входящие UDP DNS пакеты
${fwcmd} add pass udp from ${mydns} 53 to table\(3\) in via ${mytun}
# Перенаправляем http траффик на прокси
${fwcmd} add fwd 127.0.0.1,3128 tcp from table\(3\) to any 80,3128,8000,8080
# Разрешаем исходящий траффик для пользователей, пропускаем только нужные порты
${fwcmd} add pass all from table\(3\) to any ${portusers} out via ${mytun}
# log
${fwcmd} add deny log all from any to any
############################################################
# Непонятный траффик на неработающем интерфейсе
${fwcmd} add 25000 deny log logamount 1000 all from any to any in via ${ifinet}
Код: Выделить всё
# ifconfig
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=48<VLAN_MTU,POLLING>
inet 192.168.x.1 netmask 0xffffff00 broadcast 192.168.x.255
ether 00:14:78:05:21:22
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
rl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=48<VLAN_MTU,POLLING>
ether 00:14:78:25:4e:87
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492
inet 82.208.x.x --> 213.177.127.17 netmask 0xffffffff
Opened by PID 246
P.S. Файрвол уже немного устарел, я сейчас переделал бы уже немного лучше. Но для понимая и работы очень подойдёт.