Linux — абсолютно безопасная система? Отнюдь. Linux безопасен ровно настолько, насколько он малораспространён. А победы Ubuntu с каждым днём приближают нас к тому, что Linux станет интересно взламывать, и тогда появится весь зоопарк вредоносного ПО, который уже знаком пользователям Windows и Mac OS X. Так что же делать, чтобы работа с Linux была более безопасной?

Репозитории, PPA и прочее

В отличии от Windows/Mac OS X, в большинстве дистрибутивов Linux практикуется централизованная установка программ и обновлений из репозиториев. Обычно в таких репозиториях есть всё, что нужно, но если вам не повезло и какой-то очень нужной софтины нет — все равно ищите репозитории. В Ubuntu существуют Personal Package Archives, которые содержат практически весь софт мира, но помните — PPA заполняют люди, и нужно перед подключением очередного PPA посмотреть — а какие отзывы оставляют люди, и что оттуда тянется? Особенно это касается PPA с малоизвестными и подозрительными программами. Ну и уж на крайний случай пользуйтесь официальными сайтами программ и их пакетами. Но будьте бдительны — троян в скринсейвер в Ubuntu-пакет уже запихивали!

unSecure Shell


В целях облегчения администрирования и удалённой установки системы некоторые дистрибутивы могут запускать SSH после установки при запуске системы. Вы можете проверить, запущен ли у вас SSH, так:

$ ps aux | grep sshd

Если в выхлопе есть что-то типа такого:

root 2653 0.0 0.0 40612 168 ? Ss May24 0:00 /usr/sbin/sshd

значит, у вас запущен SSH. Выключить его вы можете через управление сервисами. Например, в Ubuntu:

$ sudo service ssh stop

останавливает сервис. А команда:

$ sudo update-rc.d -f ssh remove

убирает сервис SSH из автозагрузки (Стоит отметить, что убирает ровно до первого обновления пакета openssh-server. Так что проще его вообще удалить, если не нужен. Прим. ред.).

Ну а если нам таки нужен SSH для работы, то не забудьте в /etc/ssh/sshd_config сделать следующее (строчки, начинающиеся с # — комментарии!):

# Выключить возможность логина под root
PermitRootLogin no
# Выключить возможность логиниться с пустым паролем
PermitEmptyPasswords no
# Запретить тупой подбор пароля: ограничить количество попыток тремя
MaxAuthTries 3
# Выключить многосессионный режим: вы не сможете зайти по SSH, если другая SSH-сессия уже активна!
MaxSessions 1
# Разрешить только определённым пользователям вход по SSH
AllowUsers me mymom mygrandma


Многие ещё рекомендуют переназначать порт с 22-го на какой-нибудь другой, но если вами вдруг заинтересуются, nmap покажет начилие «входа» на непонятном порту, и это будет большей приманкой. Впрочем, существуют так называемые honeypot, решающие задачу отвлечения внимания, но о них как-нибудь в другой раз.

Закройся фаерволом


В Linux существует мощнейший файервол iptables, который позволяет закрыть все нежелательные соединения. Если у вас непритязательное использование сети, и входящие подключения, инициированные не с вашего компьютера, вам не нужны, вы можете посмотреть ваши сетевые интерфейсы командой ifconfig (она выдаст все интерфейсы, по которым у вас идёт сетевой обмен, и небольшую статистику по ним), и для всех из них, кроме lo (loopback-интерфейс петли компьютера на самого себя), сделать запрет входящего неициированного вами трафика:

$ sudo iptables -A INPUT -i ваш_интерфейс (например, eth0) -j DROP

После чего весь ненужный вам входящий трафик будет блокирован.

Однако, NetworkManager может порываться игнорировать iptables-правила, посему мы должны «рассказать» ему о них. В первую очередь, сохраним правила для текущей конфигурации iptables:

$ sudo bash -c "iptables-save > /etc/iptables.rules"

Теперь мы можем записать в /etc/NetworkManager/dispatcher.d/01firewall скрипт, позволяющий восстановить NetworkManager-у при старте наши правила iptables. Скрипт выглядит так:

if [ -x /usr/bin/logger ]; then
LOGGER="/usr/bin/logger -s -p daemon.info -t FirewallHandler"
else
LOGGER=echo
fi

case "$2" in
up)
if [ ! -r /etc/iptables.rules ]; then
${LOGGER} "No iptables rules exist to restore."
return
fi
if [ ! -x /sbin/iptables-restore ]; then
${LOGGER} "No program exists to restore iptables rules."
return
fi
${LOGGER} "Restoring iptables rules"
/sbin/iptables-restore -c < /etc/iptables.rules
;;
down)
if [ ! -x /sbin/iptables-save ]; then
${LOGGER} "No program exists to save iptables rules."
return
fi
${LOGGER} "Saving iptables rules."
/sbin/iptables-save -c > /etc/iptables.rules
;;
*)
;;
esac


После перезапуска NetworkManager будет уважать правила iptables и сюблюдать их.

Ну а если вы решили, что вам нужен SSH, то вам необходимо настроить приём входящих соединений с него:

$ sudo iptables -A INPUT 1 -p tcp --dport ssh -j ACCEPT

После выполнения данной команды SSH-трафик не будет блокироваться. Текущие правила iptables вы всегда можете проверить командой:

$ sudo iptables -L

и если они вас устраивают, сохранить для автозапуска уже упоминавшейся выше командой:

$ sudo bash -c "iptables-save > /etc/iptables.rules"

Вместо заключения


Описанные выше действия помогут вам сделать свой Linux немного защищённее, но как ни странно, главный защитник вашей системы — тот, кто расположен между монитором и стулом. И если вы будете думать о своей безопасности, не влезать на сомнительные сайты и не запускать сомнительные программы/скрипты — то ваша система станет наиболее безопасной. Ведь, как известно, человеческий фактор всегда является решающим. Удачи, и будьте бдительны!

P.S. Пост подготовлен Valdos Sinus <fat0troll@ya.ru> для конкурса. Ваш оценка решит получит ли автор годовую подписку на VPN-сервис. В любом случае его ждет утешительный приз в 1 месяц =). Просвещай людей — получай VPN!

 

Оригинал статьи - http://habrahabr.ru/company/kebrum/blog/120595/