добрый день
не пинайте за слишком ламерские вопросы
Конфигурация сети следующая:
eth1: р-телеком (через него инет через PPPOE)
eth2: интерсвязь (инет через него не берем, используем только локальные ресурсы)
eth4: домашняя сеть (192.168.222.0)
стоит сервер: Ubuntu Linux 8.04.4
установленны и настроенны:
openssh-server
dhcp3-server
bind9
еще lamp и прочие вкусности
IPtables настроены и у всех прекрасно работает нат.
есть несколько вопросов:
по pppoe:
1. как привязать подключение pppoe к определенному интерфейсу (т.е. при загрузке или при сбое переподключение происходило только на интерфейс ppp0)
2. если ли аналог виндовой галки: перезвонить при разрыве связи"
3. где можно почитать про /etc/ppp и как там запускаются скрипты, в какой момент и при каких условиях (хочется сделать чтоб при переподключении автоматически останавливался фаервол, запускался снова и перезапускался noip2)
BIND9 - на данный момент работает только как кэширующий ДНС сервер.
1. Как указать ему пересылать запросы только днс серверам полученным с ppp0.
conf файлы
interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# local
auto eth4
iface eth4 inet static
address 192.168.222.3
netmask 255.255.255.0
network 192.168.222.0
broadcast 192.168.222.255
# # dns-* options are implemented by the resolvconf package, if installed
# dns-search local
# r-telecom
auto eth1
iface eth1 inet manual
# IS
auto eth2
iface eth2 inet dhcp
# auto from pppoe-setup
auto dsl-provider
iface dsl-provider inet ppp
pre-up /sbin/ifconfig eth1 up # line maintained by pppoeconf
provider dsl-provider
firewall запускается в /etc/init.d и в случае смены IP адреса внешнего надо перезапускать
#!/bin/bash
OUT="ppp0" # Имя исходящего интерфейса, смотрящего в интернет.
OUT_IS="eth2" # Имя исходящего интерфейса, смотрящего в локалку интерсвязи.
OUTADDR=$(ifconfig $OUT | awk "/inet addr/{print \$2}" | tr -d "inet addr:") # Адрес исходящего интерфейса, поскольку динамический, применим шаманство
IN="eth4" # Имя входящего интерфейса, смотрящего в локальную сеть
INADDR="192.168.222.3" # Адрес входящего интерфейса
NETWORK="192.168.222.0/24" # Адресация вашей локальной сети
ANYWHERE="0.0.0.0/0" # Назначение, любое.
PORTS="1024:65535" # Порты, которые считаются локальными
MULTICAST="224.0.0.0/4" # Мультикаст пакеты, если у вас не используется оставьте как есть,
# если используется IP TV тогда надо удалить этот пункт
############ IP адреса администраторов, имеют полный доступ на сервер, без каких либо ограничений.
ADMINS="192.168.222.100 192.168.222.101"
############ NAT и DNS. Вписываем сюда IP своих компьютеров в локальной сети, они будут иметь доступ к нату и DNS.
USERSNAT="192.168.222.1 192.168.222.20 192.168.222.100 192.168.222.101"
##############################################################################################
# Здесь прописаны параметры запуска\остановки\статуса скрипта. лучше не трогайте =)
# Остановка скрипта
case "$1" in
stop)
echo "Shutting down firewall..."
iptables --flush
iptables --delete-chain
iptables --table nat --flush
iptables --table filter --flush
iptables --table nat --delete-chain
iptables --table filter --delete-chain
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
echo "...done"
;;
status)
echo $"Table: filter"
iptables --list
echo $"Table: nat"
iptables -t nat --list
;;
restart|reload)
$0 stop
$0 start
;;
##############################################################################################
# Запуск скрипта
start)
echo "Starting Firewall..."
echo ""
# Очистка таблиц и цепочек
iptables --flush
iptables --delete-chain
iptables --table nat --flush
iptables --table filter --flush
iptables --table nat --delete-chain
iptables --table filter --delete-chain
# Назначение глобальных политик фаервола
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
# Загружаем модули, для корректной работы VPN, Active ftp, DCC in IRC которые будут идти через нат.
modprobe ip_nat_ftp
modprobe ip_nat_pptp
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
# Изменение параметров SYSCTL
# Включение форвардинга
echo 1 > /proc/sys/net/ipv4/ip_forward
# Включение форвардинга для VPN
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
# Увеличение размера очередей
echo 32000000 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
# Время ожидания до закрытия соединения
echo 14400 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
# Время ожидания до посылки FIN пакета
echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait
# Время ожидания до посылки FIN пакета
echo 10 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent
# Для защиты от syn флуда
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Увеличиваем размер backlog очереди
echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog
# Число начальных SYN и SYNACK пересылок для TCP соединения
echo 4 > /proc/sys/net/ipv4/tcp_synack_retries
echo 4 > /proc/sys/net/ipv4/tcp_syn_retries
#Какие порты использовать в качестве локальных TCP и UDP портов
echo "16384 61000" > /proc/sys/net/ipv4/ip_local_port_range
#Сколько секунд ожидать приема FIN до полного закрытия сокета
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
# Как часто посылать сообщение о поддержании keep alive соединения
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
# Сколько пакетов проверки keepalive посылать, прежде чем соединение будет закрыто.
echo 2 > /proc/sys/net/ipv4/tcp_keepalive_probes
# Зaпрещаем TCP window scaling
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
# Запрещаем selective acknowledgements, RFC2018
echo 0 > /proc/sys/net/ipv4/tcp_sack
# Запрещаем TCP timestamps, RFC1323
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
# Уличиваем размер буфера для приема и отправки данных через сокеты.
echo 1048576 > /proc/sys/net/core/rmem_max
echo 1048576 > /proc/sys/net/core/rmem_default
echo 1048576 > /proc/sys/net/core/wmem_max
echo 1048576 > /proc/sys/net/core/wmem_default
# Через какое время убивать соединеие закрытое на нашей стороне
echo 1 > /proc/sys/net/ipv4/tcp_orphan_retries
# Temporary eth0 completely disabled
#iptables -A INPUT -i $OUT -j DROP
# Admins - full control (even dagerous)
for admin_ips in $ADMINS; do
iptables -A INPUT -s $admin_ips -m state --state NEW -j ACCEPT
done
# iptables -A INPUT -s 192.168.222.109 -m state --state NEW -j ACCEPT
##############################################################################################
# Silently Drop Stealth Scans
# All of the bits are cleared
iptables -A INPUT -p icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# SYN and FIN are both set
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# SYN and RST are both set
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# FIN and RST are both set
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
# FIN is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
# PSH is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
# URG is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
##############################################################################################
# Multicast - ignore
iptables -A INPUT -s $MULTICAST -j DROP
iptables -A INPUT -d $MULTICAST -j DROP
# any established or related conns are welcome
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Loopback
iptables -A INPUT -i lo -j ACCEPT
# Statistics and auths for customers, ping tests
for net_ips in $NETWORK; do
iptables -A INPUT -p icmp -i $IN --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -i $OUT --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -i $OUT_IS --icmp-type echo-request -j ACCEPT
done
############ Открываем нужные нам порты.
# FTP
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
# PASSIVE FTP
iptables -t filter -A INPUT -p tcp -m tcp --dport 50000:50500 -m state --state NEW -j ACCEPT
iptables -t filter -A INPUT -p udp -m udp --dport 50000:50500 -m state --state NEW -j ACCEPT
# APACHE
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
#SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
########### OUTPUT
iptables -A OUTPUT -p icmp --icmp-type timestamp-reply -j DROP
########### NAT Вписываем сюда IP своих компьютеров в локальной сети.
# Enable Users Nat DNS
for usernat_ips in $USERSNAT; do
iptables -A INPUT -s $usernat_ips -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -s $usernat_ips -p udp --dport 53 -j ACCEPT
iptables -t nat -A POSTROUTING -s $usernat_ips -o $OUT -j MASQUERADE
iptables -t nat -A POSTROUTING -s $usernat_ips -o $OUT_IS -j MASQUERADE
done
############# PORT FORWARD Сюда вписываем проброс портов локальную сеть.
## Проброс на апачу на файлопомойку
#iptables -t nat -A PREROUTING -p tcp -d $OUTADDR --dport 80 -j DNAT --to-destination 192.168.222.1:80
#iptables -t filter -A FORWARD -i $OUT -d 192.168.222.1 -p tcp --dport 80 -j ACCEPT
## порт на торрент для раздачи с файлопомойки
iptables -t nat -A PREROUTING -p tcp -d $OUTADDR --dport 51413 -j DNAT --to-destination 192.168.222.1:51413
iptables -t filter -A FORWARD -i $OUT -d 192.168.222.1 -p tcp --dport 51413 -j ACCEPT
iptables -t nat -A PREROUTING -p udp -d $OUTADDR --dport 51413 -j DNAT --to-destination 192.168.222.1:51413
iptables -t filter -A FORWARD -i $OUT -d 192.168.222.1 -p udp --dport 51413 -j ACCEPT
# 4090 для kerio на 192.168.222.100
iptables -t nat -A PREROUTING -p tcp -d $OUTADDR --dport 4090 -j DNAT --to-destination 192.168.222.100:4090
iptables -t filter -A FORWARD -i $OUT -d 192.168.222.100 -p tcp --dport 4090 -j ACCEPT
iptables -t nat -A PREROUTING -p udp -d $OUTADDR --dport 4090 -j DNAT --to-destination 192.168.222.100:4090
iptables -t filter -A FORWARD -i $OUT -d 192.168.222.100 -p udp --dport 4090 -j ACCEPT
echo "...done"
echo NetAddr: $OUTADDR
echo "--> IPTABLES firewall loaded/activated <--"
##--------------------------------End Firewall---------------------------------##
;;
*)
echo "Usage: firewall (start|stop|restart|status) EXTIF INTIF"
exit 1
esac
exit 0ваппав