Безпека.
Дбання про безпеку є важливим на будь-якій системі, це може запобігти атакам на вашу машину і захистити важливу інформацію що ви зберігаєте. Цей розділ про те, як налагодити початковий захист вашої системи щоб вберегти її від "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
...
Як ви можливо самі здогадались, останній файл не пройшов перевірку.