151 (08.04.2013 09:21:34 отредактировано urfin)

Enzo_brn⇓ пишет:

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

Могут работать, а могут не работать. Смотря, как определять работоспособность.
Вам нужно разрешить только проход icmp при запрете прохода остальных протоколов, ведь так?
Правило

$IPT -A FORWARD -j ACCEPT

разрешает проход всему транзитному потоку.
Правила

$IPT -P FORWARD ACCEPT
$IPT -A FORWARD ! -p icmp -j DROP

хотя лучше это будет выглядеть так:

$IPT -P FORWARD DROP
$IPT -A FORWARD -p icmp -j ACCEPT

разрешают проход только транзитному icmp. При этом правиле пинги должны ходить. Вы утверждаете, что это не работает. Как Вы проверяете работоспособность?

152 (08.04.2013 10:16:19 отредактировано Me_Shock)

urfin⇓ пишет:

Вам нужно разрешить только проход icmp при запрете прохода остальных протоколов, ведь так?

пока только его, позже еще будут обычные tcp и udp порты.

urfin⇓ пишет:

хотя лучше это будет выглядеть так:

так я делал, есть в одной из закомментированных попыток 1..5

urfin⇓ пишет:

разрешают проход только транзитному icmp. При этом правиле пинги должны ходить. Вы утверждаете, что это не работает. Как Вы проверяете работоспособность?

проверяю с windows-машины, зацепленной в сеть $INT_IF (eth1), делаю ping ya.ru - не уходит, убираю уточняющий параметр: -p icmp - пинги пошли, ставлю на место - все колом!

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

153

Enzo_brn⇓ пишет:

делаю ping ya.ru

Вот здесь и Ваша ошибка при проверке. Проверяйте

ping 77.88.21.3

154

urfin⇓ пишет:

Вот здесь и Ваша ошибка при проверке. Проверяйте
ping 77.88.21.3

я эпический лесной Олень!!! bu  bj
Спасибо огромное Вам))) вряд ли DNS запросы у меня пойдут когда-нибудь через icmp, грею тут зря людям голову!

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

155

возможно ли упростить правила разрешающие DNS? :

# 5. alow DNS.
$IPT -A INPUT -p udp -s 0/0 --sport 53 -d $SRV_IP --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p udp -s $SRV_IP --sport 53 -d 0/0 --dport 53 -m state --state ESTABLISHED -j ACCEPT
# 6. DNS FWD
$IPT -A FORWARD -p udp --sport 53 -j ACCEPT
$IPT -A FORWARD -p udp --dport 53 -j ACCEPT
надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

156

А что такое SRV_IP? Адрес какого-то внешнего DNS-сервера?

157 (09.04.2013 13:12:05 отредактировано Me_Shock)

urfin⇓ пишет:

А что такое SRV_IP? Адрес какого-то внешнего DNS-сервера?

нее, этого. SRV_IP="192.168.0.254" потом оно станет реальным белым, вобщем это ip адрес gw5 в сети WAN(eth0 192.168.1.0/24)
УМВР, просто громоздко.)

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

158

Вот это

$IPT -A INPUT -p udp -s 0/0 --sport 53 -d $SRV_IP --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT

замените на это

$IPT -A INPUT -p udp -s 0/0 --sport 53 -d $SRV_IP --dport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT

NEW здесь совершенно лишнее, для протокола udp ответы будут с состоянием ESTABLISHED
А лучше все же так

$IPT -A INPUT -p udp -s 0/0 --sport 53 -d $SRV_IP --dport 53 -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Если будете в дальнейшем вставлять правила для других портов, то не нужно будет повторять в каждом правиле проверку состояния.

159 (09.04.2013 13:32:01 отредактировано Me_Shock)

urfin, Спасибо)
зы: по готовности, скрипт будет выложен тут

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

160 (11.04.2013 16:27:00 отредактировано Me_Shock)

Допил 50% готовности: gw5.fw

+ открыть спойлер

 Консоль:
root@gw5:~# cat /root/gw5.fw
#!/bin/bash
# provider WAN interface
TH="192.168.0.65"       # trusted hosts
# SRV_IP="79.122.XXX.XX" # white
SRV_IP="192.168.0.254"
IPT="/sbin/iptables"
EXT_IF="eth0"
INT_IF="eth1"
NET_WAN="192.168.0.0/24"
NET_LAN="192.168.1.0/24"
###### PORTS ######
FTP="21"
SSH="22"
DNS="53"
MAIL="25,110"
HTTP="80"
HTTPS="443"
SQUID="3128"
EXT_RDP="3333,3335,3336,3389,5555,6666" # *delete 3389
INT_RDP="3389"
ESCOM="8080"
echo "[+] Flashing all usr rules..."
# 1. flash all user rules.
$IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F && $IPT -X
echo "[+] Enabling ipv4 routing feauture..."
# 2. enable ipv4 routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "[+] Seting global policy to DROP ALL..."
# 3. deny all.
$IPT -P INPUT DROP && $IPT -P OUTPUT DROP && $IPT -P FORWARD DROP
# -----------------------------------------------------------------------------

###### INPUT chain ######
#
echo "[+] Setting up INPUT chain..."

### state tracking rules
$IPT -A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### anti-spoofing rules
$IPT -A INPUT -i $INT_IF ! -s $NET_LAN -j LOG --log-prefix "SPOOFED PKT "
$IPT -A INPUT -i $INT_IF ! -s $NET_LAN -j DROP

### ACCEPT rules [ssh,rdp,escom,ping ..]
$IPT -A INPUT -i $EXT_IF -p tcp -s $TH --dport $HTTP -m conntrack --ctstate NEW -j ACCEPT                       # WAN >> APACHE
#
$IPT -A INPUT -i $INT_IF -p tcp --dport $SQUID -m conntrack --ctstate NEW -j ACCEPT                             # CLIENTS >> SQUID3
$IPT -A INPUT -i $EXT_IF -p tcp -s $TH --dport $SSH -m conntrack --ctstate NEW -j ACCEPT                        # ssh
$IPT -A INPUT -i $EXT_IF -p tcp -m multiport -s $TH --dport $EXT_RDP -m conntrack --ctstate NEW -j ACCEPT       # rdp ports list
$IPT -A INPUT -i $EXT_IF -p tcp -s $TH --dport $ESCOM -m conntrack --ctstate NEW -j ACCEPT                      # ESCOM
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT                                                        # ping

### default INPUT LOG rule
$IPT -A INPUT ! -i lo -j LOG --log-prefix "DROP " --log-ip-options --log-tcp-options

### make sure that loopback traffic is accepted
$IPT -A INPUT -i lo -j ACCEPT
# -----------------------------------------------------------------------------

###### OUTPUT chain ######
#
echo "[+] Setting up OUTPUT chain..."

### state tracking rules
$IPT -A OUTPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
$IPT -A OUTPUT -m conntrack --ctstate INVALID -j DROP
$IPT -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### ACCEPT rules for allowing connections out
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $HTTP -m conntrack --ctstate NEW -j ACCEPT                     # >> 80
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $FTP -m conntrack --ctstate NEW -j ACCEPT                      # >> 21
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $SSH -m conntrack --ctstate NEW -j ACCEPT                      # >> 22
$IPT -A OUTPUT -o $EXT_IF -p tcp -m multiport --dport $MAIL -m conntrack --ctstate NEW -j ACCEPT        # >> 25,110
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $HTTPS -m conntrack --ctstate NEW -j ACCEPT                    # >> 443
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $INT_RDP -m conntrack --ctstate NEW -j ACCEPT                  # >> 3389
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $ESCOM -m conntrack --ctstate NEW -j ACCEPT                    # >> 8080
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $DNS -m conntrack --ctstate NEW -j ACCEPT                      # >> 53 tcp
$IPT -A OUTPUT -o $EXT_IF -p udp --dport $DNS -m conntrack --ctstate NEW -j ACCEPT                      # >> 53 udp
$IPT -A OUTPUT -o $EXT_IF -p icmp --icmp-type echo-request -j ACCEPT                                    # >> icmp

### default OUTPUT LOG rule
$IPT -A OUTPUT ! -o lo -j LOG --log-prefix "DROP " --log-ip-options --log-tcp-options

### make sure that loopback traffic is accepted
$IPT -A OUTPUT -o lo -j ACCEPT
# -----------------------------------------------------------------------------

###### FORWARD chain ######
#
echo "[+] Setting up FORWARD chain..."

### state tracking rules
$IPT -A FORWARD -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
$IPT -A FORWARD -m conntrack --ctstate INVALID -j DROP
$IPT -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### anti-spoofing rules
$IPT -A FORWARD -i $INT_IF ! -s $NET_LAN -j LOG --log-prefix "SPOOFED PKT "
$IPT -A FORWARD -i $INT_IF ! -s $NET_LAN -j DROP

### ACCEPT rules
# $IPT -A FORWARD -p tcp -i $INT_IF -s $NET_LAN --dport $FTP -m conntrack --ctstate NEW -j ACCEPT
# $IPT -A FORWARD -p tcp -i $INT_IF -s $NET_LAN --dport $SSH -m conntrack --ctstate NEW -j ACCEPT               # worked by squid3
# $IPT -A FORWARD -p tcp -i $INT_IF -s $NET_LAN --dports $MAIL -m conntrack --ctstate NEW -j ACCEPT
# $IPT -A FORWARD -p tcp --dport $HTTPS -m conntrack --ctstate NEW -j ACCEPT

$IPT -A FORWARD -p tcp --dport $DNS -m conntrack --ctstate NEW -j ACCEPT
$IPT -A FORWARD -p udp --dport $DNS -m conntrack --ctstate NEW -j ACCEPT
$IPT -A FORWARD -p icmp --icmp-type echo-request -j ACCEPT

### default LOG rule
$IPT -A FORWARD ! -i lo -j LOG --log-prefix "DROP " --log-ip-options --log-tcp-options

# -----------------------------------------------------------------------------
###### NAT rules ######
#
echo "[+] Setting up NAT rules..."
$IPT -t nat -A PREROUTING -p tcp --dport 3333 -i $EXT_IF -j DNAT --to 192.168.1.250:$INT_RDP
$IPT -t nat -A PREROUTING -p tcp --dport 3335 -i $EXT_IF -j DNAT --to 192.168.1.4:$INT_RDP
$IPT -t nat -A PREROUTING -p tcp --dport 3336 -i $EXT_IF -j DNAT --to 192.168.1.2:$INT_RDP      # ADDC RDC1
$IPT -t nat -A PREROUTING -p tcp --dport 5555 -i $EXT_IF -j DNAT --to 192.168.1.232:$INT_RDP
$IPT -t nat -A PREROUTING -p tcp --dport 6666 -i $EXT_IF -j DNAT --to 192.168.1.2:$ESCOM        # ESCOM remote company1 -> comp.2

# -----------------------------------------------------------------------------
echo "[+] Mascarade require traffic..."
$IPT -t nat -A POSTROUTING -s $NET_LAN -o $EXT_IF -j MASQUERADE
#

urfin, как вам это чудо?)

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

161 (11.04.2013 17:19:05 отредактировано urfin)

Немного подредактировал INPUT

+ секция INPUT

 Консоль:
###### INPUT chain ######

echo "[+] Setting up INPUT chain..."

### state tracking rules
$IPT -A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP

### make sure that loopback traffic is accepted
$IPT -A INPUT -i lo -j ACCEPT

$IPT -A INPUT -i $EXT_IF -s $TH -p tcp -m tcp --syn -m multiport --dport $HTTP,$SSH,$ESCOM,$EXT_RDP -m conntrack --ctstate NEW -j ACCEPT
# ping
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# CLIENTS >> SQUID3
$IPT -A INPUT -i $INT_IF -p tcp -m tcp  --syn --dport $SQUID -m conntrack --ctstate NEW -j ACCEPT                             
#
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

## default INPUT LOG rule
$IPT -A INPUT ! -i lo -j LOG --log-prefix "DROP " --log-ip-options --log-tcp-options
# -----------------------------------------------------------------------------

и добавил проверку на наличие флага SYN при состоянии NEW (запрос на установление соединения).

162

Enzo_brn пишет:

Допил 50% готовности: gw5.fw

+ открыть спойлер

 Консоль:
root@gw5:~# cat /root/gw5.fw
#!/bin/bash
# provider WAN interface
TH="192.168.0.65"       # trusted hosts
# SRV_IP="79.122.XXX.XX" # white
SRV_IP="192.168.0.254"
IPT="/sbin/iptables"
EXT_IF="eth0"
INT_IF="eth1"
NET_WAN="192.168.0.0/24"
NET_LAN="192.168.1.0/24"
###### PORTS ######
FTP="21"
SSH="22"
DNS="53"
MAIL="25,110"
HTTP="80"
HTTPS="443"
SQUID="3128"
EXT_RDP="3333,3335,3336,3389,5555,6666" # *delete 3389
INT_RDP="3389"
ESCOM="8080"
echo "[+] Flashing all usr rules..."
# 1. flash all user rules.
$IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F && $IPT -X
echo "[+] Enabling ipv4 routing feauture..."
# 2. enable ipv4 routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "[+] Seting global policy to DROP ALL..."
# 3. deny all.
$IPT -P INPUT DROP && $IPT -P OUTPUT DROP && $IPT -P FORWARD DROP
# -----------------------------------------------------------------------------

###### INPUT chain ######
#
echo "[+] Setting up INPUT chain..."

### state tracking rules
$IPT -A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### anti-spoofing rules
$IPT -A INPUT -i $INT_IF ! -s $NET_LAN -j LOG --log-prefix "SPOOFED PKT "
$IPT -A INPUT -i $INT_IF ! -s $NET_LAN -j DROP

### ACCEPT rules [ssh,rdp,escom,ping ..]
$IPT -A INPUT -i $EXT_IF -p tcp -s $TH --dport $HTTP -m conntrack --ctstate NEW -j ACCEPT                       # WAN >> APACHE
#
$IPT -A INPUT -i $INT_IF -p tcp --dport $SQUID -m conntrack --ctstate NEW -j ACCEPT                             # CLIENTS >> SQUID3
$IPT -A INPUT -i $EXT_IF -p tcp -s $TH --dport $SSH -m conntrack --ctstate NEW -j ACCEPT                        # ssh
$IPT -A INPUT -i $EXT_IF -p tcp -m multiport -s $TH --dport $EXT_RDP -m conntrack --ctstate NEW -j ACCEPT       # rdp ports list
$IPT -A INPUT -i $EXT_IF -p tcp -s $TH --dport $ESCOM -m conntrack --ctstate NEW -j ACCEPT                      # ESCOM
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT                                                        # ping

### default INPUT LOG rule
$IPT -A INPUT ! -i lo -j LOG --log-prefix "DROP " --log-ip-options --log-tcp-options

### make sure that loopback traffic is accepted
$IPT -A INPUT -i lo -j ACCEPT
# -----------------------------------------------------------------------------

###### OUTPUT chain ######
#
echo "[+] Setting up OUTPUT chain..."

### state tracking rules
$IPT -A OUTPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
$IPT -A OUTPUT -m conntrack --ctstate INVALID -j DROP
$IPT -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### ACCEPT rules for allowing connections out
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $HTTP -m conntrack --ctstate NEW -j ACCEPT                     # >> 80
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $FTP -m conntrack --ctstate NEW -j ACCEPT                      # >> 21
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $SSH -m conntrack --ctstate NEW -j ACCEPT                      # >> 22
$IPT -A OUTPUT -o $EXT_IF -p tcp -m multiport --dport $MAIL -m conntrack --ctstate NEW -j ACCEPT        # >> 25,110
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $HTTPS -m conntrack --ctstate NEW -j ACCEPT                    # >> 443
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $INT_RDP -m conntrack --ctstate NEW -j ACCEPT                  # >> 3389
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $ESCOM -m conntrack --ctstate NEW -j ACCEPT                    # >> 8080
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $DNS -m conntrack --ctstate NEW -j ACCEPT                      # >> 53 tcp
$IPT -A OUTPUT -o $EXT_IF -p udp --dport $DNS -m conntrack --ctstate NEW -j ACCEPT                      # >> 53 udp
$IPT -A OUTPUT -o $EXT_IF -p icmp --icmp-type echo-request -j ACCEPT                                    # >> icmp

### default OUTPUT LOG rule
$IPT -A OUTPUT ! -o lo -j LOG --log-prefix "DROP " --log-ip-options --log-tcp-options

### make sure that loopback traffic is accepted
$IPT -A OUTPUT -o lo -j ACCEPT
# -----------------------------------------------------------------------------

###### FORWARD chain ######
#
echo "[+] Setting up FORWARD chain..."

### state tracking rules
$IPT -A FORWARD -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
$IPT -A FORWARD -m conntrack --ctstate INVALID -j DROP
$IPT -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### anti-spoofing rules
$IPT -A FORWARD -i $INT_IF ! -s $NET_LAN -j LOG --log-prefix "SPOOFED PKT "
$IPT -A FORWARD -i $INT_IF ! -s $NET_LAN -j DROP

### ACCEPT rules
# $IPT -A FORWARD -p tcp -i $INT_IF -s $NET_LAN --dport $FTP -m conntrack --ctstate NEW -j ACCEPT
# $IPT -A FORWARD -p tcp -i $INT_IF -s $NET_LAN --dport $SSH -m conntrack --ctstate NEW -j ACCEPT               # worked by squid3
# $IPT -A FORWARD -p tcp -i $INT_IF -s $NET_LAN --dports $MAIL -m conntrack --ctstate NEW -j ACCEPT
# $IPT -A FORWARD -p tcp --dport $HTTPS -m conntrack --ctstate NEW -j ACCEPT

$IPT -A FORWARD -p tcp --dport $DNS -m conntrack --ctstate NEW -j ACCEPT
$IPT -A FORWARD -p udp --dport $DNS -m conntrack --ctstate NEW -j ACCEPT
$IPT -A FORWARD -p icmp --icmp-type echo-request -j ACCEPT

### default LOG rule
$IPT -A FORWARD ! -i lo -j LOG --log-prefix "DROP " --log-ip-options --log-tcp-options

# -----------------------------------------------------------------------------
###### NAT rules ######
#
echo "[+] Setting up NAT rules..."
$IPT -t nat -A PREROUTING -p tcp --dport 3333 -i $EXT_IF -j DNAT --to 192.168.1.250:$INT_RDP
$IPT -t nat -A PREROUTING -p tcp --dport 3335 -i $EXT_IF -j DNAT --to 192.168.1.4:$INT_RDP
$IPT -t nat -A PREROUTING -p tcp --dport 3336 -i $EXT_IF -j DNAT --to 192.168.1.2:$INT_RDP      # ADDC RDC1
$IPT -t nat -A PREROUTING -p tcp --dport 5555 -i $EXT_IF -j DNAT --to 192.168.1.232:$INT_RDP
$IPT -t nat -A PREROUTING -p tcp --dport 6666 -i $EXT_IF -j DNAT --to 192.168.1.2:$ESCOM        # ESCOM remote company1 -> comp.2

# -----------------------------------------------------------------------------
echo "[+] Mascarade require traffic..."
$IPT -t nat -A POSTROUTING -s $NET_LAN -o $EXT_IF -j MASQUERADE
#

urfin, как вам это чудо?)

Ого. А что в остальных 50% будет?

Trouble  in WINDOWS reboot, trouble in UNIX be root.

163 (11.04.2013 23:31:28 отредактировано bormant)

У меня одного складывается ощущение, что про файлик /etc/services настройщики фаервола в этой теме не сильно в курсе?

164 (11.04.2013 23:44:43 отредактировано Kettler)

Enzo_brn пишет:

Допил 50% готовности: gw5.fw

+ открыть спойлер

 Консоль:
root@gw5:~# cat /root/gw5.fw
#!/bin/bash
# provider WAN interface
TH="192.168.0.65"       # trusted hosts
# SRV_IP="79.122.XXX.XX" # white
SRV_IP="192.168.0.254"
IPT="/sbin/iptables"
EXT_IF="eth0"
INT_IF="eth1"
NET_WAN="192.168.0.0/24"
NET_LAN="192.168.1.0/24"
###### PORTS ######
FTP="21"
SSH="22"
DNS="53"
MAIL="25,110"
HTTP="80"
HTTPS="443"
SQUID="3128"
EXT_RDP="3333,3335,3336,3389,5555,6666" # *delete 3389
INT_RDP="3389"
ESCOM="8080"
echo "[+] Flashing all usr rules..."
# 1. flash all user rules.
$IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F && $IPT -X
echo "[+] Enabling ipv4 routing feauture..."
# 2. enable ipv4 routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "[+] Seting global policy to DROP ALL..."
# 3. deny all.
$IPT -P INPUT DROP && $IPT -P OUTPUT DROP && $IPT -P FORWARD DROP
# -----------------------------------------------------------------------------

###### INPUT chain ######
#
echo "[+] Setting up INPUT chain..."

### state tracking rules
$IPT -A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### anti-spoofing rules
$IPT -A INPUT -i $INT_IF ! -s $NET_LAN -j LOG --log-prefix "SPOOFED PKT "
$IPT -A INPUT -i $INT_IF ! -s $NET_LAN -j DROP

### ACCEPT rules [ssh,rdp,escom,ping ..]
$IPT -A INPUT -i $EXT_IF -p tcp -s $TH --dport $HTTP -m conntrack --ctstate NEW -j ACCEPT                       # WAN >> APACHE
#
$IPT -A INPUT -i $INT_IF -p tcp --dport $SQUID -m conntrack --ctstate NEW -j ACCEPT                             # CLIENTS >> SQUID3
$IPT -A INPUT -i $EXT_IF -p tcp -s $TH --dport $SSH -m conntrack --ctstate NEW -j ACCEPT                        # ssh
$IPT -A INPUT -i $EXT_IF -p tcp -m multiport -s $TH --dport $EXT_RDP -m conntrack --ctstate NEW -j ACCEPT       # rdp ports list
$IPT -A INPUT -i $EXT_IF -p tcp -s $TH --dport $ESCOM -m conntrack --ctstate NEW -j ACCEPT                      # ESCOM
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT                                                        # ping

### default INPUT LOG rule
$IPT -A INPUT ! -i lo -j LOG --log-prefix "DROP " --log-ip-options --log-tcp-options

### make sure that loopback traffic is accepted
$IPT -A INPUT -i lo -j ACCEPT
# -----------------------------------------------------------------------------

###### OUTPUT chain ######
#
echo "[+] Setting up OUTPUT chain..."

### state tracking rules
$IPT -A OUTPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
$IPT -A OUTPUT -m conntrack --ctstate INVALID -j DROP
$IPT -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### ACCEPT rules for allowing connections out
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $HTTP -m conntrack --ctstate NEW -j ACCEPT                     # >> 80
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $FTP -m conntrack --ctstate NEW -j ACCEPT                      # >> 21
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $SSH -m conntrack --ctstate NEW -j ACCEPT                      # >> 22
$IPT -A OUTPUT -o $EXT_IF -p tcp -m multiport --dport $MAIL -m conntrack --ctstate NEW -j ACCEPT        # >> 25,110
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $HTTPS -m conntrack --ctstate NEW -j ACCEPT                    # >> 443
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $INT_RDP -m conntrack --ctstate NEW -j ACCEPT                  # >> 3389
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $ESCOM -m conntrack --ctstate NEW -j ACCEPT                    # >> 8080
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport $DNS -m conntrack --ctstate NEW -j ACCEPT                      # >> 53 tcp
$IPT -A OUTPUT -o $EXT_IF -p udp --dport $DNS -m conntrack --ctstate NEW -j ACCEPT                      # >> 53 udp
$IPT -A OUTPUT -o $EXT_IF -p icmp --icmp-type echo-request -j ACCEPT                                    # >> icmp

### default OUTPUT LOG rule
$IPT -A OUTPUT ! -o lo -j LOG --log-prefix "DROP " --log-ip-options --log-tcp-options

### make sure that loopback traffic is accepted
$IPT -A OUTPUT -o lo -j ACCEPT
# -----------------------------------------------------------------------------

###### FORWARD chain ######
#
echo "[+] Setting up FORWARD chain..."

### state tracking rules
$IPT -A FORWARD -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID " --log-ip-options --log-tcp-options
$IPT -A FORWARD -m conntrack --ctstate INVALID -j DROP
$IPT -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### anti-spoofing rules
$IPT -A FORWARD -i $INT_IF ! -s $NET_LAN -j LOG --log-prefix "SPOOFED PKT "
$IPT -A FORWARD -i $INT_IF ! -s $NET_LAN -j DROP

### ACCEPT rules
# $IPT -A FORWARD -p tcp -i $INT_IF -s $NET_LAN --dport $FTP -m conntrack --ctstate NEW -j ACCEPT
# $IPT -A FORWARD -p tcp -i $INT_IF -s $NET_LAN --dport $SSH -m conntrack --ctstate NEW -j ACCEPT               # worked by squid3
# $IPT -A FORWARD -p tcp -i $INT_IF -s $NET_LAN --dports $MAIL -m conntrack --ctstate NEW -j ACCEPT
# $IPT -A FORWARD -p tcp --dport $HTTPS -m conntrack --ctstate NEW -j ACCEPT

$IPT -A FORWARD -p tcp --dport $DNS -m conntrack --ctstate NEW -j ACCEPT
$IPT -A FORWARD -p udp --dport $DNS -m conntrack --ctstate NEW -j ACCEPT
$IPT -A FORWARD -p icmp --icmp-type echo-request -j ACCEPT

### default LOG rule
$IPT -A FORWARD ! -i lo -j LOG --log-prefix "DROP " --log-ip-options --log-tcp-options

# -----------------------------------------------------------------------------
###### NAT rules ######
#
echo "[+] Setting up NAT rules..."
$IPT -t nat -A PREROUTING -p tcp --dport 3333 -i $EXT_IF -j DNAT --to 192.168.1.250:$INT_RDP
$IPT -t nat -A PREROUTING -p tcp --dport 3335 -i $EXT_IF -j DNAT --to 192.168.1.4:$INT_RDP
$IPT -t nat -A PREROUTING -p tcp --dport 3336 -i $EXT_IF -j DNAT --to 192.168.1.2:$INT_RDP      # ADDC RDC1
$IPT -t nat -A PREROUTING -p tcp --dport 5555 -i $EXT_IF -j DNAT --to 192.168.1.232:$INT_RDP
$IPT -t nat -A PREROUTING -p tcp --dport 6666 -i $EXT_IF -j DNAT --to 192.168.1.2:$ESCOM        # ESCOM remote company1 -> comp.2

# -----------------------------------------------------------------------------
echo "[+] Mascarade require traffic..."
$IPT -t nat -A POSTROUTING -s $NET_LAN -o $EXT_IF -j MASQUERADE
#

urfin, как вам это чудо?)

мусора полно, правило на правило кошмар.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

165

bormant пишет:

У меня одного складывается ощущение, что про файлик /etc/services настройщики фаервола в этой теме не сильно в курсе?

Вы имеете в виду наименование портов по списку соответствия? ab

166 (12.04.2013 07:49:31 отредактировано bormant)

urfin пишет:

Вы имеете в виду наименование портов по списку соответствия? ab

Так точно. Немного смысла в описывали стандартных портов через переменные, когда можно с тем же успехом пользоваться их именами из /etc/services:
вместо

$HTTP=80
$IPT -A INPUT -p tcp --dport $HTTP ...

почему бы не писать просто

$IPT -A INPUT -p tcp --dport http ...

?
В конце концов, вы же не пишете вместо "-p tcp", где вместо tcp берется номер протокола из /etc/protocols, подобного

TCP=6
$IPT -A INPUT -p $TCP ...

167

bormant пишет:
urfin пишет:

Вы имеете в виду наименование портов по списку соответствия? ab

Так точно. Немного смысла в описывали стандартных портов через переменные, когда можно с тем же успехом пользоваться их именами из /etc/services:
вместо

$HTTP=80
$IPT -A INPUT -p tcp --dport $HTTP ...

почему бы не писать просто

$IPT -A INPUT -p tcp --dport http ...

?

Ну, да, так оно, конечно, идеологически верней будет:). Но я сначала создаю скрипт( или набор правил), проверяю, а уж потом идеологически причесываю ab ТС решил пойти своим путем, через переменные, так ему показалось проще, чем сверять каждый порт со списком services ab

168

urfin⇓ пишет:

ТС решил пойти своим путем, через переменные, так ему показалось проще, чем сверять каждый порт со списком services

Угу, можно многое упростить (жаль не в пользу понятности) в т.ч. пользовать --multiport и циклы в кот. менять цепочки, чтобы не разводить мильён писанины. Просто в определенный момент осознал что не все влазиет в голову, поэтому на дебаге пока так. СПС за "SYN", покане осознал, но пойму.)

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

169 (15.04.2013 08:02:11 отредактировано Me_Shock)

kisil⇓ пишет:

Ого. А что в остальных 50% будет?

То-же и будет,  остальные 50% - на переосмысливание первых 50%, сделаю все "Корбен Даллас"xD

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

170

bormant⇓ пишет:

У меня одного складывается ощущение, что про файлик /etc/services настройщики фаервола в этой теме не сильно в курсе?

все-все, вернулся на путь истинный, только не пинайте! ap

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

171

urfin⇓ пишет:

Немного подредактировал INPUT
+ секция INPUT
и добавил проверку на наличие флага SYN при состоянии NEW (запрос на установление соединения).

"SYN-SENT    Клиент отправил запрос серверу на установление соединения и ожидает ответа
SYN-RECEIVED    Сервер получил запрос на соединение, отправил ответный запрос и ожидает подтверждения"

Интересно.. Это полезно для высоко нагруженных соединений, или для всех. Было бы любопытно понять как (по-идее) должна изменится скорость обработки запросов от клиентов, как-то приходит человеко-понятная аналогия типо проскси станет более лоялен с клиентами.. правильно ли до меня дошла суть использования флага SYN?

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

172

Enzo_brn⇓ пишет:

Интересно.. Это полезно для высоко нагруженных соединений, или для всех

Для всех, но в плане защищенности от спуфинг-атак, типа "предсказание номера tcp-последовательности". Однако, могут возникнуть проблемы с виндовс-клиентами, не знаю, как сейчас, но раньше микрософтовская реализация tcp-протокола, была несколько кривовата, и при некоторых условиях, пакеты, сгенерированные программами от Микрософт маркировались как NEW, но со сброшенным флагом SYN.

173 (15.04.2013 15:46:18 отредактировано Me_Shock)

urfin, СПС)) кажется я упростил: gw5.fw

+ открыть спойлер

 Консоль:
#!/bin/bash
#
TH="192.168.0.65"                       # Trusted hosts
IPT="/sbin/iptables"
EXT_IF="eth0"
#
INT_IF1="eth1"
INT_IF2="eth2"
INT_IF3="eth3"
#
NET_WAN="192.168.0.0/24"
#
NET_LAN1="192.168.1.0/24"
NET_LAN2="192.168.2.0/24"
NET_LAN3="192.168.3.0/24"
#
squid3="3128"
EXT_RDP="3333,3335,3336,5555,6666"
INT_RDP="3389"
escom="8080"
#
#
echo "[+] Flashing all usr rules..."
$IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F && $IPT -X

echo "[+] Enabling ipv4 routing feauture..."
echo 1 > /proc/sys/net/ipv4/ip_forward

echo "[+] Seting global policy to DROP ALL..."
$IPT -P INPUT DROP && $IPT -P OUTPUT DROP && $IPT -P FORWARD DROP
# -----------------------------------------------------------------------------

###### INPUT chain ######
echo "[+] Setting up INPUT chain..."

### state tracking rules
$IPT -A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID INPUT PKT " --log-ip-options --log-tcp-options
$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### anti-spoofing rules
$IPT -A INPUT -i $INT_IF1 ! -s $NET_LAN1 -j LOG --log-prefix "DROP SPOOFED INPUT[1] PKT "       # FG company
$IPT -A INPUT -i $INT_IF1 ! -s $NET_LAN1 -j DROP

$IPT -A INPUT -i $INT_IF2 ! -s $NET_LAN2 -j LOG --log-prefix "DROP SPOOFED INPUT[2] PKT "       # AF company
$IPT -A INPUT -i $INT_IF2 ! -s $NET_LAN2 -j DROP

$IPT -A INPUT -i $INT_IF3 ! -s $NET_LAN3 -j LOG --log-prefix "DROP SPOOFED INPUT[3] PKT "       # free company
$IPT -A INPUT -i $INT_IF3 ! -s $NET_LAN3 -j DROP


### ACCEPT rules [ssh,www,erdp,escom,ping]
$IPT -A INPUT -i $INT_IF1 -p tcp --dport $squid3 -m conntrack --ctstate NEW -j ACCEPT # allow to connetc to proxy from LAN1
$IPT -A INPUT -i $INT_IF2 -p tcp --dport $squid3 -m conntrack --ctstate NEW -j ACCEPT # allow to connetc to proxy from LAN2
$IPT -A INPUT -i $INT_IF3 -p tcp --dport $squid3 -m conntrack --ctstate NEW -j ACCEPT # allow to connetc to proxy from LAN3
#
$IPT -A INPUT -i $EXT_IF -s $TH -p tcp -m multiport --dport ssh,www,$EXT_RDP,$escom -m tcp --syn -m conntrack --ctstate NEW -j ACCEPT   # allow tr-ed in-g.
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

### default INPUT LOG rule
$IPT -A INPUT ! -i lo -j LOG --log-prefix "DROP NO-LOOPBACK INPUT PKT " --log-ip-options --log-tcp-options

### make sure that loopback traffic is accepted
$IPT -A INPUT -i lo -j ACCEPT
# -----------------------------------------------------------------------------

###### OUTPUT chain ######
echo "[+] Setting up OUTPUT chain..."

### state tracking rules
$IPT -A OUTPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID OUTPUT PKT " --log-ip-options --log-tcp-options
$IPT -A OUTPUT -m conntrack --ctstate INVALID -j DROP
$IPT -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### ACCEPT rules for allowing connections out [ftp,ssh,smtp,www,ntp,pop3,https,rdp,icq,escom]
$IPT -A OUTPUT -o $EXT_IF -p tcp -m multiport --dport ftp,ssh,smtp,www,ntp,pop3,https,$INT_RDP,aol,$escom -m conntrack --ctstate NEW -j ACCEPT
$IPT -A OUTPUT -o $EXT_IF -p udp -m multiport --dport ssh,www,ntp,pop3,https,$INT_RDP,aol,$escom -m conntrack --ctstate NEW -j ACCEPT
#
$IPT -A OUTPUT -o $EXT_IF -p tcp --dport domain -m conntrack --ctstate NEW -j ACCEPT # DNS tcp/udp
$IPT -A OUTPUT -o $EXT_IF -p udp --dport domain -m conntrack --ctstate NEW -j ACCEPT
$IPT -A OUTPUT -o $EXT_IF -p icmp --icmp-type echo-request -j ACCEPT

### default OUTPUT LOG rule
$IPT -A OUTPUT ! -o lo -j LOG --log-prefix "DROP NO-LOOPBACK OUTPUT PKT " --log-ip-options --log-tcp-options

### make sure that loopback traffic is accepted
$IPT -A OUTPUT -o lo -j ACCEPT
# -----------------------------------------------------------------------------

###### FORWARD chain ######
#
echo "[+] Setting up FORWARD chain..."

### state tracking rules
$IPT -A FORWARD -m conntrack --ctstate INVALID -j LOG --log-prefix "DROP INVALID FORWARD PKT " --log-ip-options --log-tcp-options
$IPT -A FORWARD -m conntrack --ctstate INVALID -j DROP
$IPT -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

### anti-spoofing rules
$IPT -A FORWARD -i $INT_IF1 ! -s $NET_LAN1 -j LOG --log-prefix "DROP SPOOFED FORWARD[1] PKT "           # FG
$IPT -A FORWARD -i $INT_IF1 ! -s $NET_LAN1 -j DROP

$IPT -A FORWARD -i $INT_IF2 ! -s $NET_LAN2 -j LOG --log-prefix "DROP SPOOFED FORWARD[2] PKT "           # AF
$IPT -A FORWARD -i $INT_IF2 ! -s $NET_LAN2 -j DROP

$IPT -A FORWARD -i $INT_IF3 ! -s $NET_LAN3 -j LOG --log-prefix "DROP SPOOFED FORWARD[3] PKT "           # free
$IPT -A FORWARD -i $INT_IF3 ! -s $NET_LAN3 -j DROP

$IPT -A FORWARD -p tcp --dport domain -m conntrack --ctstate NEW -j ACCEPT                              # DNS tcp/udp
$IPT -A FORWARD -p udp --dport domain -m conntrack --ctstate NEW -j ACCEPT
$IPT -A FORWARD -p icmp --icmp-type echo-request -j ACCEPT

### default LOG rule
$IPT -A FORWARD ! -i lo -j LOG --log-prefix "DROP LOOPBACK FORWARD PKT " --log-ip-options --log-tcp-options
# -----------------------------------------------------------------------------

###### NAT rules ######
#
echo "[+] Setting up NAT rules..."
$IPT -t nat -A PREROUTING -p tcp --dport 3333 -i $EXT_IF -j DNAT --to 192.168.1.250:$INT_RDP
$IPT -t nat -A PREROUTING -p tcp --dport 3335 -i $EXT_IF -j DNAT --to 192.168.1.4:$INT_RDP
$IPT -t nat -A PREROUTING -p tcp --dport 3336 -i $EXT_IF -j DNAT --to 192.168.1.2:$INT_RDP      # ADDC name: RDC1
$IPT -t nat -A PREROUTING -p tcp --dport 5555 -i $EXT_IF -j DNAT --to 192.168.1.232:$INT_RDP
$IPT -t nat -A PREROUTING -p tcp --dport 6666 -i $EXT_IF -j DNAT --to 192.168.1.2:$escom        # escom remote mycompany -> enemy1
#
$IPT -t nat -A PREROUTING -s $NET_LAN1,$NET_LAN2,$NET_LAN3 -p tcp -m tcp --dport www -j REDIRECT --to-ports $squid3
# -----------------------------------------------------------------------------

echo "[+] Mascarade require traffic..."
$IPT -t nat -A POSTROUTING -s $NET_LAN1,$NET_LAN2,$NET_LAN3 -o $EXT_IF -j MASQUERADE
#

есть, правда незадачка: Как бы указать мульти-интерфейс, без циклов.. наподобие этого.

IF_LANS=eth1 eth2 eth3
  
for i in $IF_LANS
 do
  iptables -A INPUT -p ALL -i $i -m state --state ESTABLISHED,RELATED -j ACCEPT  
done
надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

174

urfin⇓ пишет:

не знаю, как сейчас, но раньше микрософтовская реализация tcp-протокола, была несколько кривовата

и почему это никого не удивляет.. bm

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

175

Enzo_brn⇓ пишет:

urfin, спасибо)) кажется я упростил: gw5.fw

Все работает? Тогда очень подробненько задокументируйте все это где-нибудь у себя, иначе, через полгода или позже, начнете ломать себе голову: "а что это я за CENSORED нагородил?" ab

176

Enzo_brn⇓ пишет:

Как бы указать мульти-интерфейс

Может так: iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

177 (15.04.2013 16:13:31 отредактировано Me_Shock)

urfin⇓ пишет:

Все работает?

угу!

urfin⇓ пишет:

Тогда очень подробненько задокументируйте все это где-нибудь у себя, иначе, через полгода или позже, начнете ломать себе голову: "а что это я за CENSORED нагородил?"

гугл докс уже ни раз спасал мир от гибели! немного офтоп: сделал сквида прозрачным (intercept) и добавил прероутингом редирект 80-го на 3128. В итоге имеем: все шляпные web-установщики на клиенте отрабатывают без проблем свои загрузки, фурычет и не настроенный на прокси браузер, который не поймет 443 https:// ну да и норм, клиент позвонит, ТП - настроит на исп. прокси. Насчет ssl-bump - боюсь пока лезть.. а и в скрипте теперь 3 ЛС))

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

178

urfin⇓ пишет:

Может так: iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

А это мысль! СПС))

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

179

Чет не пойму как отклонить от кл. ЛС обращение http secure.. (Чтобы когда клиентский браузер не настроен на использование прокси сервера, сразу приходило "соединение было сброшено", а не отвал по таймауту, который долго ждать)
делал так, не помогло - все равно браузер долго тупит:

$IPT -A INPUT ! -i $EXT_IF -p tcp --dport https -m conntrack --ctstate NEW -j REJECT

может это по тому что icmp закрыто все кроме эхо? (насколько я понял любые перенаправления https не имеют смысла..)

надпись на двери старого трамвая: "ВЫХОДА НЕТ!" | ❤windows 8 enterprise

180

Enzo_brn пишет:

Чет не пойму как отклонить от кл. ЛС обращение http secure.. (Чтобы когда клиентский браузер не настроен на использование прокси сервера, сразу приходило "соединение было сброшено", а не отвал по таймауту, который долго ждать)
делал так, не помогло - все равно браузер долго тупит:

$IPT -A INPUT ! -i $EXT_IF -p tcp --dport https -m conntrack --ctstate NEW -j REJECT

может это по тому что icmp закрыто все кроме эхо? (насколько я понял любые перенаправления https не имеют смысла..)

Попробуйте

$IPT -A INPUT ! -i $EXT_IF -p tcp --dport https -m conntrack --ctstate NEW -j REJECT --reject-with tcp-reset