Author

Topic: Немного о iptables на Линукс (Read 284 times)

legendary
Activity: 2436
Merit: 1849
Crypto for the Crypto Throne!
February 02, 2020, 06:16:36 PM
#7
Во многих линуксах можно установить  GUFW. Знатоки подскажите чем он плох? Для домашнего пользования.
еще

Ничем не плох, ufw это встроенная утилита, но возможностей в ней меньше чем у iptables. И да, если что, все фаерволы между собой конфликтуют, поэтому выбирать для пользования нужно только один.

Конкретно ufw это под Убунту если что. Он проще и нативнее, но изучив iptables хотя бы раз (и разжившишь стандартными скриптами настройки) можно настроить фаерволл на любой оболочке, будь то Дебиан, Убунту или Редхат.

Там при включении у UFW по стандарту в принципе все тоже, что и в моем примере: отклоняет входящий трафик, разрешает исходящий, отключает forwarded (routed).
legendary
Activity: 2072
Merit: 4265
✿♥‿♥✿
February 01, 2020, 03:43:04 AM
#6
Во многих линуксах можно установить  GUFW. Знатоки подскажите чем он плох? Для домашнего пользования.
еще
sr. member
Activity: 1232
Merit: 280
~
22 порт лучше сразу поменять на что-то более рандомное иначе китайские боты замучают.
~
Совет правильный и порт рекомендуют менять. Но лучше просто отключить парольный доступ в sshd_config и заходить по ключу, и пусть там боты делают что угодно - их можно даже не банить за попытки, ведь они все равно ничего не смогут сделать.
legendary
Activity: 2436
Merit: 1849
Crypto for the Crypto Throne!
Ну это я более разбирал для обычного декстопа дома, для вальяжного пользования.

Про серверы речи не шло, там совсем все по другому делать стоит. Опять таки, возможно проще использовать решение из коробки, но как по мне потратить часик-другой (если прямо с нулевыми знаниями) на настройку своего фаервола как то интереснее
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Мне неудобно когда входящие порты закрыты. Для меня линукс это прежде всего удаленный сервер, куда я коннекчусь по ssh, rdp, http, https. Плюс часто еще по pptp, l2tp, smtp и какой-нибудь squid.

22 порт лучше сразу поменять на что-то более рандомное иначе китайские боты замучают.

В дополнение, если писать что-то серверное к которому надо подключаться на порты 1-1024, то чтобы не запускать сервер под рутом, можно написать правило iptables которое будет редиректить траффик с системного порта на порт сервера как-то так

Code:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination :8080


full member
Activity: 644
Merit: 135
кстати, а не возникало ли желания всю эту кривизну переделать? Wink

Есть идеи?..


PS  подсовывал как-то виндовые таблицы опытным линуксоидам - вообще ничего понять не смогли Wink))
legendary
Activity: 2436
Merit: 1849
Crypto for the Crypto Throne!
Здравствуйте, это не совсем гайд, скорее набор заметок которые могут оказаться кому то полезными если этому человеку взбредет маяться фигней как помаялся я.

Должен сразу предупредить, что учитывая количество голов Гидры Линукса, охватить настройку iptables для них всех не представляется возможным, следовательно мой небольшой сказ будет конкретно о настройке на Ubuntu 18 версии.

Известно вам или нет, но на Линуксе по дефолту (кроме самых самых новых дистрибутивов, где идет встроенный firewallD) не идет никаких брандмауэров, фаерволов и прочей гомосятины. Один юзер kzv подшучивал над линукс фанами, мол некоторые даже не знают что такое iptables, хи хи. Честно вам скажу, если говорить очень грубо, фаервол на Линухе это не тоже что фаервол на Винде (где он жизненно необходим, если конечно нет желания получить проникновение во все системные дырки. иногда сразу) так как на Линуксе даже при атаке на порты практически нереально получить какие то root права и что-то там наваять. По сути атака может идти через некий порт, на конкретную некую уязвимость, но блин, у Линукса уязвимостей очень мало появляется, поэтому многие Линукс сервера могут даже жить без фаервола, так как мало кто пытается получить какие то системные рут права, там вектора атаки другие.

Но чтобы была спокойна душа, и предохраниться лишний раз, можно в принципе себе настроить фаервол. Есть два варианта:

1. Любым опен сорс фаерволом с удобным графическим интерфейсом и огромным количеством возможностей - https://www.techradar.com/best/best-free-linux-firewalls

2. Или пойти по пути Джонни и настраивать самому через старую добрую утилиту iptables

Я не буду распылаться на пошаговые инструкции как ее ставить, какие команды что значат и прочее. Благо у вас есть руки и интернет, а также я предоставлю пару ссылок ниже для ознакомления:

Полное руководство по iptables для мозговитых бездельников
Короткий гайд для занятых пролетариев

Перейдем конкретно к схеме самого фаервола. Выглядеть это для декстопа будет как то так:
Code:
#!/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 о ввести в него вышеуказанную мной инструкицю, и запустить его как скрипт.

Да, после проведения процедуры используйте вот эту команду чтобы проверить применились ли правила
Code:
sudo iptables -L
Команда -L выводит список всех активных правил применяемых в этой сессии.

Вы думаете все? Вы думаете что вам хватит обычного iptables-save чтобы сохранить правила и пользоваться? Ха ха, как бы не так.
Проблема в том, что любые правила действуют только одну сессию, и любая перезагрузка или выключение сбрасывает их на дефолтные. Нам нужно их как нибудь сохранить. Вариантов этого несколько (на самом деле вариантов дохуя, от помещения скрипта в папку отвечающую за автозагрузку важных скриптов, до прописывания в rc local):

Все варианты

Имея один раз дело с настройкой iptables до этого, лично я пользовался первым вариантом где мы прописываем новые правила через интерфейсы. Но сейчас я нашел очень хитрый (и простой!) способ как сохранить правила и не париться.

Для начала нужно выполнить команду:
Code:
sudo sh
и команду
Code:
iptables-save > /etc/iptables.rules"

Или можно одной:
Code:
sudo sh -c "iptables-save > /etc/iptables.rules"

Далее, мы воспользуемся третьим вариантом, а именно iptables-persistent. Переходим вот по этой ссылке - тыц тыц, пробуем выполнить команду и о боже, у нас же не установлен persistent! Надо его установить
Code:
sudo apt install iptables-persistent
и во время установки он увидит правила (ваши правила которые вы сохранили в iptables.rules) и предложит их сделать дефолтными для ipv4 и ipv6. Великодушно соглашаемся, устанавливаем, перезагружаемся и вуаля, правила работают!

Вот в принципе и сказочке конец, кто послушал молодец, а кто послушал и сделал молодец вдвойне!

P.S:

Я видел другой фаервол, где не парились с входящими подключениями, а разрешали все но закрывали все порты кроме 80 (http), 443 (https) и 22 (SSH). Но мне такой подход не очень понравился, жду критики может такой вариант лучше.


Ссылки использованные для создания скрипта:
Archlinux wiki
И еще куча мелочи пузатой которую я уже позакрывал.
Jump to: