Безпека.

Дбання про безпеку є важливим на будь-якій системі, це може запобігти атакам на вашу машину і захистити важливу інформацію що ви зберігаєте. Цей розділ про те, як налагодити початковий захист вашої системи щоб вберегти її від "script kiddies", крекерів і подібного товариства. Майте на увазі, що це лише початок захисту вашого комп'ютеру, безпека - це процес а не стан.

Заборона сервісів.

Одним з перших кроків після інсталяції Slackware повинно бути вимкнення сервісів, які вам не потрібні. Будь-який сервіс - це потенційний ризик, тож важливо запустити якнайменше (лише ті які вам справді необхідні). Сервіси запускаються двома шляхами - з inetd(8) і завантажувальних скриптів init.

Сервіси inetd

Багато сервісів (демонів) в Slackware запускаються inetd(8). Сама програма inetd - це також демон, який прослуховує порти, вказані у файлі конфігурації inetd, /etc/inetd.conf, і викликає сервіс, що відповідає вказаним портам при спробі під'єднання до них ззовні. Щоб заборонити сервіси, що починаються inetd, нам потрібно закоментувати відповідний рядок з /etc/inetd.conf. Якщо ви відкриєте цей файл у текстовому редакторі, то побачите багато рядків, схожих до наступного:

telnet stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd

Ви можете заборонити сервіс, якщо закоментуєте за допомогою ґратки відповідний рядок з inetd.conf:

#telnet stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd

Після внесення змін до файлу конфігурації, вам необхідно заставити inetd перечитати його. Для цього рестартуйте inetd наступною командою:

# kill -HUP $(cat /var/run/inetd.pid)

Сервіси започатковані зі скриптів init.

Деякі сервіси не залежать від inetd(8) і запускаються статично init-скриптами з каталогу /etc/rc.d під час завантаження системи. Скрипти init можна внеможливити в два способи. Першим є заборона дозволу на виконання скрипта, що запускає небажаний сервіс. Другий - це закоментувати відповідні рядки скрипта.

Так, наприклад, SSH запускається власним ініціалізаційним скриптом /etc/rc.d/rc.sshd. Ви можете заборонити його виконання, командою

# chmod -x /etc/rc.d/rc.sshd

Для сервісів, що можуть не мати власних ініціалізаційних скриптів, вам можливо знадобиться закоментувати рядки, що запускають ці сервіси в інших init-скриптах. Так, наприклад, демон portmap запускається з наступних рядків з /etc/rc.d/rc.inet2:

# This must be running in order to mount NFS volumes.
# Start the RPC portmapper:
if [ -x /sbin/rpc.portmap ]; then
  echo "Starting RPC portmapper:  /sbin/rpc.portmap"
  /sbin/rpc.portmap
fi
# Done starting the RPC portmapper.

Ці команди можна заборонити, якщо додати # перед кожною з них:

# This must be running in order to mount NFS volumes.
# Start the RPC portmapper:
#if [ -x /sbin/rpc.portmap ]; then
#  echo "Starting RPC portmapper:  /sbin/rpc.portmap"
#  /sbin/rpc.portmap
#fi
# Done starting the RPC portmapper.

Ці зміни матимуть дію тільки якщо ви або перезавантажите систему, або зміните тимчасово робочий рівень на 1-ий (з відсутньою мережною функціональністю). Тож, скористайтеся наступними двома командами:

# telinit 1
# telinit 3

Керування доступом до системи

iptables

?iptables(8) являється програмою фільтрації пакетів для Лінукс версії 2.4 і вище. Ядро 2.4.5 вперше з'явилось як опція в Slackware 8.0 i стало стандартним у Slackware 8.1. Цей розділ розглядає лише основи використання iptables. Для детальнішої інформації, зверніться до http://www.netfilter.org/.

Команди мережного екрану, ipables, можна внести у стартовий скрипт /etc/rc.d/rc.firewall, після чого зробити останній виконуючим, тож правила фільтрації ввійдуть в дію одразу по завантаженню системи. Майте на увазі, що помилки в командах iptables можуть фактично призвести до відмови до доступу вам до власної машини через мережу. Тож, якщо ви не стовідсотково впевнені у власних можливостях, переконайтеся, що у вас є фізичний доступ до даного комп'ютера.

Першим, що слід здійснити, це встановлення політики за замовчуванням для кожного вхідного ланцюжка до DROP (відкидання):

# iptables -P INPUT DROP
# iptables -P FORWARD DROP

Після того, як весь вхідний трефік заперечено, ми можемо почати дозволяти певні речі. Першим, що варто дозволити, це будь-які під'єднання для вже встановлених сесій:

# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Для того, щоб не зламати певні аплікації, що використовують кільцевий, обернений на себе, інтерфейс, буде слушним додати правило наступного змісту:

# iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT

Останнє правило дозволяє будь-який трефік з і до 127.0.0.0/8 (127.0.0.0 - 127.255.255.255) на кільцевому інтерфейсі lo. Під час створення правил, суттєво бути настільки точним, наскільки це можливо, щоб впевнитись, що ваші правила не дозволяють випадково чогось шкідливого. Це також означає, що правила, що дозволяють дуже мало, вимагатимуть додаткових правил і більше друкування.

Наступний рядочок є прикладом надання доступу до деяких сервісів, які можливо вами запущені. Так, скажімо, якщо у вас діючий веб-сервер, вам може знадобитись правило на зразок:

# iptables -A INPUT -p tcp --dport 80 -i ppp0 -j ACCEPT

Це дозволяє доступ з будь-якої машини до порту 80 на вашому комп'ютері через інтерфейс ppp0. Якщо ви бажаєте обмежити доступ до цього сервісу лише до певних хостів, це можна зробити як показано у наступному прикладі. Доступ в даному випадку надається лише машині з адресою 64.57.102.34:

# iptables -A INPUT -p tcp -s 64.57.102.34 --dport 80 -i ppp0 -j ACCEPT

Дозвіл пакетів ICMP може бути корисним для діагностичних цілей. Ось правило для цього:

# iptables -A INPUT -p icmp -j ACCEPT

У багатьох виникне бажання налагодити перетворення сітьових адрес (Network Address Translation або скорочено NAT), якщо це шлюзова машина, тож інші комп'ютери локальної мережі будуть в спромозі виходити в Інтернет через неї. Вам знадобиться наступне правило для цього:

# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Додатково вам необхідно ввімкнути перенаправлення IP. Ви можете здійснити це тимчасово наступною командою:

# echo 1 > /proc/sys/net/ipv4/ip_forward

Щоб увімкнути перенаправлення IP на стале (тобто, щоб воно також збереглося після рестарту системи), вам потрібно буде відредагувати файл /etc/rc.d/rc.inet, помінявши наступний рядок:

IPV4_FORWARD=0

до

IPV4_FORWARD=1

Для додаткової інформації про перетворення сітьових адрес, подивіться NAT-HOWTO.

tcpwrappers

tcpwrappers, обгортка TCP, керує доступом до сервісів на рівні додатків, замість рівня IP. Це надає додатковий прошарок захищеності у випадку, якщо контроль доступу на IP рівні (тобто Netfilter) не працює як слід. Наприклад, якщо ви компілювали нове ядро, але забули долучити підтримку iptables, ваш захист на рівні IP зазнає невдачі, але tcpwrappers все ще захищатиме вашу систему.

Доступом до сервісів, захищених tcpwrappers можна керувати через файли etc/hosts.allow і /etc/hosts.deny.

Більшість користувачів матимуть лише один рядочок у їхньому /etc/hosts.deny, що забороняє доступ до будь-яких демонів за замовчуванням. Для цього потрібно вказати

ALL : ALL

Після того, як ви впевнились, що цей рядок присутній у hosts.deny, ви можете зосередитись на дозволі доступу окремим хостам, доменам або діапазонам IP. Це можна зробити лише у файлі etc/hosts.allow, який слідує тому самому форматові.

Перш за все, можна додати під'єднання до власних сервісів з власного ж комп'ютеру (localhost). Цього можна добитись, якщо внести

ALL : 127.0.0.1

до hosts.allow. Щоб дозволити доступ до SSH-демону з діапазону адрес 192.168.0.0/24, ви можете використати одне з наступних правил:

sshd : 192.168.0.0/24
sshd : 192.168.0.

Є можливість також обмежити доступ лише до певного домену. Цього можна добитися, використовуючи наступний запис у hosts.allow (зауважте, що наступне правило покладається на обернений пошук DNS* довіреного хосту, що не надто рекомендовано для машин, під'єднаних до Інтернету):

sshd : .slackware.com

Слідкування за поновленнями

Список розсилки slackware-security

У випадку проблем з безпекою в Slackware, буде надіслано листа всім абонентам поштової розсилки slackware-security@slackware.com. Повідомлення стосуються вразливостей будь-якої частини Slackware, за винятком програм з каталогів /extra або /pasture. Оголошення по безпеці міститиме деталі щодо здобуття поновленої версії пакету, що підлягає заміні, або про обхідні дії, якщо такі існують.

Каталог patches

Як тільки з'являються оновлення пакетів для різних версій Slackware (часто оновлення саме виправляють проблеми з безпекою), вони одразу будуть поміщені до каталогу /patches. Абсолютний шлях до цього каталогу може варіювати, в залежності від того, яке саме дзеркало серверу дистрибутиву ви використовуєте, але звичайно це щось на зразок /шлях/до/slackware-x.x/patches/.

Перед інсталяцією цих пакетів, має зміст перевірити md5sum (md5 контрольну суму) пакету. ?md5sum(1) - це знаряддя, використовуване з командного рядка, що створює унікальне обчислення математичного гешу файлу. Якщо хоч один біт файлу поміняно, це призведе до відмінного значення md5sum.

$ md5sum openssl-0.9.7g-i486-2.tgz
6341417aa1c025448b53073a1f1d287d  openssl-0.9.7g-i486-2.tgz

Де 0.9.7g є версією, i486 - архітектурою і 2 - ревізією пакету.

Добуті дані вам необхідно звірити з відповідним рядком для цього пакету з файлу CHECKSUMS.md5, який ви знайдете у кореневому каталозі slackware-$VERSION (також у самому каталозі /patches), або ж у листі, отриманому від slackware-security.

Якщо ви добули файл з контрольними сумами, ви можете перевірити одразу багато пакетів, які ви можливо завантажили і зберегли на локальному диску у каталозі packages/. Сам файл CHECKSUMS.md5 містить інструкції, які фактично зводиться до того, що вам необхідно заставити md5sum прочитати CHECKSUMS.md5 і порівняти добуту інформацію з існуючими файлами:

# md5sum -c CHECKSUMS.md5
./ChangeLog.txt: OK
./FILE_LIST: OK
./MANIFEST.bz2: OK
./PACKAGES.TXT: OK
./packages/apache-1.3.34-i486-1.tgz: OK
./packages/apache-1.3.34-i486-1.tgz.asc: OK
./packages/apache-1.3.34-i486-1.txt: FAILED
...

Як ви можливо самі здогадались, останній файл не пройшов перевірку.