The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как пропустить почтовый трафик к внутр. серверу?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как пропустить почтовый трафик к внутр. серверу?"
Сообщение от rumit Искать по авторуВ закладки on 24-Мрт-04, 07:03  (MSK)
Вот ситуация:
1.Машина с Linux RH9 работает как прокси-сервер, две сетевых, PPPoE.
  сетевая в сторону провайдера (eth1) имеет IP 212.42.113.ххх
  сетевая в сторону лок. сети (eth0) имеет IP 192.168.0.30
2.Почтовый сервер MDaemon в локальной сети с адресом 192.168.0.1
  установлен на машине под win2000.
3.mail.elcat.kg - это smtp/pop3 сервер провайдера

Вот что я делаю, чтобы мой MD получал/отправлял почту
# pop-прием
$IPTABLES -t nat -I PREROUTING -s mail.elcat.kg -d 212.42.113.ххх -i eth1 -p tcp -dport 110 -j DNAT -to 192.168.0.1:110
$IPTABLES -I FORWARD -s mail.elcat.kg -d 192.168.0.1 -i eth1 -o eth0 -p tcp -dport 110 -j ACCEPT
# smtp-отправка
$IPTABLES -t nat -I PREROUTING -s 192.168.0.1 -d 192.168.0.30 -i eth0 -p tcp -dport 25 -j DNAT –to 212.42.113.ххх:25
$IPTABLES -I FORWARD -s 192.168.0.1 -d 212.42.113.ххх -i eth0 -o eth1 -p tcp -dport 25 -j ACCEPT
# общая часть
$IPTABLES -t nat -I POSTROUTING -o eth0 -s 192.168.0.0/24 -d 192.168.0.30 -j SNAT -to 212.42.113.ххх

Но не работает.
Что неверно? Заранее признателен.
Тимур

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Как пропустить почтовый трафик к внутр. серверу?"
Сообщение от Gennadi emailИскать по авторуВ закладки on 24-Мрт-04, 09:36  (MSK)
>Вот ситуация:
>1.Машина с Linux RH9 работает как прокси-сервер, две сетевых, PPPoE.
>  сетевая в сторону провайдера (eth1) имеет IP 212.42.113.ххх
>  сетевая в сторону лок. сети (eth0) имеет IP 192.168.0.30
>2.Почтовый сервер MDaemon в локальной сети с адресом 192.168.0.1
>  установлен на машине под win2000.
>3.mail.elcat.kg - это smtp/pop3 сервер провайдера
>
>Вот что я делаю, чтобы мой MD получал/отправлял почту
># pop-прием
>$IPTABLES -t nat -I PREROUTING -s mail.elcat.kg -d 212.42.113.ххх -i eth1 -p
>tcp -dport 110 -j DNAT -to 192.168.0.1:110
>$IPTABLES -I FORWARD -s mail.elcat.kg -d 192.168.0.1 -i eth1 -o eth0 -p
>tcp -dport 110 -j ACCEPT
># smtp-отправка
>$IPTABLES -t nat -I PREROUTING -s 192.168.0.1 -d 192.168.0.30 -i eth0 -p
>tcp -dport 25 -j DNAT –to 212.42.113.ххх:25
>$IPTABLES -I FORWARD -s 192.168.0.1 -d 212.42.113.ххх -i eth0 -o eth1 -p
>tcp -dport 25 -j ACCEPT
># общая часть
>$IPTABLES -t nat -I POSTROUTING -o eth0 -s 192.168.0.0/24 -d 192.168.0.30 -j
>SNAT -to 212.42.113.ххх
>
>Но не работает.
>Что неверно? Заранее признателен.
>Тимур

# IP-Adresse  LAN-Interfaces'a находим
LAN_IP=$(ifconfig eth1 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)

######  NAT для локальной машины 192.268.0.1 port 110    ###########
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 110 -j DNAT --to-destination 192.168.0.1
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 110 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.0.1 --dport 110 -j ACCEPT

######  NAT для локальной машины 192.268.0.1 port 25    ###########
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 25 -j DNAT --to-destination 192.168.0.1
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 25 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.0.1 --dport 25 -j ACCEPT
     #######################################################################

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Как пропустить почтовый трафик к внутр. серверу?"
Сообщение от Gennadi emailИскать по авторуВ закладки on 24-Мрт-04, 09:58  (MSK)

Извиняюсь - eth0 заменить на ppp0.

# IP-Adresse  LAN-Interfaces'a находим
LAN_IP=$(ifconfig eth1 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)

######  NAT для локальной машины 192.268.0.1 port 110    ###########
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 110 -j DNAT --to-destination 192.168.0.1
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 110 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.0.1 --dport 110 -j ACCEPT

######  NAT для локальной машины 192.268.0.1 port 25    ###########
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 25 -j DNAT --to-destination 192.168.0.1
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 25 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.0.1 --dport 25 -j ACCEPT
#######################################################################

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Как пропустить почтовый трафик к внутр. серверу?"
Сообщение от Тимур emailИскать по авторуВ закладки on 24-Мрт-04, 12:46  (MSK)
Если можно, то поподробнее про:
# IP-Adress  LAN-Interfac'a находим
LAN_IP=$(ifconfig eth1 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)

1. Где прописывать эту строку?
2. Почему надо "вычислять" таким образом IP адрес для eth1. Он хоть и
   присваивается RADIUS'ом динамически, но всегда один и тот же. Поэтому,
   я присвоил eth1 статический IP: 212.42.113.ххх
3. Почему в строке
   iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 110 -j
   SNAT --to-source $LAN_IP  
   стоит -o eth1, а не -o ppp0?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Как пропустить почтовый трафик к внутр. серверу?"
Сообщение от rumit Искать по авторуВ закладки on 24-Мрт-04, 12:58  (MSK)
Геннадий!
Если можно, то поподробнее про:
# IP-Adress  LAN-Interfac'a находим
LAN_IP=$(ifconfig eth1 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)

1. Где прописывать эту строку?
2. Почему надо "вычислять" таким образом IP адрес для eth1. Он хоть и
   присваивается RADIUS'ом динамически, но всегда один и тот же. Поэтому,
   я присвоил eth1 статический IP: 212.42.113.ххх
3. Почему в строке
   iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 110 -j
   SNAT --to-source $LAN_IP  
   стоит -o eth1, а не -o ppp0?

Спасибо за поддержку!


  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Как пропустить почтовый трафик к внутр. серверу?"
Сообщение от Gennadi emailИскать по авторуВ закладки on 24-Мрт-04, 16:09  (MSK)
>Геннадий!
>Если можно, то поподробнее про:
>Спасибо за поддержку!
>
здесь NAT для локальной машины 192.268.0.1 port 25 и 110

=========  firewall  =======================================
#!/bin/bash
### BEGIN INIT INFO
# Provides: IP-Paketfilter
# Required-Start: $network $local_fs
# Required-Stop: $local_fs
# Default-Start: 3 5
# Default-Stop: 0 1 2 4 6
### END INIT INFO
#

case "$1" in
   start)
     echo "Starte IP-Paketfilter"

     # iptables-Modul
     modprobe ip_tables
     # Connection-Tracking-Module
     modprobe ip_conntrack
     # Das Modul ip_conntrack_irc ist erst bei Kerneln >= 2.4.19 verfuegbar
     modprobe ip_conntrack_irc
     modprobe ip_conntrack_ftp

     # Tabelle flushen
     iptables -F
     iptables -t nat -F
     iptables -t mangle -F
     iptables -X
     iptables -t nat -X
     iptables -t mangle -X

     # Default-Policies setzen
     iptables -P INPUT DROP
     iptables -P OUTPUT DROP
     iptables -P FORWARD DROP

     # MY_REJECT-Chain
     iptables -N MY_REJECT

     # MY_REJECT fuellen
     iptables -A MY_REJECT -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT TCP "
     iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
     iptables -A MY_REJECT -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT UDP "
     iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
     iptables -A MY_REJECT -p icmp -m limit --limit 7200/h -j LOG --log-prefix "DROP ICMP "
     iptables -A MY_REJECT -p icmp -j DROP
     iptables -A MY_REJECT -m limit --limit 7200/h -j LOG --log-prefix "REJECT OTHER "
     iptables -A MY_REJECT -j REJECT --reject-with icmp-proto-unreachable

     # MY_DROP-Chain
     iptables -N MY_DROP
     iptables -A MY_DROP -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN DROP "
     iptables -A MY_DROP -j DROP

     # Alle verworfenen Pakete protokollieren
     iptables -A INPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "INPUT INVALID "
     iptables -A OUTPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "OUTPUT INVALID "
     iptables -A FORWARD -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "FORWARD INVALID "

     # Korrupte Pakete zurueckweisen
     iptables -A INPUT -m state --state INVALID -j DROP
     iptables -A OUTPUT -m state --state INVALID -j DROP
     iptables -A FORWARD -m state --state INVALID -j DROP

     # Stealth Scans etc. DROPpen
     # Keine Flags gesetzt
     iptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP
     iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j MY_DROP

     # SYN und FIN gesetzt
     iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP
     iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP

     # SYN und RST gleichzeitig gesetzt
     iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP
     iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP

     # FIN und RST gleichzeitig gesetzt
     iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP
     iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP

     # FIN ohne ACK
     iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP
     iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP

     # PSH ohne ACK
     iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP
     iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP

     # URG ohne ACK
     iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j MY_DROP
     iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j MY_DROP

     # Loopback-Netzwerk-Kommunikation zulassen
     iptables -A INPUT -i lo -j ACCEPT
     iptables -A OUTPUT -o lo -j ACCEPT

     # Maximum Segment Size (MSS) für das Forwarding an PMTU anpassen
     iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

     # Connection-Tracking aktivieren
     iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
     iptables -A FORWARD -i ! ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
     iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
     iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

     # SSH
     #iptables -A INPUT -i ppp0 -m state --state NEW -p tcp --dport 22 -j ACCEPT

     # IP-Adresse des LAN-Interfaces ermitteln
     LAN_IP=$(ifconfig eth1 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)

######  NAT для локальной машины 192.268.0.1 port 25    ###########
     iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 25 -j DNAT --to-destination 192.168.0.1
     iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 25 -j SNAT --to-source $LAN_IP
     iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.0.1 --dport 25 -j ACCEPT
######  NAT для локальной машины 192.268.0.1 port 110    ###########
     iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 110 -j DNAT --to-destination 192.168.0.1
     iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 110 -j SNAT --to-source $LAN_IP
     iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.0.1 --dport 110 -j ACCEPT
    #######################################################################
     # LAN-Zugriff auf eth1
     iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT

     # Default-Policies mit REJECT
     iptables -A INPUT -j MY_REJECT
     iptables -A OUTPUT -j MY_REJECT
     iptables -A FORWARD -j MY_REJECT

     # Routing
     echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null

     # Masquerading
     iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

     # SYN-Cookies
     echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null

     # Stop Source-Routing
     for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_source_route 2> /dev/null; done

     # Stop Redirecting
     for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_redirects 2> /dev/null; done

     # Reverse-Path-Filter
     for i in /proc/sys/net/ipv4/conf/*; do echo 2 > $i/rp_filter 2> /dev/null; done

     # Log Martians
     for i in /proc/sys/net/ipv4/conf/*; do echo 1 > $i/log_martians 2> /dev/null; done

     # BOOTP-Relaying ausschalten
     for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/bootp_relay 2> /dev/null; done

     # Proxy-ARP ausschalten
     for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/proxy_arp 2> /dev/null; done

     # Ungültige ICMP-Antworten ignorieren
     echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null

     # ICMP Echo-Broadcasts ignorieren
     echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null

     # Max. 500/Sekunde (5/Jiffie) senden
     echo 5 > /proc/sys/net/ipv4/icmp_ratelimit

     # Speicherallozierung und -timing für IP-De/-Fragmentierung
     echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
     echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
     echo 30 > /proc/sys/net/ipv4/ipfrag_time

     # TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
     echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

     # Maximal 3 Antworten auf ein TCP-SYN
     echo 3 > /proc/sys/net/ipv4/tcp_retries1

     # TCP-Pakete maximal 15x wiederholen
     echo 15 > /proc/sys/net/ipv4/tcp_retries2

     ;;

   stop)
     echo "Stoppe IP-Paketfilter"
     # Tabelle flushen
     iptables -F
     iptables -t nat -F
     iptables -t mangle -F
     iptables -X
     iptables -t nat -X
     iptables -t mangle -X
     echo "Deaktiviere IP-Routing"
     echo 0 > /proc/sys/net/ipv4/ip_forward

     # Default-Policies setzen
     iptables -P INPUT ACCEPT
     iptables -P OUTPUT ACCEPT
     iptables -P FORWARD ACCEPT
     ;;

   status)
     echo "Tabelle filter"
     iptables -L -vn
     echo "Tabelle nat"
     iptables -t nat -L -vn
     echo "Tabelle mangle"
     iptables -t mangle -L -vn
     ;;

   *)
     echo "Fehlerhafter Aufruf"
     echo "Syntax: $0 {start|stop|status}"
     exit 1
     ;;

esac

===============================================================

Skript "firewall" скопировать в директорию /etc/init.d :
chmod 755 /etc/init.d/firewall
ln -s /etc/init.d/firewall /sbin/rcfirewall
chkconfig -a firewall
rcfirewall start ( stop status)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Как пропустить почтовый трафик к внутр. серверу?"
Сообщение от vt Искать по авторуВ закладки on 24-Мрт-04, 16:55  (MSK)
>######  NAT для локальной машины 192.268.0.1 port 25    
>     iptables -t nat -A PREROUTING -i ppp0
>-p tcp --dport 25 -j DNAT --to-destination 192.168.0.1
>     iptables -t nat -A POSTROUTING -o eth1
>-p tcp --dport 25 -j SNAT --to-source $LAN_IP

Заметим, что без авторизации это - open relay
Не говоря уже о логах, где будет только $LAN_IP

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Как пропустить почтовый трафик к внутр. серверу?"
Сообщение от Gennadi emailИскать по авторуВ закладки on 24-Мрт-04, 17:15  (MSK)
>Заметим, что без авторизации это - open relay

Это проблема не firewall'a, а почтого сервера на котором open relay должен быть закрыт.

>Не говоря уже о логах, где будет только $LAN_IP

Локальная карта eth0 - исправил. Извиняюсь...

===============================================================
#!/bin/bash
#
case "$1" in
  start)
    echo "Starte IP-Paketfilter"
    modprobe ip_tables
    modprobe ip_conntrack
    modprobe ip_conntrack_irc
    modprobe ip_conntrack_ftp

    # Tabelle  заполнить
    iptables -F
    iptables -t nat -F
    iptables -t mangle -F
    iptables -X
    iptables -t nat -X
    iptables -t mangle -X

    # Default-Policies установить
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

    # MY_REJECT-Chain
    iptables -N MY_REJECT

    # MY_REJECT заполнить
    iptables -A MY_REJECT -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT TCP "
    iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
    iptables -A MY_REJECT -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT UDP "
    iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
    iptables -A MY_REJECT -p icmp -m limit --limit 7200/h -j LOG --log-prefix "DROP ICMP "
    iptables -A MY_REJECT -p icmp -j DROP
    iptables -A MY_REJECT -m limit --limit 7200/h -j LOG --log-prefix "REJECT OTHER "
    iptables -A MY_REJECT -j REJECT --reject-with icmp-proto-unreachable

    # MY_DROP-Chain
    iptables -N MY_DROP
    iptables -A MY_DROP -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN DROP "
    iptables -A MY_DROP -j DROP

    # Все выброшенные пакеты протоколировать
    iptables -A INPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "INPUT INVALID "
    iptables -A OUTPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "OUTPUT INVALID "
    iptables -A FORWARD -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "FORWARD INVALID "

    # Битые пакеты выбросить
    iptables -A INPUT -m state --state INVALID -j DROP
    iptables -A OUTPUT -m state --state INVALID -j DROP
    iptables -A FORWARD -m state --state INVALID -j DROP

    # Stealth Scans etc. DROPpen (закрыть)
    # Без Flags установить
    iptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP
    iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j MY_DROP

    # SYN und FIN установить
    iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP
    iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP

    # SYN и RST одновременно установить
    iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP
    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP

    # FIN и RST одновременно установить
    iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP
    iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP

    # FIN без ACK
    iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP
    iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP

    # PSH без ACK
    iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP
    iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP

    # URG без ACK
    iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j MY_DROP
    iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j MY_DROP

    # Loopback-Netzwerk-Kommunikation разрешить
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT

    # Maximum Segment Size (MSS)для Forwarding на PMTU разрешить
    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

    # Connection-Tracking активировать
    iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -i ! ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    # IP-Adresse des LAN-Interfaces определить
    LAN_IP=$(ifconfig eth0 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)

    # NAT для SMTP
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 25 -j DNAT --to-destination 192.168.0.1
    iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 25 -j SNAT --to-source $LAN_IP
    iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.0.1 --dport 25 -j ACCEPT

    # NAT для POP3
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 110 -j DNAT --to-destination 192.168.0.1
    iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 110 -j SNAT --to-source $LAN_IP
    iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.0.1 --dport 110 -j ACCEPT

    # Доруск из LAN к eth0 разрешить
    iptables -A INPUT -m state --state NEW -i eth0 -j ACCEPT

    # Default-Policies mit REJECT
    iptables -A INPUT -j MY_REJECT
    iptables -A OUTPUT -j MY_REJECT
    iptables -A FORWARD -j MY_REJECT

    # Routing
    echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null

    # Masquerading
    iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

    # SYN-Cookies
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null

    # Stop Source-Routing
    for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_source_route 2> /dev/null; done

    # Stop Redirecting
    for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_redirects 2> /dev/null; done

    # Reverse-Path-Filter
    for i in /proc/sys/net/ipv4/conf/*; do echo 2 > $i/rp_filter 2> /dev/null; done

    # Log Martians
    for i in /proc/sys/net/ipv4/conf/*; do echo 1 > $i/log_martians 2> /dev/null; done

    # BOOTP-Relaying отключить
    for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/bootp_relay 2> /dev/null; done

    # Proxy-ARP отключить
    for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/proxy_arp 2> /dev/null; done

    # Негодные ICMP-ответы игнорировать
    echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null

    # ICMP Echo-Broadcasts игнорировать
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null

    # Max. 500/Sekunde (5/Jiffie) посылать
    echo 5 > /proc/sys/net/ipv4/icmp_ratelimit

    # Оптимизация памяти и времени для IP-де/-фрагментирования
    echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
    echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
    echo 30 > /proc/sys/net/ipv4/ipfrag_time

    # TCP-FIN-Timeout защиту от DoS-Attacken установить
    echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

    # Maximal 3  ответа на один TCP-SYN
    echo 3 > /proc/sys/net/ipv4/tcp_retries1

    # TCP-Pakete maximal 15x повторить
    echo 15 > /proc/sys/net/ipv4/tcp_retries2

    ;;

  stop)
    echo "Stoppe IP-Paketfilter"
    # Tabelle flushen
    iptables -F
    iptables -t nat -F
    iptables -t mangle -F
    iptables -X
    iptables -t nat -X
    iptables -t mangle -X
    echo "Deaktiviere IP-Routing"
    echo 0 > /proc/sys/net/ipv4/ip_forward

    # Default-Policies установить
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    ;;

  status)
    echo "Tabelle filter"
    iptables -L -vn
    echo "Tabelle nat"
    iptables -t nat -L -vn
    echo "Tabelle mangle"
    iptables -t mangle -L -vn
    ;;

  *)
    echo "Bad run filter"
    echo "Syntax: $0 {start|stop|status}"
    exit 1
    ;;

esac
============================================================

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Как пропустить почтовый трафик к внутр. серверу?"
Сообщение от vt Искать по авторуВ закладки on 24-Мрт-04, 22:39  (MSK)
>>Заметим, что без авторизации это - open relay
>
>Это проблема не firewall'a, а почтого сервера на котором open relay должен
>быть закрыт.
>
>>Не говоря уже о логах, где будет только $LAN_IP
>
>Локальная карта eth0 - исправил. Извиняюсь...

Неважно как называется карта - понятно, что подразумевалась локальная.
Я немного о другом:
все пакеты на 25 порт почтового сервера
всегда и отовсюду будут попадать с src-адресом $LAN_IP.
То есть, различать по адресу кому открыть relay, а кому нет
сервер не сможет - либо никому, либо всем.
Либо он должен уметь делать smtp-авторизацию -
не знаю умеет ли этот MDaemon.
Естественно, в логах у него тоже будет только $LAN_IP.
Это проблема не firewall-a в том смысле, что не ему ее решать.
Но это проблема firewall-a в том смысле, что он ее создает.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру