Апр 082011
 
#!/bin/bash
#########################
# CINFIG
# Конфигурация устройств
#########################
IPT="iptables"
POLICY="DROP"

LAN_IF="eth0"        # внутренний интерфейс
LAN_IP="192.168.1.2"    # адрес на внутреннем интерфейсе
LAN="192.168.1.0/24"    # внутренняя сеть

LO_IF="lo"        # loopback-интерфейс
LO_IP="127.0.0.1"    # loopback-адрес
LOOPBACK="127.0.0.0/8"    # loopback-петля

DNS="80.82.32.9"       # DNS-провайдера
DNS1="80.82.33.65"

##########################
# MODULES                  
# Подгружаем нужный модули 
##########################
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe iptable_nat
modprobe ip_nat_ftp
##########################
# Продвигаем пакеты
##########################
echo 1 > /proc/sys/net/ipv4/ip_forward    #ядро должно знать что оно может продвигать пакеты

depend() {
before net
use logger
}
#############################
# Поиция по умолчанию Запрет
#############################
$IPT -P INPUT $POLICY
$IPT -P FORWARD $POLICY
$IPT -P OUTPUT $POLICY

$IPT -N allowed   
$IPT -F allowed   
# "allowed" это просто имя, можно использовать что нибудь и другое:)
# Разрешаем прохождение statefull трафика. Далее идет собственно сам список правил
$IPT -A allowed -m state --state ESTABLISHED,RELATED -j ACCEPT
# Журналируем все обращение к этому серверу от WAN-сетей :) Мы не ждем гостей !
$IPT -A allowed -i $LAN_IF -m limit --limit 1/second -j ULOG --ulog-prefix "Bad packet from $LAN_IF"
$IPT -A allowed -j $POLICY

$IPT -N com-allow
$IPT -F com-allow
$IPT -A com-allow -p tcp -j ACCEPT
$IPT -A com-allow -p udp -j ACCEPT
# 1. Разрешаем ICMP
$IPT -N icmp_in
$IPT -F icmp_in
# здесь можно увидеть применения модуля "state" т.е. состояние. пропускаются пакеты со статусом NEW,
# остальные нам не нужны
$IPT -A icmp_in -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT
$IPT -A icmp_in -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A icmp_in -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
# Журналируем ICMP-пакеты, нам не нужны эти пакеты.
$IPT -A icmp_in -p icmp -j ULOG --ulog-prefix "Bad ICMP"
# 2. Входящий SSH трафик
$IPT -N ssh-in
$IPT -F ssh-in
$IPT -A ssh-in -p tcp --dport 22 -j ACCEPT
# Защита о флуда по SSH
$IPT -A ssh-in -m limit --limit 1/second -p tcp --tcp-flags ALL RST --dport ssh -j ACCEPT
$IPT -A ssh-in -m limit --limit 1/second -p tcp --tcp-flags ALL FIN --dport ssh -j ACCEPT
$IPT -A ssh-in -m limit --limit 1/second -p tcp --tcp-flags ALL SYN --dport ssh -j ACCEPT
$IPT -A ssh-in -m state --state RELATED,ESTABLISHED -p tcp --dport ssh -j ACCEPT
# 1. Разрешаем исходящий ICMP трафик (функции диагностики)
# 1. Необходимо чтобы мы пинговали всех.
$IPT -N icmp_out
$IPT -F icmp_out
# Разрешаем icmp-reply во все сети в ответ на icmp-request'ы с сетей
$IPT -A icmp_out -p icmp --icmp-type 8 -j ACCEPT
$IPT -A icmp_out -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A icmp_out -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
# Проверка флагов. Обнаружение сканеров потров. Взято из руководства по Iptables 1.1.19
$IPT -N check_tcp
$IPT -F check_tcp
# Отбрасываем невалидные пакты
$IPT -A allowed -m state --state INVALID  -m limit --limit 3/minute -j ULOG --ulog-prefix "INVALID"
$IPT -A allowed -m state --state INVALID -j DROP
$IPT -A check_tcp -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPT -A check_tcp -p tcp ! --syn -m state --state NEW -j ULOG --ulog-prefix "NEW not --syn"
$IPT -A check_tcp -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A check_tcp -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j ULOG --ulog-prefix "NMAP-XMAS"
$IPT -A check_tcp -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT -A check_tcp -p tcp --tcp-flags ALL ALL -m limit --limit 5/minute -j ULOG --ulog-prefix "XMAS"
$IPT -A check_tcp -p tcp --tcp-flags ALL ALL -j DROP
$IPT -A check_tcp -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 5/minute -j ULOG --ulog-prefix "XMAS-PSH"
$IPT -A check_tcp -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPT -A check_tcp -p tcp --tcp-flags ALL NONE -m limit --limit 5/minute -j ULOG --ulog-prefix "NULL_SCAN"
$IPT -A check_tcp -p tcp --tcp-flags ALL NONE -j DROP
$IPT -A check_tcp -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j ULOG --ulog-prefix "SYN/RST"
$IPT -A check_tcp -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A check_tcp -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j ULOG --ulog-prefix "SYN/FIN"
$IPT -A check_tcp -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

###################
# INPUT		  #
# Входящий трафик #
###################
# Проверяем пакеты.
$IPT -A INPUT -p tcp -j check_tcp
# FTP
$IPT -A INPUT -p tcp --dport 21 -j ACCEPT
$IPT -A INPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Разрешаем входящие по SSH
$IPT -A INPUT -p tcp --dport 22 -j ssh-in
# Torrents
$IPT -A INPUT -p tcp -m tcp --dport 59222 -j ACCEPT
#Разрешить Samba From Specified Hosts
$IPT -A INPUT -p tcp -i eth0 --dport 137:139 -j ACCEPT
$IPT -A INPUT -p udp -i eth0 --dport 137:139 -j ACCEPT
$IPT -A INPUT -p tcp -i eth0 --sport 137:139 -j ACCEPT
$IPT -A INPUT -p udp -i eth0 --sport 137:139 -j ACCEPT
# Разрешить input skype
$IPT -A INPUT -p tcp --dport 13308 -j ACCEPT
# Разрешить Mediatomb
$IPT -A INPUT -p tcp --dport 49152 -j ACCEPT
# Разрешаем входящие по DNS
$IPT -A INPUT -s $LAN -p udp --dport domain -j com-allow
# Разрешаем входящие по icmp
$IPT -A INPUT -p icmp -j icmp_in
# Разрешаем входящие на петлю, при его включении заметно улучшение отклика при ssh-авторизации
$IPT -A INPUT -i $LO_IF -d $LOOPBACK -j ACCEPT
# Ну, и разрешаем statefull-пекеты.
$IPT -A INPUT -j allowed

#####################
# FORWARD           #
# Транзитный трафик #
#####################
# Отбрасываем плохие пакеты
$IPT -A FORWARD -j check_tcp
# Разрешаем SSH
$IPT -A FORWARD -s $LAN -p tcp --dport 22 -j com-allow
# Разрешаем прохождение icmp-пакетов
$IPT -A FORWARD -p icmp -j icmp_in
# Разрешаем прохождение асечных пакетов
$IPT -A FORWARD -i $LAN_IF -s $LAN -p tcp --dport 5190 -j com-allow
# Разрешаем веб-трафик, если у нас не стоит прокси сервер, можно раскоментить эту строку
# Здесь же показано применения модуля "multiport"
$IPT -A FORWARD -i $LAN_IF -s $LAN -p tcp -m multiport --dport 80,443,1080,8080 -j com-allow
# Разрешаем прохождение почтовых пакетиков от POP и SMTP
$IPT -A FORWARD -i $LAN_IF -s $LAN -p tcp -m multiport --dport 25,110 -j com-allow
# Разрешаем входящие пакеты, являющиеся частью установленного соединения
$IPT -A FORWARD -j allowed

####################
# OUTPUT	   #	
# исходящий трафик #
####################
$IPT -A OUTPUT -j check_tcp
$IPT -A OUTPUT -o $LAN_IF -j ACCEPT
$IPT -A OUTPUT -p icmp -j icmp_out
$IPT -A OUTPUT -o $LO_IF -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 22 -j com-allow
$IPT -A OUTPUT -p udp --dport domain -j com-allow
$IPT -A OUTPUT -p tcp -m multiport --dport http,https -j com-allow
$IPT -A OUTPUT -j allowed
# Torrents
$IPT -A OUTPUT -p tcp --source-port 59222 -j ACCEPT
# Skype
$IPT -A OUTPUT -p tcp -o $LAN_IF --dport 13308 -j ACCEPT
$IPT -A OUTPUT -p udp -o $LAN_IF --sport 13308 -j ACCEPT
# Разрешить Samba From Specified Hosts
$IPT -A OUTPUT -p TCP -o eth0 --dport 137:139 -j ACCEPT
$IPT -A OUTPUT -p UDP -o eth0 --dport 137:139 -j ACCEPT
$IPT -A OUTPUT -p TCP -o eth0 --dport 445 -j ACCEPT
$IPT -A OUTPUT -p UDP -o eth0 --dport 445 -j ACCEPT
# Разрешить Mediatomb 
$IPT -A OUTPUT -p tcp --source-port 49152 -j ACCEPT

  One Response to “Обновленный скрипт Iptables”

  1. […] готовый скрипт для домашних условий.fire.rules Разберем подробно, что мы сделали. $IPT -A INPUT -p tcp —dport 21 […]

 Leave a Reply

(required)

(required)

39 Запросов к базе. 0,365 Генерации страницы, 36MB Использование памяти.
Вы зашли с IP: 54.198.210.67