Значит так, есть debian. выступает в роли шлюза (внешний ip на одном интерфейсе и внутренний на другом). Читал Руководство по Iptables 1.1.19, согласно которому настраивал файервол. Написан скрипт, который запускается автоматом при включении компа. Смысл скрипта такой:
start_wall()
{
echo -n " Closing ports"
$IPT -P INPUT DROP
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT DROP
success
}
start_input_open()
{
# Open all ports for lo (127.0.0.0/8)
$IPT -A INPUT -s $LO -d $LOIP -i $LOIF -j ACCEPT
# Open all ports for localnet (192.168.2.0/24)
$IPT -A INPUT -s $LAN -d $LANIP -j ACCEPT
# Open all ports for vpn (192.168.3.0/24)
$IPT -A INPUT -s $VPN -d $VPNIP -j ACCEPT
# ssh
$IPT -A INPUT -p tcp -m tcp --sport $SSH -j ACCEPT
# sshd
$IPT -A INPUT -p tcp -m tcp --dport $SSH -j ACCEPT
# pptpd
$IPT -A INPUT -p tcp -m tcp --dport $PPTPD -j ACCEPT
# DNS
$IPT -A INPUT -p udp -m udp --sport $DNS -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --sport $DNS -j ACCEPT
# DNS (NAMED, BIND9)
$IPT -A INPUT -p udp -m udp --dport $DNS -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport $DNS -j ACCEPT
# http
$IPT -A INPUT -p tcp -m tcp --sport $HTTP -j ACCEPT
# apache
$IPT -A INPUT -p tcp -m tcp --dport $HTTP -j ACCEPT
# vsftpd
$IPT -A INPUT -p tcp -m tcp --dport $FTP -j ACCEPT
# ftp
$IPT -A INPUT -p tcp -m tcp --sport $FTP -j ACCEPT
# jabber
$IPT -A INPUT -p tcp -m tcp --dport $JABBER -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport $JABBERD -j ACCEPT
# ping to all
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
# ping from all
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
}
start_output_open()
{
# lo
$IPT -A OUTPUT -s $LOIP -d $LO -o $LOIF -j ACCEPT
# lan
$IPT -A OUTPUT -s $LANIP -d $LAN -j ACCEPT
# vpn
$IPT -A OUTPUT -s $VPNIP -d $VPN -j ACCEPT
# ssh
$IPT -A OUTPUT -p tcp -m tcp --dport $SSH -j ACCEPT
# sshd
$IPT -A OUTPUT -p tcp -m tcp --sport $SSH -j ACCEPT
# pptpd
$IPT -A OUTPUT -p tcp -m tcp --sport $PPTPD -j ACCEPT
# dns
$IPT -A OUTPUT -p udp -m udp --dport $DNS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --dport $DNS -j ACCEPT
# BIND9
$IPT -A OUTPUT -p udp -m udp --sport $DNS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --sport $DNS -j ACCEPT
# http
$IPT -A OUTPUT -p tcp -m tcp --dport $HTTP -j ACCEPT
# apache
$IPT -A OUTPUT -p tcp -m tcp --sport $HTTP -j ACCEPT
# vsftpd
$IPT -A OUTPUT -p tcp -m tcp --sport $FTP -j ACCEPT
# ftp
$IPT -A OUTPUT -p tcp -m tcp --dport $FTP -j ACCEPT
}
start_nat()
{
echo -en "\n Starting NAT"
$IPT -t nat -A POSTROUTING -o $INTIF -j SNAT --to-source $INTIP
$IPT -t nat -A POSTROUTING -o $LANIF -j SNAT --to-source $LANIP
$IPT -t nat -A POSTROUTING -o $VPNIF -j SNAT --to-source $VPNIP
success
}
Т.е. политики по умолчанию ставим DROP на input и output, forward accept. Далее начинаем открывать по-тихоньку. Открываем инпут и аутпут для lo, для локалки, для впн-клиентов. Потом открываем по определенным портам (ссш, днс, фтп...). Вот незадача, все работает кроме фтп и впн. Делаю iptables -P INPUT ACCEPT, iptables -P OUTPUT ACCEPT, работает. Почему тогда ссш работает сразу? что я делаю не так?
Когда я не смог подключиться, я подсоединился через ssh, сделал инпут и аутпут accept, соединился по vpn, посмотрел netstat -pnat, увдиел established-соединение на 1723 порту и понял, что ничего не понял.
повторю еще раз - прочтите в интернет как работает ftp, что такое активный и пассивный режимы, а так же что значат магические слова --state RELATED,ESTABLISHED в правилах файервола.
Fire and water, earth and sky - mistery surrounds us, legends never die!
...
PPTP работает, устанавливая обычную PPP сессию с противоположной стороной с помощью протокола Generic Routing Encapsulation. Второе соединение на TCP-порту 1723 используется для инициации и управления GRE-соединением. PPTP сложно перенаправлять за сетевой экран, так как он требует одновременного установления двух сетевых сессий.
...
C ФТП тоже все сложно...
Если клиент хочет работать в активном режиме то он открывает на своей стороне порт со случайным номером и отсылает этот номер серверу. Сервер инициирует соединение между этим удаленным портом и локальным 20-м портом. В этом случае ваши правила будут работать.
Если клиент захочет работать в пассивном режиме (что сейчас модно, ибо позволяет проходить через NAT на клиентской стороне) то сервер открывает порт со случайным номером и отсылает этот номер клиенту. И клиент подключатеся к этому порту и по этому соединению уже передаются данные.
повторю еще раз - прочтите в интернет как работает ftp, что такое активный и пассивный режимы, а так же что значат магические слова --state RELATED,ESTABLISHED в правилах файервола.
про то, как работает RELATED,ESTABLISHED в правилах файервола я знаю. Вот только был уверен, что фтп работает только на 20 и 21 портах, спасибо за наводку, действительно это помогло. А вот что теперь делать с pptpd ? 1723 открыт, а что еще надо? Википедию читал, не понял: PPTP работает, устанавливая обычную PPP сессию с противоположной стороной с помощью протокола Generic Routing Encapsulation. Ну и что нужно открыть в iptables ?
повторю еще раз - прочтите в интернет как работает ftp, что такое активный и пассивный режимы, а так же что значат магические слова --state RELATED,ESTABLISHED в правилах файервола.
про то, как работает RELATED,ESTABLISHED в правилах файервола я знаю. Вот только был уверен, что фтп работает только на 20 и 21 портах, спасибо за наводку, действительно это помогло. А вот что теперь делать с pptpd ? 1723 открыт, а что еще надо? Википедию читал, не понял: PPTP работает, устанавливая обычную PPP сессию с противоположной стороной с помощью протокола Generic Routing Encapsulation. Ну и что нужно открыть в iptables ?
я не открывал 43 порт, это я сразу заметил (тем более 47)
bad argument `gre`
man iptables там нет такого протокола
Тут http://poptop.sourceforge.net/dox/gre-prot...available.phtml
увидел, что можно сделать iptables -A INPUT -p 47 -j ACCEPT, но . . . все равно не подключается.
заработало, сделал iptables -A INPUT -p 47 -j ACCEPT и iptables -A OUTPUT -p 47 -j ACCEPT
Можно закрывать
Хм.
Точно тебе говорю.
Если там запись вида.
#gre 47 GRE # Generic Routing Encapsulation
То правило -p gre не добавится.
А если такого вида
gre 47 GRE # Generic Routing Encapsulation
То все должно быть нормально.