Здравсвтуйте.Есть машина под debian, которая выполняет роль рутера. На ней я включаю NAT с помощью скрипта в конце сообщения. Все работает, все хорошо.
Очень хочется, чтобы это все загружалось автоматически при включении компьютера. Скажите, пожалуйста, каким образом это реализовать "иделогичеси" правильно (может быть вообще никакой такой скрипт не нужен, а как-то это делается очень просто?)
Заранее спасибо!
А вот и сам скрипт:
#!/bin/sh
IPTABLES=/sbin/iptables
EXTIF="eth0" #(inet)
INTIF="eth1" #(home lan)#echo " External Interface: $EXTIF"
#echo " Internal Interface: $INTIF"#echo " enabling forwarding.."
#echo "1" > /proc/sys/net/ipv4/ip_forward#echo " enabling DynamicAddr.."
echo "1" > /proc/sys/net/ipv4/ip_dynaddr#echo " clearing any existing rules and setting default policy.."
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F#echo " FWD: Allow all connections OUT and only existing and related ones IN"
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j
ACCEPT
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT#echo " Enabling SNAT (MASQUERADE) functionality on $EXTIF"
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE#echo -e "\nDone.\n"
Не уверен насчет идеологии, пока нет времени разобраться детальноСкопируй команды из своего скрипта в /etc/rc.local
>Очень хочется, чтобы это все загружалось автоматически при включении компьютера. Скажите, пожалуйста,
>каким образом это реализовать "иделогичеси" правильноДобавить вызов скрипта в /etc/rc.local, но тогда файервол будет "подниматься" после интерфейсов, наверное. Некузяво.
Скрипт (или симлинк) - в /etc/init.d/, потом что-нибудь вроде "update-rc.d firehol start 41 S . start 36 0 6 .", но скрипт должен, наверное, понимать параметры start/stop и не "гадить" при повторном запуске. (Хм, firehol запускается после поднятия сети?..)
Или скрипт/симлинк в /etc/network/if-pre-up.d/ , но надо защищаться от повторного запуска...
> (может быть вообще никакой такой
>скрипт не нужен, а как-то это делается очень просто?)Можно какой-нибудь "генератор файерволов" из пакетов поставить -- в пакетах запуск при загрузке, обычно встроен.
Я пользуюсь firehol (кстати он написан на bash-e = несколько "тормозой", зато пакет из unstable (=новая версия) ставится напрямую в stable). Вот пример конфигурации с маскарадом на модеме из его примеров:
---8<--- $ egrep -v "^[[:space:]]*(#|$)" </usr/share/doc/firehol/examples/home-dialup.conf
version 5
internet_services="smtp http"
internet_requests="10/sec"
home_interface="eth0"
proxy_port="3128"
if [ ! -z "${proxy_port}" ]
then
iptables -t nat -A PREROUTING -i ${home_interface} -p tcp --dport 80 -j REDIRECT --to-port ${proxy_port}
fi
interface "${home_interface}" home
policy accept
interface ppp+ internet src not "${UNROUTABLE_IPS}"
protection strong ${internet_requests}
server ident reject with tcp-reset
server "${internet_services}" accept
client all accept
router myrouter inface ppp+ outface "${home_interface}"
masquerade reverse
client all accept
>Есть машина под debian, которая выполняет роль рутера. На ней я включаю
>NAT с помощью скрипта в конце сообщения. Все работает, все хорошо.
>
>
>Очень хочется, чтобы это все загружалось автоматически при включении компьютера. Скажите, пожалуйста,
>каким образом это реализовать "иделогичеси" правильно (может быть вообще никакой такой
>скрипт не нужен, а как-то это делается очень просто?)1.
man iptables-restore
man iptables-save2.
Ищем /etc/default/iptables
Если нет такого, не страшно, можно просто тупо запустить /etc/init.d/iptables. Вываливается Usage:# /etc/init.d/iptables
/etc/init.d/iptables options:
start|restart|reload|force-reload
....
....
Saved ruleset locations: /var/lib/iptables/Найди в скрипте, какой именно файл он считывает из /var/lib/iptables/ (например, active)
iptables-save >/var/lib/iptables/active - у тебя сохранятся все текущие правила в "правильном" формате (эту команду запускать только один раз, для создания файла с твоими правилами).
При /etc/init.d/iptables start они подгрузятся. Для добавления/удаления правил, тебе нужно будет править только /var/lib/iptables/active
Маны первого пункта давным-давно известны. А вот второго пункта в моем дебиан "почему-то" нет.Каким пакетом это дело организуется у Вас ?
>Маны первого пункта давным-давно известны. А вот второго пункта в моем дебиан
>"почему-то" нет.
>
>Каким пакетом это дело организуется у Вас ?# apt-get install iptables
/usr/share/doc/iptables/examples/oldinitdscript.gz
>Очень хочется, чтобы это все загружалось автоматически при включении компьютера. Скажите, пожалуйста,
>каким образом это реализовать "иделогичеси" правильно (может быть вообще никакой такой
>скрипт не нужен, а как-то это делается очень просто?)apt-get install arno-iptables-firewall
Прочитай документацию, настрой и будешь доволен.
>
>>Очень хочется, чтобы это все загружалось автоматически при включении компьютера. Скажите, пожалуйста,
>>каким образом это реализовать "иделогичеси" правильно (может быть вообще никакой такой
>>скрипт не нужен, а как-то это делается очень просто?)
>
>apt-get install arno-iptables-firewall
>
>
> Прочитай документацию, настрой и будешь доволен.Как по мне - уж больно наворочено, хотя конечно функционально :)
Подскажите, какой пакет поставить чтобы было как в redhat -
/etc/init.d/iptables save|start|stop делало банальные iptables-save iptables-restore ...Комбайны с чужой идеологией построения цепочек файрволла мне пока не нужны..
>>apt-get install arno-iptables-firewall
>> Прочитай документацию, настрой и будешь доволен.
>
>Как по мне - уж больно наворочено, хотя конечно функционально :)Это не комбайн. Довольно простенький.
>Подскажите, какой пакет поставить чтобы было как в redhat -
>/etc/init.d/iptables save|start|stop делало банальные iptables-save iptables-restore ...Посмотри на предложенный и переделай.
>Комбайны с чужой идеологией построения цепочек файрволла мне пока не нужны..
"чужой идеология" - это как? Ты на марсе в сети IPMars? :)
>[оверквотинг удален]
>>Как по мне - уж больно наворочено, хотя конечно функционально :)
>
>Это не комбайн. Довольно простенький.
>
>
>>Подскажите, какой пакет поставить чтобы было как в redhat -
>>/etc/init.d/iptables save|start|stop делало банальные iptables-save iptables-restore ...
>
> Посмотри на предложенный и переделай.
>Свой я сам написать могу, я как-бы готовым, имеющимся пакетом интересуюсь...
>
>>Комбайны с чужой идеологией построения цепочек файрволла мне пока не нужны..
>
> "чужой идеология" - это как? Ты на марсе в сети IPMars?
>:)У меня своя специфика фильтрации траффика, свои отдельные цепочки, несколько провайдеров, несколько внутренних сеток и т п... Мне удобно сделать что-то вроде
iptables -I FORWARD XXX -i eth0 -p tcp --dport 80 -d xxx.x.x.x -j ACCEPT
/etc/init.d/iptables save
- вот и хочу аналогичного в DebianPS: Да, железный рутер лучше, но так сложилось ....
PPS: Когда там в Lenny появится 2.6.24-smp ?
>>[оверквотинг удален]
>У меня своя специфика фильтрации траффика, свои отдельные цепочки, несколько провайдеров, несколько
>внутренних сеток и т п... Мне удобно сделать что-то вроде
>
>iptables -I FORWARD XXX -i eth0 -p tcp --dport 80 -d xxx.x.x.x
>-j ACCEPT
>/etc/init.d/iptables save
>
>- вот и хочу аналогичного в DebianВот тебе кусок из рабочего того что я предлагаю. Никак не пойму что тебя в нем не устаивает.
---------------------- iptables.save ----------------------------
A INPUT -i eth1 -p ! icmp -m state --state NEW -j EXT_INPUT_CHAIN
-A INPUT -i eth1 -p icmp -m state --state NEW -m limit --limit 20/sec --limit-burst 100 -j EXT_INPUT_CHAIN
-A INPUT -i eth1 -p icmp -m state --state NEW -j EXT_ICMP_CHAIN
-A INPUT -m limit --limit 1/sec -j LOG --log-prefix "Dropped INPUT packet: " --log-level 6
-A INPUT -j DROP
-A FORWARD -i lo -j ACCEPT
-A FORWARD -o eth1 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m state --state RELATED -m tcp --dport 1024:65535 -j ACCEPT
-A FORWARD -p udp -m state --state RELATED -m udp --dport 1024:65535 -j ACCEPT
-A FORWARD -p icmp -m state --state RELATED -j ACCEPT
-A FORWARD -i eth1 -j HOST_BLOCK
-A FORWARD -j SPOOF_CHK
-A FORWARD -i eth1 -j VALID_CHK
-A FORWARD -m limit --limit 1/min --limit-burst 3 -j LOG --log-prefix "Dropped FORWARD packet: " --log-level 6
-A FORWARD -j DROP
-A OUTPUT -o eth1 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A OUTPUT -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -f -m limit --limit 3/min -j LOG --log-prefix "FRAGMENTED PACKET (OUT): " --log-level 6
-A OUTPUT -f -j DROP
-A OUTPUT -o eth1 -j EXT_OUTPUT_CHAIN
-A EXT_ICMP_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-request(ping) flood: " --log-level 6
-A EXT_ICMP_CHAIN -p icmp -m icmp --icmp-type 3 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-unreachable flood: " --log-level 6
-A EXT_ICMP_CHAIN -p icmp -m icmp --icmp-type 4 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-source-quench flood: " --log-level 6
-A EXT_ICMP_CHAIN -p icmp -m icmp --icmp-type 11 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-time-exceeded flood: " --log-level 6
-A EXT_ICMP_CHAIN -p icmp -m icmp --icmp-type 12 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-param.-problem flood: " --log-level 6
-A EXT_ICMP_CHAIN -p icmp -m icmp --icmp-type 8 -j DROP
-A EXT_ICMP_CHAIN -p icmp -m icmp --icmp-type 3 -j DROP
-A EXT_ICMP_CHAIN -p icmp -m icmp --icmp-type 4 -j DROP
-A EXT_ICMP_CHAIN -p icmp -m icmp --icmp-type 11 -j DROP
-A EXT_ICMP_CHAIN -p icmp -m icmp --icmp-type 12 -j DROP
-A EXT_ICMP_CHAIN -p icmp -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP(other) flood: " --log-level 6
-A EXT_ICMP_CHAIN -p icmp -j DROP
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 0 -m limit --limit 6/hour --limit-burst 1 -j LOG --log-prefix "TCP port 0 OS fingerprint: " --log-level 6
-A EXT_INPUT_CHAIN -p udp -m udp --dport 0 -m limit --limit 6/hour --limit-burst 1 -j LOG --log-prefix "UDP port 0 OS fingerprint: " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 0 -j DROP
-A EXT_INPUT_CHAIN -p udp -m udp --dport 0 -j DROP
-A EXT_INPUT_CHAIN -p tcp -m tcp --sport 0 -m limit --limit 6/hour -j LOG --log-prefix "TCP source port 0: " --log-level 6
-A EXT_INPUT_CHAIN -p udp -m udp --sport 0 -m limit --limit 6/hour -j LOG --log-prefix "UDP source port 0: " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp --sport 0 -j DROP----------------------
и как ты получил этот файл ?Мне вот например не нужны:
# Create several chains that we will use later on
######################################################################
$IPTABLES -N HOST_BLOCK
$IPTABLES -N MAC_FILTER
$IPTABLES -N VALID_CHK
$IPTABLES -N RESERVED_NET_CHK
$IPTABLES -N SPOOF_CHK
$IPTABLES -N DMZ_INPUT_CHAIN
$IPTABLES -N DMZ_LAN_FORWARD_CHAIN
$IPTABLES -N INET_DMZ_FORWARD_CHAIN
$IPTABLES -N DMZ_INET_FORWARD_CHAIN
$IPTABLES -N LAN_INPUT_CHAIN
$IPTABLES -N LAN_INET_FORWARD_CHAIN
$IPTABLES -N EXT_INPUT_CHAIN
$IPTABLES -N EXT_ICMP_FLOOD_CHAIN
$IPTABLES -N EXT_OUTPUT_CHAIN
как бы это сказать, задачи несколько другие....
> и как ты получил этот файл ?Повтроряю, настрой и запусти то что я говорю. Дальше поймешь и увидишь все сам.
>> и как ты получил этот файл ?
>
> Повтроряю, настрой и запусти то что я говорю. Дальше поймешь
>и увидишь все сам.
>
>Я не получил ответ на вопрос - как был получен этот файл..
И далее - ты сам эти правила посоставлял ? Нет, это тебе скрипт их нагенерил. Думаю, что не сильно ты можешь правила менять как тебе нужно.
Я поизучал содержимое стартового скрипта, и меня это не устраивает.
>>> и как ты получил этот файл ?
>>
>> Повтроряю, настрой и запусти то что я говорю. Дальше поймешь
>>и увидишь все сам.
>Я не получил ответ на вопрос - как был получен этот файл..Он был сгенерен самим arno-iptables-firewall
>И далее - ты сам эти правила посоставлял ? Нет, это тебе
>скрипт их нагенерил.Это даже ежу ясно.
>Думаю, что не сильно ты можешь правила менять как тебе нужно.Я меняю все что мне нужно.
>Я поизучал содержимое стартового скрипта, и меня это не устраивает.А переделать скрипт так как тебе нужно "камасутра не позволяет"? :)
>>Я поизучал содержимое стартового скрипта, и меня это не устраивает.
>
> А переделать скрипт так как тебе нужно "камасутра не позволяет"?
>:)Цитирую свое сообщение:
>[оверквотинг удален]
>>
>>Это не комбайн. Довольно простенький.
>>
>>
>>>Подскажите, какой пакет поставить чтобы было как в redhat -
>>>/etc/init.d/iptables save|start|stop делало банальные iptables-save iptables->restore ...
>>
>> Посмотри на предложенный и переделай.
>>
>Свой я сам написать могу, я как-бы готовым, имеющимся пакетом интересуюсь...Поясните, почему в RH могут сделать удобный скрипт в базовой системе/пакетах, а в Debian я такого найти не могу ?
Итого:
1. Перепиши под себя скрипт файрволла
2. Смени syslog на syslog-ng потому что кто-то придумал извращенный скрипт ротации логов сислога _не_ через logrotate (все интересующиеся изучают состав пакета syslog)
3. Sarg ставится конечно из пакетов, но вот бага с моментами генерации отчетов за месяц из 7 ежедневных файлов уже сколько лет висит..и это только мелкий сервер, который только начинает жить...
>[оверквотинг удален]
>
>1. Перепиши под себя скрипт файрволла
>2. Смени syslog на syslog-ng потому что кто-то придумал извращенный скрипт ротации
>логов сислога _не_ через logrotate (все интересующиеся изучают состав пакета syslog)
>
>3. Sarg ставится конечно из пакетов, но вот бага с моментами генерации
>отчетов за месяц из 7 ежедневных файлов уже сколько лет висит..
>
>
>и это только мелкий сервер, который только начинает жить...Мир не совершенен. :)
На самом деле если ставить GNU/Debian 4 "с нуля", в отличии от апгрейда с версии 3, то в файл /etc/init.d/iptables отсуствует, соответственно негде посмотреть откуда грузятся автоматически правила, да и не грузятся они в общем, приходится самому все писать :((
В третьей версии все было нормально в четвертой сломали....