Шлюз

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

Enkil
Сообщения: 15

Шлюз

Сообщение Enkil »

Доброе время суток, уважаемое сообщество!
Обращаюсь к вам с парой вопросов, просветите плз

Дано
шлюз на Ubuntu Server
DNS(bind9, кэширующий и форфардинг на dns провайдера и opendns)
DHCP(dhcp3,раздает динамические адреса и назначает шлюз и dns по умолчанию)
VPN(pptp, нужно для работы начальства из дома)

на текущий момент 2 сетевых интерфейса - один смотрит в и-нет, один в локалку(логично, не правда ли)

iptables следующего вида

Код: Выделить всё


# !/bin/sh

###Задаем переменные, используемые в скрипте

OurNet=192.168.0.0/24 # Адреса нашей локальной сети
LanInt=eth2 # Внутренний интерфейс сервера
LanIP=192.168.0.1 # Адрес внутреннего интерфейса сервера
WanInt=eth0 # Внешний интерфейс сервера
WanIP=xxx.xxx.xxx.xxx #Адрес внешнего интерфейса сервера
GW=xxx.xxx.xxx.xxx # Адрес шлюза провайдера
UNPRIPORTS="1024:65535" # Номера непривилегированных портов

# Если системная сетевая конфигурации не была установлена  или была
# установлена не правильно
# установлен можно внести следующие строки:

ifconfig $LanInt $LanIP
ifconfig $WanInt $WanIP
route del default
route add default gw $GW

# Очистка таблиц и цепочек
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  которые будут идти через нат.
modprobe ip_nat_ftp
modprobe ip_nat_pptp
modprobe ip_conntrack_ftp

## Изменение параметров 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

#Сколько секунд ожидать приема 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

# Закрываем порты NETBIOS :
iptables -A INPUT -p tcp --destination-port 445 -j DROP
iptables -A INPUT -p tcp --destination-port 135 -j DROP
iptables -A INPUT -p udp -m multiport  --ports 135,136,137,138,139 -j DROP
iptables -A INPUT -p tcp -m multiport  --ports 135,136,137,138,139 -j DROP
iptables -A FORWARD -p udp -m multiport  --ports 135,136,137,138,139,445 -j DROP
iptables -A FORWARD -p tcp -m multiport  --ports 135,136,137,138,139,445 -j DROP

# Блокируем входящие пакеты с локальными IP адресами приходящие на внешний интерфейс
iptables -A INPUT -p tcp -i $WanInt -s $OurNet -j DROP
# Блокируем входящие пакеты c нелокальными IP на внутреннем интерфейсе
iptables -A INPUT -p tcp -i $LanInt -s ! $OurNet -j DROP

# 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

# Разрешаем все ранее запрошенные/установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! $WanInt -j ACCEPT
iptables -A FORWARD -i $WanInt -o $LanInt -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем прохождение пакетов по интерфейсу обратной петли
iptables -A INPUT -i lo -j ACCEPT

# Statistics and auths for customers, ping tests
for net_ips in $OurNet; do

iptables -A INPUT -p icmp -i $LanInt --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -i $WanInt --icmp-type echo-request -j ACCEPT

done


############ Открываем нужные нам порты.

# DNS сервер имен разрешаем.
iptables -A OUTPUT -p udp -m udp -o $WanInt --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp -o $WanInt --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A INPUT -p udp -m udp -i $WanInt --dport $UNPRIPORTS --sport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -i $WanInt --dport $UNPRIPORTS --sport 53 -j ACCEPT

# 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 DROP

#Разрешаем VPN для определенных адресов и запрещаем остальным
iptables -A INPUT -s xxx.xxx.xxx.xxx -i $WanInt -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -s xxx.xxx.xxx.xxx -i $WanInt -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -i $WanInt -p tcp --dport 1723 -j DROP

#Разрешаем доступ к pptp-серверу для всех
#iptables -A INPUT -p tcp --dport 1723 -m state --state NEW -j ACCEPT

#Разрешаем доступ по ssh на внешний интерфейс только с определенных адресов, с остальных закрываем
iptables -A INPUT -s xxx.xxx.xxx.xxx -i $WanInt -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -i $WanInt -p tcp --dport 22 -j ACCEPT

#Разрешаем работу почтовых клиентов(и в последствии почтового сервера)
iptables -A INPUT -i $WanInt -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i $WanInt -p tcp --dport 25 -j ACCEPT

iptables -A INPUT -i $LanInt -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i $LanInt -p tcp --dport 25 -j ACCEPT

#NAT(маскарадинг)
iptables -t nat -A POSTROUTING -o $WanInt -j MASQUERADE

#Для Yota,если используется usb-модем для частного пользования в целях роутинга и раздачи интернета
iptables -t mangle -A PREROUTING -i $WanInt -j TTL --ttl-set 64

# Закрываем известные троянские порты:
iptables -A FORWARD -p udp  --sport 16355   -j DROP
iptables -A FORWARD -p udp  --sport 21111   -j DROP

#Запрещаем все на внешнем интерфейсе, что не разрешено выше
iptables -A INPUT -i $WanInt -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options
iptables -A INPUT -i $WanInt -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable
#iptables -A FORWARD -o $WanInt -p tcp -j DROP


На данный момент работает, но нужно несколько исправлений

И собственно вопросы

1) можно ли избавиться от

Код: Выделить всё

route del default
route add default gw $GW

в начале и организовать работу шлюза без указания маршрута в таком виде. Т.е. надо чтобы нигде в скрипте не было привязки к конкретному IP, а только к интерфейсам

2) сейчас используется доступ к и-нету через обычного провайдера, но недавно начальство захотело Yota ибо дешевле и быстрее(ну не факт что быстрее чем сейчас у нас, но однозначно дешевле ибо трафик безлимитный на Yota, а у нас сейчас лимитированный и дорогой).
Так вот, драйвера были установлены(спасибо автору madwimax-драйверов), при подключении модема Yota доступ в и-нет с сервера есть(если переписать немного скрипт iptables то есть он и у клиентов локальной сети).
Однако есть две проблемы
- при текущем скрипте iptables, надо следить за IP, который получает модем от Yota(ибо он динамический) и менять его в скрипте чтоб и-нет не пропал у клиентов из локалки(именно из-за этого возник вопрос №1)
- самое для меня на текущий момент сложное. Надо чтобы были активны оба внешних интерфейса(от старого провайдера и от Yota) и между ними балансировалась нагрузка, ну или хотя бы http/почтовый трафик шел через Yota, а банк-клиенты работали через старого прова(в Yota они не работают ибо там MTU меньше и банк-клиенты отказываються коннектиться)

Просьба помочь либо готовыми изменениями в текущей конфигурации или ссылками на что нибудь близкое к теме ибо времени на долгое гугление увы нет(ну или хотябы намекните куда копать поточнее).

ЗЫ буду благодарен если у кого то найдется желание и возможность в общем оценить скрипт iptables и сказать что там можно было бы подкорректировать для улучшение защиты шлюза извне.

Заранее всем спасибо!
Спасибо сказали:
Enkil
Сообщения: 15

Re: Шлюз

Сообщение Enkil »

помогите хотя бы с первым вопросом, остальное я сам примерно представляю как через iptables сделать.
просто не знаю как сделать маршрутизацию без привязки к ip адресу, а только к внешнему(ним) интерфейсу(сам)
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Шлюз

Сообщение KiWi »

Enkil писал(а):
11.10.2009 13:13

Код: Выделить всё


ifconfig $LanInt $LanIP
ifconfig $WanInt $WanIP
route del default
route add default gw $GW

Вот это должно решаться через системные настройки сети(в ubuntu -- /etc/network/interfaces).

Код: Выделить всё

modprobe ip_nat_ftp
modprobe ip_nat_pptp
modprobe ip_conntrack_ftp

Вот это -- через системные скрипты загрузки модулей(/etc/modules либо /etc/modprobe.d/).

Код: Выделить всё

## Изменение параметров 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

#Сколько секунд ожидать приема 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

Вот это -- через /etc/sysctl.conf либо /etc/sysctl.d/

Код: Выделить всё

# Очистка таблиц и цепочек
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

# Закрываем порты NETBIOS :
iptables -A INPUT -p tcp --destination-port 445 -j DROP
iptables -A INPUT -p tcp --destination-port 135 -j DROP
iptables -A INPUT -p udp -m multiport  --ports 135,136,137,138,139 -j DROP
iptables -A INPUT -p tcp -m multiport  --ports 135,136,137,138,139 -j DROP
iptables -A FORWARD -p udp -m multiport  --ports 135,136,137,138,139,445 -j DROP
iptables -A FORWARD -p tcp -m multiport  --ports 135,136,137,138,139,445 -j DROP

# Блокируем входящие пакеты с локальными IP адресами приходящие на внешний интерфейс
iptables -A INPUT -p tcp -i $WanInt -s $OurNet -j DROP
# Блокируем входящие пакеты c нелокальными IP на внутреннем интерфейсе
iptables -A INPUT -p tcp -i $LanInt -s ! $OurNet -j DROP

# 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

# Разрешаем все ранее запрошенные/установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! $WanInt -j ACCEPT
iptables -A FORWARD -i $WanInt -o $LanInt -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем прохождение пакетов по интерфейсу обратной петли
iptables -A INPUT -i lo -j ACCEPT

# Statistics and auths for customers, ping tests
for net_ips in $OurNet; do

iptables -A INPUT -p icmp -i $LanInt --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -i $WanInt --icmp-type echo-request -j ACCEPT

done


############ Открываем нужные нам порты.

# DNS сервер имен разрешаем.
iptables -A OUTPUT -p udp -m udp -o $WanInt --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp -o $WanInt --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A INPUT -p udp -m udp -i $WanInt --dport $UNPRIPORTS --sport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -i $WanInt --dport $UNPRIPORTS --sport 53 -j ACCEPT

# 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 DROP

#Разрешаем VPN для определенных адресов и запрещаем остальным
iptables -A INPUT -s xxx.xxx.xxx.xxx -i $WanInt -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -s xxx.xxx.xxx.xxx -i $WanInt -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -i $WanInt -p tcp --dport 1723 -j DROP

#Разрешаем доступ к pptp-серверу для всех
#iptables -A INPUT -p tcp --dport 1723 -m state --state NEW -j ACCEPT

#Разрешаем доступ по ssh на внешний интерфейс только с определенных адресов, с остальных закрываем
iptables -A INPUT -s xxx.xxx.xxx.xxx -i $WanInt -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -i $WanInt -p tcp --dport 22 -j ACCEPT

#Разрешаем работу почтовых клиентов(и в последствии почтового сервера)
iptables -A INPUT -i $WanInt -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i $WanInt -p tcp --dport 25 -j ACCEPT

iptables -A INPUT -i $LanInt -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i $LanInt -p tcp --dport 25 -j ACCEPT

#NAT(маскарадинг)
iptables -t nat -A POSTROUTING -o $WanInt -j MASQUERADE

#Для Yota,если используется usb-модем для частного пользования в целях роутинга и раздачи интернета
iptables -t mangle -A PREROUTING -i $WanInt -j TTL --ttl-set 64

# Закрываем известные троянские порты:
iptables -A FORWARD -p udp  --sport 16355   -j DROP
iptables -A FORWARD -p udp  --sport 21111   -j DROP

#Запрещаем все на внешнем интерфейсе, что не разрешено выше
iptables -A INPUT -i $WanInt -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options
iptables -A INPUT -i $WanInt -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable
#iptables -A FORWARD -o $WanInt -p tcp -j DROP

Вот это -- должно сохраняться в pre-up & post-down через iptables-save & iptables-restore(https://help.ubuntu.com/community/IptablesHowTo).
Спасибо сказали:
Enkil
Сообщения: 15

Re: Шлюз

Сообщение Enkil »

или переиначим вопрос

iptables -t nat -A POSTROUTING -o $WanInt -j MASQUERADE

будет ли этого достаточно для форварда пакетов из локальной сети в и-нет(пакет из локалки пришел на интерфейс, смотрящей в локсеть, и будет ли он пропброшен в и-нет? понятно что при этом сработает маскарадинг) при условии что

route add default gw $GW

отсутствует?
или как подобное сделать по другому.
как сделать рабооту маршрутизатора только по интерфейсам и без указания ip-адресов?(как направлять часть пкетов на один внешний канал, а часть на другой(Yota), я понимаю - через iptables)
помогите плз!

KiWi писал(а):
11.10.2009 16:00
Enkil писал(а):
11.10.2009 13:13

Код: Выделить всё


ifconfig $LanInt $LanIP
ifconfig $WanInt $WanIP
route del default
route add default gw $GW

Вот это должно решаться через системные настройки сети(в ubuntu -- /etc/network/interfaces).

Код: Выделить всё

modprobe ip_nat_ftp
modprobe ip_nat_pptp
modprobe ip_conntrack_ftp

Вот это -- через системные скрипты загрузки модулей(/etc/modules либо /etc/modprobe.d/).

Код: Выделить всё

## Изменение параметров 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

#Сколько секунд ожидать приема 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

Вот это -- через /etc/sysctl.conf либо /etc/sysctl.d/

Код: Выделить всё

# Очистка таблиц и цепочек
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

# Закрываем порты NETBIOS :
iptables -A INPUT -p tcp --destination-port 445 -j DROP
iptables -A INPUT -p tcp --destination-port 135 -j DROP
iptables -A INPUT -p udp -m multiport  --ports 135,136,137,138,139 -j DROP
iptables -A INPUT -p tcp -m multiport  --ports 135,136,137,138,139 -j DROP
iptables -A FORWARD -p udp -m multiport  --ports 135,136,137,138,139,445 -j DROP
iptables -A FORWARD -p tcp -m multiport  --ports 135,136,137,138,139,445 -j DROP

# Блокируем входящие пакеты с локальными IP адресами приходящие на внешний интерфейс
iptables -A INPUT -p tcp -i $WanInt -s $OurNet -j DROP
# Блокируем входящие пакеты c нелокальными IP на внутреннем интерфейсе
iptables -A INPUT -p tcp -i $LanInt -s ! $OurNet -j DROP

# 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

# Разрешаем все ранее запрошенные/установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! $WanInt -j ACCEPT
iptables -A FORWARD -i $WanInt -o $LanInt -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем прохождение пакетов по интерфейсу обратной петли
iptables -A INPUT -i lo -j ACCEPT

# Statistics and auths for customers, ping tests
for net_ips in $OurNet; do

iptables -A INPUT -p icmp -i $LanInt --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -i $WanInt --icmp-type echo-request -j ACCEPT

done


############ Открываем нужные нам порты.

# DNS сервер имен разрешаем.
iptables -A OUTPUT -p udp -m udp -o $WanInt --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp -o $WanInt --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A INPUT -p udp -m udp -i $WanInt --dport $UNPRIPORTS --sport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -i $WanInt --dport $UNPRIPORTS --sport 53 -j ACCEPT

# 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 DROP

#Разрешаем VPN для определенных адресов и запрещаем остальным
iptables -A INPUT -s xxx.xxx.xxx.xxx -i $WanInt -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -s xxx.xxx.xxx.xxx -i $WanInt -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -i $WanInt -p tcp --dport 1723 -j DROP

#Разрешаем доступ к pptp-серверу для всех
#iptables -A INPUT -p tcp --dport 1723 -m state --state NEW -j ACCEPT

#Разрешаем доступ по ssh на внешний интерфейс только с определенных адресов, с остальных закрываем
iptables -A INPUT -s xxx.xxx.xxx.xxx -i $WanInt -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -i $WanInt -p tcp --dport 22 -j ACCEPT

#Разрешаем работу почтовых клиентов(и в последствии почтового сервера)
iptables -A INPUT -i $WanInt -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i $WanInt -p tcp --dport 25 -j ACCEPT

iptables -A INPUT -i $LanInt -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i $LanInt -p tcp --dport 25 -j ACCEPT

#NAT(маскарадинг)
iptables -t nat -A POSTROUTING -o $WanInt -j MASQUERADE

#Для Yota,если используется usb-модем для частного пользования в целях роутинга и раздачи интернета
iptables -t mangle -A PREROUTING -i $WanInt -j TTL --ttl-set 64

# Закрываем известные троянские порты:
iptables -A FORWARD -p udp  --sport 16355   -j DROP
iptables -A FORWARD -p udp  --sport 21111   -j DROP

#Запрещаем все на внешнем интерфейсе, что не разрешено выше
iptables -A INPUT -i $WanInt -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options
iptables -A INPUT -i $WanInt -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable
#iptables -A FORWARD -o $WanInt -p tcp -j DROP

Вот это -- должно сохраняться в pre-up & post-down через iptables-save & iptables-restore(https://help.ubuntu.com/community/IptablesHowTo).



да это понятно, просто удобнее когда все в одном месте. вопрос был немного в другом.
Спасибо за отклик!
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Шлюз

Сообщение KiWi »

iptables -- это пакетный ФИЛЬТР, никаких решений о том, что и куда перебрасывать -- он НЕ принимает.

P.S.: с такими "удобнее" -- я откланиваюсь.
Спасибо сказали: