iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT
Я пытаюсь понять часть -m state --state NEW
.
Поиск по страницам руководства и исправьте меня, если я ошибаюсь.
NEW
означает, что пакет установил новое соединение или иным образом связан с соединением, которое не видимые пакеты в обоих направлениях
-m
= match
--state
, где state - разделенный запятыми список состояний соединения с матч. Возможные состояния недействительны, что означает, что пакет не может быть идентифицирован по какой-либо причине, которая включает в себя нехватку памяти и ошибки ICMP, которые не соответствуют ни одному известному соединению, ESTABLISHED означает, что пакет связан с соединением, которое увидело пакеты в обоих направления, NEW означает, что пакет установил новое соединение или иным образом связан с соединением, которое как не видит пакеты в обоих направлениях, и СВЯЗАНО с тем, что пакет начинает новое соединение, но связано с существующим соединением, таким как передача данных по FTP или ошибка ICMP. UNTRACKED означает, что пакет вообще не отслеживается, что происходит, если вы используете цель NOTRACK в необработанной таблице.
Мой вопрос: в чем разница между этими двумя командами
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT
iptables -A INPUT -p tcp --dport 7000:7010 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT
Используется технология межсетевого экрана с сохранением состояния. Благодаря этому iptables отслеживает состояние каждого соединения, например, NEW, ESTABLISHED, RELATED, чтобы назвать несколько.
NEW - это состояние соединения, когда оно впервые получено из локального интерфейса или других машин, пытающихся подключиться к вашему устройству, как описано на странице руководства. [ 115]
ESTABLISHED - это когда пакет подтверждается хостом назначения. Поэтому пакет виден в обоих направлениях.
При использовании техники межсетевого экрана Stateful у вас будет больше контроля, но меньше строк кода, когда вам нужно будет добавить больше правил межсетевого экрана.
iptables -A INPUT -p tcp --dport 7000:7010 -j ACCEPT
Это правило просто разрешает НОВОЕ входящее соединение в цепочке INPUT iptables с портом 7000: 7010, но не отслеживает состояние пакета для последующего использования.
Подробнее о брандмауэре с сохранением состояния: http://en.wikipedia.org/wiki/Stateful_firewall