Здравствуйте, это не совсем гайд, скорее набор заметок которые могут оказаться кому то полезными если этому человеку взбредет маяться фигней как помаялся я.
Должен сразу предупредить, что учитывая количество голов Гидры Линукса, охватить настройку iptables для них всех не представляется возможным, следовательно мой небольшой сказ будет конкретно о настройке на
Ubuntu 18 версии.
Известно вам или нет, но на Линуксе по дефолту (кроме самых самых новых дистрибутивов, где идет встроенный
firewallD) не идет никаких брандмауэров, фаерволов и прочей гомосятины. Один юзер
kzv подшучивал над линукс фанами, мол некоторые даже не знают что такое iptables, хи хи. Честно вам скажу, если говорить очень грубо, фаервол на Линухе это не тоже что фаервол на Винде (где он жизненно необходим, если конечно нет желания получить проникновение во все системные дырки. иногда сразу) так как на Линуксе даже при атаке на порты практически нереально получить какие то root права и что-то там наваять. По сути атака может идти через некий порт, на конкретную некую уязвимость, но блин, у Линукса уязвимостей очень мало появляется, поэтому многие Линукс сервера могут даже жить без фаервола, так как мало кто пытается получить какие то системные рут права, там вектора атаки другие.
Но чтобы была спокойна душа, и предохраниться лишний раз, можно в принципе себе настроить фаервол. Есть два варианта:
1. Любым опен сорс фаерволом с удобным графическим интерфейсом и огромным количеством возможностей -
https://www.techradar.com/best/best-free-linux-firewalls2. Или пойти по пути Джонни и настраивать самому через старую добрую утилиту
iptablesЯ не буду распылаться на пошаговые инструкции как ее ставить, какие команды что значат и прочее. Благо у вас есть руки и интернет, а также я предоставлю пару ссылок ниже для ознакомления:
Полное руководство по iptables для мозговитых бездельниковКороткий гайд для занятых пролетариевПерейдем конкретно к схеме самого фаервола. Выглядеть это для декстопа будет как то так:
#!/bin/sh
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Мы запрещаем все входящие подключения, и все проходящие через нас (forward, таких для обычного компа в основном всегда 0) но разрешаем все исходящие. Второе правило с
lo это разрешение подключения через локалхост, а последнее - чтобы нынешняя сессия не разорвалась когда мы введем
"iptables -P INPUT DROP" И конечно же, люди не столь умудренные опытом, справедливо напишут -
"Вротмненоги, Джонни, что вот это #!/bin/sh вообще такое?"А это собственно, скриптик. И конкретно этот - указатель, что инструкция будет выполняться в оболочке системы (sh). Как писать скриптики, вот гайд:
Запуск скрипта на LinuxМного гайдов я линковать не стал, так как большинство идут прямо из самых азов, где могут всплыть путающие неофитов команды типа whoiam или echo . Поэтому если будет желание, сами поищете. Сейчас вам нужно только создать новый файл командой nano или touch о ввести в него вышеуказанную мной инструкицю, и запустить его как скрипт.
Да, после проведения процедуры используйте вот эту команду чтобы проверить применились ли правила
Команда -L выводит список всех активных правил применяемых в этой сессии.
Вы думаете все? Вы думаете что вам хватит обычного
iptables-save чтобы сохранить правила и пользоваться? Ха ха, как бы не так.
Проблема в том, что любые правила действуют только одну сессию, и любая перезагрузка или выключение сбрасывает их на дефолтные. Нам нужно их как нибудь сохранить. Вариантов этого несколько (на самом деле вариантов дохуя, от помещения скрипта в папку отвечающую за автозагрузку важных скриптов, до прописывания в rc local):
Все вариантыИмея один раз дело с настройкой iptables до этого, лично я пользовался первым вариантом где мы прописываем новые правила через интерфейсы. Но сейчас я нашел очень хитрый (и простой!) способ как сохранить правила и не париться.
Для начала нужно выполнить команду:
и команду
iptables-save > /etc/iptables.rules"
Или можно одной:
sudo sh -c "iptables-save > /etc/iptables.rules"
Далее, мы воспользуемся третьим вариантом, а именно
iptables-persistent. Переходим вот по этой ссылке -
тыц тыц, пробуем выполнить команду и о боже, у нас же не установлен persistent! Надо его установить
sudo apt install iptables-persistent
и во время установки он увидит правила (ваши правила которые вы сохранили в iptables.rules) и предложит их сделать дефолтными для ipv4 и ipv6. Великодушно соглашаемся, устанавливаем, перезагружаемся и вуаля, правила работают!
Вот в принципе и сказочке конец, кто послушал молодец, а кто послушал и сделал молодец вдвойне!
P.S:Я видел другой фаервол, где не парились с входящими подключениями, а разрешали все но закрывали все порты кроме 80 (http), 443 (https) и 22 (SSH). Но мне такой подход не очень понравился, жду критики может такой вариант лучше.
Ссылки использованные для создания скрипта:
Archlinux wikiИ еще куча мелочи пузатой которую я уже позакрывал.