Как я могу заблокировать все порты, кроме некоторых?

Используя GNU awk:

$ awk '{printf "%s%s%s","line=",$0,RT}' RS='[^\\\\]\n' text
line=entry1line1
line=entry2line1\
entry2line2\
entry2line3
line=entry3line1

Как видите, строки заканчиваются на \ присоединяются к следующей строке. Это связано с тем, что разделитель записей RS был переопределен так, чтобы он был любым без обратной косой черты, за которым следует новая строка. Другими словами, обратная косая черта-новая строка не является разделителем записей.

Небольшая хитрость заключается в том, что разделитель записей проглатывает последний символ записи. Однако этот символ сохраняется для нас во встроенной переменной RT . Небольшое изменение в программе исправляет значение $ 0 в начале кода, чтобы эта проблема исчезла:

$ awk '{$0=$0 substr(RT,1,1)} {print "line=",$0}' RS='[^\\\\]\n' text
line= entry1line1
line= entry2line1\
entry2line2\
entry2line3
line= entry3line1

RT содержит весь фактический наблюдаемый разделитель записей. В нашем случае это означает, что он имеет последний символ записи и следующий за ним символ новой строки. Следовательно, в приведенном выше коде substr используется для добавления первого символа RT в конец $ 0 .

3
02.12.2016, 10:49
3 ответа

Я бы посоветовал не играть с iptables напрямую, если вы не готовы изучить основы работы в сети, TCP (ICMP / UDP / SCTP ... ) / IP, сетевой фильтр Linux и как сначала настроить брандмауэр.

Здесь, поскольку вы используете Debian, я бы установил что-то вроде ufw , очень простой уровень управления поверх iptables .

Он устанавливает политику по умолчанию ACCEPT для исходящего трафика и DROP для входящего или пересылаемого трафика.Он позаботится о том, чтобы не стрелять вам в ноги, не блокируя необходимые типы ICMP / DHCP / широковещательного / многоадресного трафика и обрабатывая как IPv4, так и IPv6 по мере необходимости.

Тогда вам остается только пробить дыры в тех услугах, которые вам нужны. Некоторые пакеты также устанавливают файлы в /etc/ufw/applications.d/ , чтобы помочь вам пробить дыры по приложениям вместо того, чтобы указывать порты вручную (вы также можете создать свои собственные).

ufw app list

дает вам список этих поддерживаемых приложений. Затем вы можете сделать:

ufw allow from 10.10.10.10 app OpenSSH
ufw allow from any app WWW
ufw allow ircd/tcp # by service name (from /etc/services...)
ufw allow 6697/tcp # by explicit port number
ufw enable

Вы можете запустить iptables-save , чтобы увидеть, какие правила он сгенерировал. Он также будет настраивать некоторые параметры стека IP. См. Также дополнительную конфигурацию в / etc / ufw .

3
27.01.2020, 21:12

Используйте таблицу фильтров в iptables и добавьте нужное вам правило сначала промойте все правила в таблице фильтров в iptables:

sudo iptables -t filter -F

затем добавьте правило для разрешения ESTABLISHED,RELATED connection:

sudo iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

затем для разрешения портов 80, 6667 и 6697 для tcp всем добавьте:

sudo iptables -t filter -A INPUT -p tcp -m multiport --dports 80,6667,6697 -j ACCEPT

и для разрешения порта 22 только для вашего ip добавьте:

sudo iptables -t filter -A INPUT -s <your ip address> -p tcp --dport 22 -J ACCEPT

затем для блокировки всего остального добавьте:

sudo iptables -t filter -A INPUT -j DROP

Готово.

3
27.01.2020, 21:12

Если вам интересно учиться как использовать iptables, я бы рекомендовал не пытаться настроить его на сервере, а вместо этого установить iptables на локальный компьютер (например, виртуальную машину или ноутбук) и поэкспериментировать с ним там. Таким образом, если вы сделаете ошибку, вы не заблокируете себя в своей системе.

Лично я, даже после пятнадцати лет администрирования серверов Linux и написания сценариев iptables вручную, я никогда не обновляю конфигурацию брандмауэра, если у меня нет способа немедленно перезагрузить сервер в случае ошибки (будь то через систему KVM или панель управления хостера или физически подойдя к машине). В конце концов, ошибки возможны всегда, и вы не хотите случайно заблокировать свой сервер на семь часов из-за простой опечатки.

1
27.01.2020, 21:12

Теги

Похожие вопросы