создаем папку для скриптов
sudo mkdir /etc/fire
там же делаем файлы списки
для тех, кому разрешаем полный доступ к проксе «c улицы»
sudo touch /etc/fire/white.lst
для тех, кому разрешаем доступ наружу по нату(если надо)
sudo touch /etc/fire/inet.lst
для тех, кто будет смотреть видео (хотя можно делать доступ всем и рулить паролями)
sudo touch /etc/fire/video.lst
создаем сам скрипт
sudo nano /etc/fire/firewall
изначально все для статического ИП
#!/bin/sh -e
#
# правила для фаерфола
# переменные
#IP для локальной сети
LOCALIP=192.168.0.0
#внутреняя сеть
LOCALNET=192.168.0.0/24
#IP внешней сети
REMOTEIP=85.172.67.100
#IP внешней сети при использовании DynDNS
#REMOTEIP=`head /root/ipcheck.dat -n 1`
#очищаем все
/sbin/iptables -F
/sbin/iptables -F -t nat
#защита 22 от брутфорса
/sbin/iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j DROP
/sbin/iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT
# или запрещаем всем кроме локальной сети
#/sbin/iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 22 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -s 0/0 --dport 22 -j DROP
#разрешает весь локальный трафик
/sbin/iptables -A INPUT -i lo -j ACCEPT
#разрешаем пинг
/sbin/iptables -A INPUT -p icmp -s 0/0 -d 0/0 -j ACCEPT
#разрешаем ssh для настройки - 22
#/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#разрешаем https если веб отчеты на проксе - 443
#/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#разрешаем http если веб на проксе - 80
#/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#разрешаем vpn(pptp) - 1723
#/sbin/iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
#для натирования и работы pptp
#echo 1 > /proc/sys/net/ipv4/ip_forward
# входящие на проксик c "белого листа"
for i in `cat /etc/fire/white.lst | grep "#" -v`;
do /sbin/iptables -A INPUT -s $i -d $REMOTEIP -j ACCEPT; done;
# чтоб на проксе работало все(разрешает соединения начатые с прокси)
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# все остальное конекты к проксику c улицы дропаем (можем логировать)
#/sbin/iptables -A INPUT -s 0/0 -d $REMOTEIP -j LOG --log-prefix WHY
/sbin/iptables -A INPUT -s 0/0 -d $REMOTEIP -j DROP
# если у нас есть левые соединения например сетевая для vpn или ppoe
# например eth1 у нас левый интерфейс то дропаем все что полезет
# c него в локальную сеть
#/sbin/iptables -A FORWARD -i eth1 -s 0/0 -d $LOCALNET -j DROP
#натирование всем в сети
#/sbin/iptables -t nat -A POSTROUTING -s $LOCALNET -d 0/0 -j SNAT --to-source $REMOTEIP
#варианты
#sudo iptables -t nat -I POSTROUTING -s 192.168.8.1 -j MASQUERADE
#sudo iptables -t nat -I POSTROUTING -s 192.168.8.0/255.255.255.0 -j MASQUERADE
#iptables -t nat -A POSTROUTING -o eth1 -s 192.168.8.0/255.255.255.0 -j MASQUERADE
#
#натирование по списку
#for i in `cat /etc/fire/inet.lst | grep "#" -v`;
#do
# /sbin/iptables -t nat -A POSTROUTING -s $i -d 0/0 -j SNAT --to-source $REMOTEIP;
#done;
# видеонаблюдение по списку пример на одну машину
#for i in `cat /etc/fire/video.lst | grep "#" -v`;
#do
# /sbin/iptables -t nat -A PREROUTING -p tcp -s $i -d $REMOTEIP --dport 80 -j DNAT --to 10.10.10.10:80;
# /sbin/iptables -t nat -A PREROUTING -p tcp -s $i -d $REMOTEIP --dport 4550 -j DNAT --to 10.10.10.10:4550;
# /sbin/iptables -t nat -A PREROUTING -p tcp -s $i -d $REMOTEIP --dport 5550 -j DNAT --to 10.10.10.10:5550;
#done;
#пробрасываем https если веб отчеты на другой машине - 443
#/sbin/iptables -t nat -A PREROUTING -p tcp -d $REMOTEIP --dport 443 -j DNAT --to 10.10.10.10:443;
права на запуск
sudo chmod +x /etc/fire/firewall
пример файла списка
# ip которые выходят в инет # petr 192.168.0.15 # бухи 192.168.0.217 # сервер открывать только для обновления #192.168.0.150
после изменения списков чтоб они принялись надо запустить скрипт
sudo /etc/fire/firewall
текущие соединения при этом не обрываются (если не удалили из списка)
для автозагрузки с постоянным ИП добавляем скрипт в /etc/rc.local
к примеру у меня этот файл выглядит сейчас так
#!/bin/sh -e # # rc.local # /etc/fire/firewall exit 0
если ИП меняется то добавляем /etc/fire/firewall в /etc/ppp/ip-up.d/dyndns_update.sh
просмотр текущих правил делается следующими командами
sudo iptables -L -n sudo iptables -t nat -L -n
на клиенте надо выставить шлюз по умолчанию делается добавлением\правкой параметра gateway в файле /etc/network/interfaces
и после перезагрузки он будет применен, чтоб заработало без перезагрузки команда
sudo route add default gw 192.168.0.150
DNS сервер прописывается в /etc/resolv.conf
nameserver 192.168.0.150