Разпространена практика в областта на компютърната сигурност е да се забрани всичко по подразбиране, след което да се разреши само това което е необходимо. Това може да бъде изразено така `всичко, което не е изрично разрешено, е забранено'. Аз бих ви препоръчал точно този подход, ако сигурността е от най-голямо значение за вас.
Не стартирайте услуги от които не се нуждаете, дори и да си мислите, че сте блокирали достъпа до тях.
Ако изграждаде защитна стена, спрете всички процеси очакващи връзка от мрежата, и блокирайте всички пакети. Сега стартирайте само услугите които ви трябват и разрешете преминаването на пакетите за които това е необходимо.
Препоръчвам задълбочен подход към сигурността, комбинирайте tcp-wrappers (за връзките към самия пакетен филтър), проксита (за връзките преминаващи през него), проверка на маршрутизацията и пакетно филтриране. Проверка на маршрутизацията, означава пакетите които пристигат от неочакван интерфейс да бъдат блокирани. Например, ако вашата вътрешна мрежа има адрес 10.1.1.0/24, и пакет с такъв адрес на изпращача пристигне на външния ви интерфейс, то той ще бъде отхвърлен. Това може да бъде включена за даден интерфейс (ppp0) ето така:
# echo 1 > /proc/sys/net/ipv4/conf/ppp0/rp_filter
#
Или за всички интерфейси:
# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
# echo 1 > $f
# done
#
Дебиан прави това по подразбиране когато е възможно. В случай, че имате асиметрична маршрутизация (т.е. очаквате пакети пристигащи от странни посоки), то трябва да спрете филтрирането за тези интерфейси.
Журнализирането на събитията е много полезно когато изграждате защитната стена. Така ако нещо не работи както трябва лесно ще можете да видите къде е проблема. Когато обаче тя започнете да работи в реални условия винаги използвайте и `limit' модула. Така ще се предпазите от препълване на журналните файлове.
Силно препоръчвам използването модулите за следене на връзките. Те повишават натоварването на системата, тъй като всички връзки се следят, но са много полезни при контролирането на достъпа до вашата мрежа. Може да се наложи да заредите `ip_conntrack.o' модула ако вашето ядро не поддържа автоматично зареждане на модули и той не е вграден в ядрото. Ако искате следенето на работи правилно и с по сложни протоколи, то трябва да заредите съответните помощни модули (пример: `ip_conntrack_ftp.o').
# iptables -N no-conns-from-ppp0
# iptables -A no-conns-from-ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A no-conns-from-ppp0 -m state --state NEW -i ! ppp0 -j ACCEPT
# iptables -A no-conns-from-ppp0 -i ppp0 -m limit -j LOG --log-prefix "Bad packet from ppp0:"
# iptables -A no-conns-from-ppp0 -i ! ppp0 -m limit -j LOG --log-prefix "Bad packet not from ppp0:"
# iptables -A no-conns-from-ppp0 -j DROP
# iptables -A INPUT -j no-conns-from-ppp0
# iptables -A FORWARD -j no-conns-from-ppp0
Темата за изграждане на добра защитна стена е извън обхвата на този документ. Прегледайте Security HOWTO за повече информация относно тестване и проучване на вашата машина.