LinuxForum.Fans
Тема

прошу помощи со скриптом iptables для шлюза

Автор: Me_Shock 182 сообщений 27901 просмотров
#314682

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

секция INPUT
[console]###### 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
# -----------------------------------------------------------------------------[/console]
и добавил проверку на наличие флага SYN при состоянии NEW (запрос на установление соединения).

#314729
Enzo_brn написал:
Допил 50% готовности: gw5.fw
Показать
[console]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
#
[/console]
urfin, как вам это чудо?)

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

#314752

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

#314753
Enzo_brn написал:
Допил 50% готовности: gw5.fw
Показать
[console]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
#
[/console]
urfin, как вам это чудо?)

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

#314786

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

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

text

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

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

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

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

text
TCP=6
$IPT -A INPUT -p $TCP ...
#314792
bormant написал:
[quote=urfin]Вы имеете в виду наименование портов по списку соответствия? :)

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

text

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

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

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

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

#315220

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

"kisil⇓" написал:
Ого. А что в остальных 50% будет?
То-же и будет, остальные 50% - на переосмысливание первых 50%, сделаю все "Корбен Даллас"xD
#315343

"bormant⇓" написал:
У меня одного складывается ощущение, что про файлик /etc/services настройщики фаервола в этой теме не сильно в курсе?
все-все, вернулся на путь истинный, только не пинайте! *JOKINGLY*
#315352
"urfin⇓" написал:
Немного подредактировал INPUT
+ секция INPUT
и добавил проверку на наличие флага SYN при состоянии NEW (запрос на установление соединения).

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


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

#315363

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

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

Показать
[console]#!/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
#
[/console]
есть, правда незадачка: Как бы указать мульти-интерфейс, без циклов.. наподобие этого.

text
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
#315371

"urfin⇓" написал:
не знаю, как сейчас, но раньше микрософтовская реализация tcp-протокола, была несколько кривовата
и почему это никого не удивляет.. *CRAZY*
#315375

"Enzo_brn⇓" написал:
urfin, спасибо)) кажется я упростил: gw5.fw
Все работает? Тогда очень подробненько задокументируйте все это где-нибудь у себя, иначе, через полгода или позже, начнете ломать себе голову: "а что это я за хрень нагородил?" :)
#315376

"Enzo_brn⇓" написал:
Как бы указать мульти-интерфейс
Может так: iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#315377

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

"urfin⇓" написал:
Может так: iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
А это мысль! СПС))
#315768

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

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

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

#315776

Enzo_brn написал:
Чет не пойму как отклонить от кл. ЛС обращение http secure.. (Чтобы когда клиентский браузер не настроен на использование прокси сервера, сразу приходило "соединение было сброшено", а не отвал по таймауту, который долго ждать)
делал так, не помогло - все равно браузер долго тупит:
text
$IPT -A INPUT ! -i $EXT_IF -p tcp --dport https -m conntrack --ctstate NEW -j REJECT

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

Попробуйте
text
$IPT -A INPUT ! -i $EXT_IF -p tcp --dport https -m conntrack --ctstate NEW -j REJECT --reject-with tcp-reset
Войдите или зарегистрируйтесь, чтобы ответить.