Какая польза от параметра состояния --в iptables?

Если file1и file2существуют и равны, ваш фрагмент кода, как показано, генерирует синтаксическую ошибку:unexpected end of file. Это происходит из-за незавершенного оператора if, когда оболочка достигает конца сценария до того, как встретит соответствующий оператор fi. Это вызвано наличием elif ifвместо elif. Если в остальной части вашего кода нет других ошибок, это должно решить проблемы, о которых вы сообщили.

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

if diff --strip-trailing-cr file1 file2 > /dev/null; then
  echo "no diff"
elif [ $? -eq 1 ]; then
  echo "there is diff"
else
  echo "something is wrong"
fi

Кстати, при написании шелл-скриптов очень полезно проверять их с помощью ShellCheck — инструмента анализа шелл-скриптов .

0
21.05.2021, 16:27
3 ответа

iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

запретит любые новые соединения.

Из справочной страницы:«NEW означает, что пакет начал новое соединение или иным образом связан с соединением, которое не видело пакеты в обоих направлениях» . IOW, только это правило, когда политика по умолчанию - DROP/REJECT, не позволит вам подключиться к хосту.

1
28.07.2021, 11:30
iptables -A INPUT  -p tcp --sport 22 -m state -j ACCEPT

Это позволит любое TCP-соединение с исходным портом 22 из любого места на любой порт на вашем компьютере, а не только возврат пакетов исходящего SSH-соединения. Если вы используете какой-либо сервер на машине, на любом порту, а не только на SSH, любой может подключиться к нему, если догадается использовать 22 в качестве исходного порта. Безопасность через неизвестность.

Conntrack вместо этого отслеживает исходящие соединения, которые были фактически открыты из вашей системы, поэтому скажите iptables, чтобы он принимал входящие пакеты ESTABLISHEDсвязи, вы знаете, вы получаете те и только те.

Хотя обратите внимание, что примерно так:

iptables -A INPUT  -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

будет разрешать ответы только на исходящие SSH-соединения (на порт 22 ). Вам нужно будет воспроизвести это для всех других портов, к которым необходимо подключиться системе, отражая любые правила в цепочке OUTPUT.

Другим примером может быть что-то вроде этого, чтобы принимать пакеты на высокие порты, чтобы разрешить ответные пакеты на (любые )исходящие соединения:

iptables -A INPUT -p tcp --dport 1024:65535 -j ACCEPT

Это также разрешит любые подключения к любым серверам, работающим на высоких портах (, например. 8080 или 6667 ), даже те, которые были случайно оставлены включенными. Конечно, вы можете ограничить этот диапазон больше, но тогда вам нужно будет проверить, какой диапазон ваша система использует для исходящих соединений.

Опять же, с TCP вы можете добавить ! --synдля предотвращения новых подключений, но с UDP это невозможно, так как возвратные или ответные пакеты ничем не отличаются от исходных пакетов на низком уровне. Там conntrack — почти единственный способ отличить соединения, только что открытые из системы,от других пакетов, которые просто пришли извне.

1
28.07.2021, 11:30

Когда вы говорите «Оба должны работать», это означает, что оба делают то, что вы от них хотите, но мы не знаем, чего вы хотите.

Первая пара правил разрешает исходящие соединения с удаленным портом 22. Это может быть или не быть тем, что вы намеревались. Большинство людей больше озабочены ограничением входящих подключений.

Вторая пара правил также разрешает исходящие подключения к удаленному порту 22. Но с помощью брандмауэров легко проверить, что то, что должно быть разрешено, действительно разрешено. Сложнее проверить, что то, что должно быть заблокировано, действительно заблокировано.

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

1
28.07.2021, 11:30

Теги

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