Итак,сегодня мы займемся тем,что будем настраивать firewall на прокси сервере.
Для более удобной настройки и хранения всех правил firewall'а мы напишем небольшой скрипт.Два интерфейса внутренний eth0 и внешний eth1.Настроенный squid.
Создаем файл с названием например firewall.sh.Делаем его исполняемым и заполняем:
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#
# Включить forward
echo 1 > /proc/sys/net/ipv4/ip_forward
# удалить все действующие правила
iptables -F iptables -t nat -F
iptables -t mangle -F iptables -X
echo "Old rules removed"
# Правила по умолчанию
iptables -P INPUT DROP
#Запрещаем все входящие!
iptables -P OUTPUT ACCEPT
#Разрешаем все исходящие!
iptables -P FORWARD DROP
#Запрещаем все проходящие (транзит)!
echo "New policy load"
echo "Loading rules"
# Пропускаем обратную петлю
iptables -A INPUT -d 127.0.0.1 -j ACCEPT # Пропускаем пакеты уже установленных соединений iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "Open ports"
# Открываем порты
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT #www
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT #ftp
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT #ssh
iptables -A INPUT -p tcp -m tcp --dport 3389 -j ACCEPT #RDP
echo "Enables Ping requests"
# Разрешаем пинг
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -o eth1 -p icmp -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp -j ACCEPT
echo "ICMP fragment drop"
# ICMP - перенаправление
# ICMP - сообщение указывает системе изменить содержимое таблиц маршрутизации с тем, #что бы направлять
# пакеты по более короткому маршруту. Может быть использовано взломщиком для перенаправления вашего трафика через свою машину.
iptables -A INPUT --fragment -p ICMP -j DROP
iptables -A OUTPUT --fragment -p ICMP -j DROP
echo "Accept rdp connect"
# Перенаправление RDP запросов из внешней сети на windows RDP 192.168.0.25
iptables -t nat -A PREROUTING -d внешний_ip/32 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.25:3389
iptables -t nat -A POSTROUTING -d 192.168.0.25/32 -p tcp -m tcp --dport 3389 -j SNAT --to-source внешний_ip
iptables -A FORWARD -d 192.168.0.25/32 -o eth0 -p tcp -m tcp --dport 3389 -j ACCEPT
echo "Accept forwarding"
# Перенаправление запросов из внутренней сети наружу
#iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport порт -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp -m tcp --dport 3389 -j ACCEPT #RDP
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 22 -j ACCEPT #SSH
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 21 -j ACCEPT #FTP
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 25 -j ACCEPT #SMTP
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 110 -j ACCEPT #POP3
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 143 -j ACCEPT #IMAP
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 993 -j ACCEPT #IMAPS
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 5223 -j ACCEPT #Google Talk
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 465 -j ACCEPT #GMail
# Запрещаем доступ из внешней сети на порт
iptables -A INPUT -i eth1 -p tcp -m tcp --dport 3001 -j DROP
# Transparent
iptables -A INPUT -i eth0 -j ACCEPT iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source внешний_ip
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128
#Transparent SQUID
echo "Loading iptables complete"
Для более удобной настройки и хранения всех правил firewall'а мы напишем небольшой скрипт.Два интерфейса внутренний eth0 и внешний eth1.Настроенный squid.
Создаем файл с названием например firewall.sh.Делаем его исполняемым и заполняем:
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#
# Включить forward
echo 1 > /proc/sys/net/ipv4/ip_forward
# удалить все действующие правила
iptables -F iptables -t nat -F
iptables -t mangle -F iptables -X
echo "Old rules removed"
# Правила по умолчанию
iptables -P INPUT DROP
#Запрещаем все входящие!
iptables -P OUTPUT ACCEPT
#Разрешаем все исходящие!
iptables -P FORWARD DROP
#Запрещаем все проходящие (транзит)!
echo "New policy load"
echo "Loading rules"
# Пропускаем обратную петлю
iptables -A INPUT -d 127.0.0.1 -j ACCEPT # Пропускаем пакеты уже установленных соединений iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "Open ports"
# Открываем порты
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT #www
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT #ftp
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT #ssh
iptables -A INPUT -p tcp -m tcp --dport 3389 -j ACCEPT #RDP
echo "Enables Ping requests"
# Разрешаем пинг
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -o eth1 -p icmp -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp -j ACCEPT
echo "ICMP fragment drop"
# ICMP - перенаправление
# ICMP - сообщение указывает системе изменить содержимое таблиц маршрутизации с тем, #что бы направлять
# пакеты по более короткому маршруту. Может быть использовано взломщиком для перенаправления вашего трафика через свою машину.
iptables -A INPUT --fragment -p ICMP -j DROP
iptables -A OUTPUT --fragment -p ICMP -j DROP
echo "Accept rdp connect"
# Перенаправление RDP запросов из внешней сети на windows RDP 192.168.0.25
iptables -t nat -A PREROUTING -d внешний_ip/32 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.25:3389
iptables -t nat -A POSTROUTING -d 192.168.0.25/32 -p tcp -m tcp --dport 3389 -j SNAT --to-source внешний_ip
iptables -A FORWARD -d 192.168.0.25/32 -o eth0 -p tcp -m tcp --dport 3389 -j ACCEPT
echo "Accept forwarding"
# Перенаправление запросов из внутренней сети наружу
#iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport порт -j ACCEPT
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp -m tcp --dport 3389 -j ACCEPT #RDP
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 22 -j ACCEPT #SSH
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 21 -j ACCEPT #FTP
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 25 -j ACCEPT #SMTP
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 110 -j ACCEPT #POP3
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 143 -j ACCEPT #IMAP
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 993 -j ACCEPT #IMAPS
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 5223 -j ACCEPT #Google Talk
iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -p tcp --dport 465 -j ACCEPT #GMail
# Запрещаем доступ из внешней сети на порт
iptables -A INPUT -i eth1 -p tcp -m tcp --dport 3001 -j DROP
# Transparent
iptables -A INPUT -i eth0 -j ACCEPT iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source внешний_ip
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128
#Transparent SQUID
echo "Loading iptables complete"
Перемещаем файл в /etc/. Для автоматического запуска скрипта добавляем
/etc/firewall.sh перед exit 0 в файл /etc/rc.local
Все готово.