[Sysadmins] iptables трансляция протокола

Шенцев Алексей Владимирович =?iso-8859-1?q?ashen_=CE=C1_nsrz=2Eru?=
Пн Июл 3 16:08:57 MSD 2006


В сообщении от 3 июля 2006 15:56 Дворников М.В. написал(a):
> *nat
> :PREROUTING ACCEPT [49:10802]
> :POSTROUTING ACCEPT [11:1372]
> :OUTPUT ACCEPT [4:215]
?! У вас всё разрешено ?! 
>
> # proxy
> -A PREROUTING -s 10.X/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT
> --to-ports 3128
Ага вот тут и засада. Вместо отправки на соединение с казначейством у вас 
будет заворачивать трафик на прокси сервер. У вас перед тем как будут 
отработано правило для работы с казначейством сработает сначала правило, 
перенаправляющее трафик на прокси, так что до казначейства трафик не дойдёт. 
Сначало работает PREROUTING, а потом POSTROUTING.
Вам надо полностью перестроить правила для вашего файервола.  Пример скрипта 
настройки iptables:
______________________________________
#!/bin/sh
#
service iptables stop
#  для удобства, ибо интерфейсов несколько
INET_IFACE="eth1" #вместо ethX может стоять и pppX и любой другой интерфейс
LAN_IFACE="eth0"
INET_IP=""
LAN_IP=""
LAN=""
LAN_MASK="24"
BANK_IP=""
BANK_USER_IP1=""
ADMIN_IP1=""
FREE_USER_IP1=""
# тоже для удобства
IPTABLES="/sbin/iptables"
# включаем пересылку пакетов
#echo 1 > /proc/sys/net/ipv4/ip_forward
# стандартные действия
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
# удаляем все имеющиеся правила
$IPTABLES -F
$IPTABLES -X
# создаем свои цепочки
# отбрасываем tcp с неправильными флагами
$IPTABLES -N bad_tcp_packets
# tcp, прошедшие основную проверку
$IPTABLES -N allowed
# все пакеты соотв. протоколов
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets
# безусловно разрешаем соединения по локальному интерфейсу (loopback, 
127.0.0.1)
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
# безусловно разрешаем соединения по интерфейсу ЛВС (et0)
$IPTABLES -A INPUT -i $LAN_IFACE -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IFACE -j ACCEPT
# сюда пойдут все tcp-пакеты, и будут отброшены имеющие статус NEW, но не 
имеющие флагов SYN,ACK
# предохраняет от определенных типов атак, подробности в приложении B4 к 
Iptables Tutorial
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m 
state --state NEW -j DROP
# принимаем все пакеты, относящиеся к уже установленным соединениям
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
# а все остальные из этой цепочки сбрасываем
$IPTABLES -A allowed -j DROP
# здесь открываем  некоторые порты, т.к. по умолчанию мы закрыли всё
# Слушаем DNS
$IPTABLES -A tcp_packets -p TCP -s 0/0 --sport 53 -j ACCEPT                                     
# Domain Name Server
$IPTABLES -A udp_packets -p UDP -s 0/0 --sport 53 -j ACCEPT                                     
# Domain Name Server
# Принимаем
#$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m tcp --dport 20 -j ACCEPT                                   
# File Transfer [Default Data]
#$IPTABLES -A INPUT -i $INET_IFACE -p udp -m udp --dport 20 -j ACCEPT                                   
# File Transfer [Default Data]
#$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m tcp --dport 21 -j ACCEPT                                   
# File Transfer [Control]
#$IPTABLES -A INPUT -i $INET_IFACE -p udp -m udp --dport 21 -j ACCEPT                                   
# File Transfer [Control]
$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m tcp --dport 25 -j ACCEPT                                    
# Simple Mail Transfer Protocol
$IPTABLES -A INPUT -i $INET_IFACE -p udp -m udp --dport 25 -j ACCEPT                                    
# Simple Mail Transfer Protocol
$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m tcp --dport 110 -j ACCEPT                                   
# Post Office Protocol - Version 3
$IPTABLES -A INPUT -i $INET_IFACE -p udp -m udp --dport 110 -j ACCEPT                                   
# Post Office Protocol - Version 3
#$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m tcp --dport 995 -j ACCEPT                                  
# pop3 protocol over TLS/SSL
#$IPTABLES -A INPUT -i $INET_IFACE -p udp -m udp --dport 995 -j ACCEPT                                  
# pop3 protocol over TLS/SSL
#$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m tcp --dport 143 -j ACCEPT                                  
# IMAP2
#$IPTABLES -A INPUT -i $INET_IFACE -p udp -m udp --dport 143 -j ACCEPT                                  
# IMAP2
#$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m udp --dport 220 -j ACCEPT                                  
# IMAP3
#$IPTABLES -A INPUT -i $INET_IFACE -p udp -m udp --dport 220 -j ACCEPT                                  
# IMAP3
#$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m tcp --dport 993 -j ACCEPT                                  
# IMAP4
#$IPTABLES -A INPUT -i $INET_IFACE -p udp -m udp --dport 993 -j ACCEPT                                  
# IMAP4
$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m tcp --dport 80 -j ACCEPT                                    
# World Wide Web HTTP
$IPTABLES -A INPUT -i $INET_IFACE -p udp -m udp --dport 80 -j ACCEPT                                    
# World Wide Web HTTP
#$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m tcp --dport 443 -j ACCEPT                                  
# http protocol over TLS/SS
#$IPTABLES -A INPUT -i $INET_IFACE -p udp -m udp --dport 443 -j ACCEPT                                  
# http protocol over TLS/SS
$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m tcp --dport 5222 -j ACCEPT                                  
# Jabber Client Connection
$IPTABLES -A INPUT -i $INET_IFACE -p udp -m udp --dport 5222 -j ACCEPT                                  
# Jabber Client Connection
$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m tcp --dport 5269 -j ACCEPT                                  
# Jabber Server Connection
$IPTABLES -A INPUT -i $INET_IFACE -p udp -m udp --dport 5269 -j ACCEPT                                  
# Jabber Server Connection
#Ну а теперь займёмся организацией выхода в инет определённых категорий юзеров
#Админу можно всё ... :)
$IPTABLES -t nat -A POSTROUTING -s $ADMIN_IP1 -d ! $LAN/$LAN_MASK -o 
$INET_IFACE -j SNAT --to-source $INET_IP
$IPTABLES -A FORWARD -s $ADMIN_IP1 -d ! $LAN/$LAN_MASK -j ACCEPT
#Форвардинг для блатных, когда админ добрый
#$IPTABLES -t nat  -A POSTROUTING -s $FREE_USER_IP1 -d ! $LAN/$LAN_MASK -o 
$INET_IFACE -j SNAT --to-source $INET_IP
#$IPTABLES -A FORWARD -s $FREE_USER_IP1 -d ! $LAN/$LAN_MASK -j ACCEPT
# NAT для программ типа банк-клиент, не желающих работать через прокси-сервер.
# Для этих прошрамм нужно у клиента отключить прокси-сервер для ftp.
$IPTABLES -t nat  -A POSTROUTING -s $BANK_USER_IP1 -d $BANK_IP -o 
$INET_IFACE -j SNAT --to-source $INET_IP
$IPTABLES -A FORWARD -s $BANK_USER_IP1 -d $BANK_IP -j ACCEPT
# Принимаем установленное соеденения на $INET_IFACE
$IPTABLES -A INPUT -i $INET_IFACE -m state --state RELATED,ESTABLISHED -j 
ACCEPT
# Принимаем форвардинг для установленных соединений
$IPTABLES -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Пишем лог для входящих соеденений на $INET_IFACE
$IPTABLES -A INPUT -i $INET_IFACE -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j 
LOG --log-level 7 --log-tcp-option
# Пишем лог для исходящих соеденений на $INET_IFACE
$IPTABLES -A OUTPUT -o $INET_IFACE -p tcp -m tcp --tcp-flags FIN,SYN,ACK 
SYN -j LOG --log-level 7 --log-tcp-option
# настал черед ICMP ...
# из-за системы видеоконфиренции, использующую icmp, придётся его разрешить,
# но ограничем 5-ю пакетами в секунду и максимальным размером в 110 байт
$IPTABLES -A INPUT -p icmp -i $INET_IFACE -m limit -m length --limit 
5/second --limit-burst 10 --length :110 -j ACCEPT
# по поводу отправки будет менее жадны - 10 пакетов в секунду
$IPTABLES -A OUTPUT -p icmp -o $INET_IFACE -m limit -m length --limit 
10/second --limit-burst 20 --length :110 -j ACCEPT
# разводим пакеты по соотв. цепочкам
# tcp уходит на доп. проверку
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
# все пакеты, относящиеся к уже установленным соединениям (для tcp
# из-за отдельной цепочки пришлось это правило еще раз указать выше)
$IPTABLES -A INPUT -p ALL -i $INET_IFACE -m state --state 
ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets
service iptables save

-- 
С уважением Шенцев Алексей Владимирович.
E-mail: ashen на nsrz.ru
ICQ: 271053845


Подробная информация о списке рассылки Sysadmins