Статья рассказывает о том, как выполнить "минимальную" настройку iptables в Ubuntu 16 и CentOS 7, предполагающую блокировку IPv6- и IPv4-трафика, за исключением входящего IPv4-трафика протокола SSH, а также всего исходящего IPv4-трафика
Настройка iptables в Ubuntu 16
- устанавливаем пакет iptables-persistent
- apt-get install iptables-persistent
- настраиваем цепочки и правила
- сохраняем внесенные изменения
- netfilter-persistent save
Настройка iptables в CentOS 7
- отключаем автоматический запуск службы firewalld
- systemctl disable firewalld
- устанавливаем пакет iptables-services
- yum install iptables-services
- включаем автоматический запуск служб iptables и ip6tables
-
systemctl enable iptables
systemctl enable ip6tables - настраиваем цепочки и правила
- сохраняем изменения
-
service iptables save
service ip6tables save
Настройка правил и цепочек
IPv4
- выводим список всех правил и цепочек всех таблиц
-
iptables --table filter --list-rules
iptables --table nat --list-rules
iptables --table mangle --list-rules
iptables --table raw --list-rules
iptables --table security --list-rules - устанавливаем для каждой стандартной цепочки таблицы "filter" временные правила по умолчанию
-
iptables --policy INPUT ACCEPT
iptables --policy FORWARD ACCEPT
iptables --policy OUTPUT ACCEPT - Замечание: данный шаг необходим для того, чтобы в процессе настройки через удаленное подключение случайно не заблокировать себе доступ; по завершении настройки данные правила будут переопределены
- удаляем все созданные автоматически правила
-
iptables --table filter --flush
iptables --table nat --flush
iptables --table mangle --flush
iptables --table raw --flush
iptables --table security --flush - удаляем все созданные автоматически пользовательские цепочки
-
iptables --table filter --delete-chain
iptables --table nat --delete-chain
iptables --table mangle --delete-chain
iptables --table raw --delete-chain
iptables --table security --delete-chain - добавляем правило, разрешающее входящий трафик на локальном интерфейсе
- iptables --append INPUT --in-interface lo --jump ACCEPT
- добавляем правило, разрешающее входящий трафик инициированных хостом соединений
- iptables --append INPUT --match conntrack --ctstate ESTABLISHED,RELATED --jump ACCEPT
- добавляем правило, разрешающее входящие SSH-подключения
- iptables --append INPUT --protocol tcp --dport 22 --jump ACCEPT
- устанавливаем для каждой стандартной цепочки правила по умолчанию
-
iptables --policy INPUT DROP
iptables --policy FORWARD DROP
iptables --policy OUTPUT ACCEPT - Замечание: правила по умолчанию для других таблиц не изменяем, поскольку обычно в этом нет необходимости
IPv6
- выводим список всех правил и цепочек всех таблиц
-
ip6tables --table filter --list-rules
ip6tables --table nat --list-rules
ip6tables --table mangle --list-rules
ip6tables --table raw --list-rules
ip6tables --table security --list-rules - удаляем все созданные автоматически правила
-
ip6tables --table filter --flush
ip6tables --table nat --flush
ip6tables --table mangle --flush
ip6tables --table raw --flush
ip6tables --table security --flush - удаляем все созданные автоматически пользовательские цепочки
-
ip6tables --table filter --delete-chain
ip6tables --table nat --delete-chain
ip6tables --table mangle --delete-chain
ip6tables --table raw --delete-chain
ip6tables --table security --delete-chain - устанавливаем для каждой стандартной цепочки правила по умолчанию
-
ip6tables --policy INPUT DROP
ip6tables --policy FORWARD DROP
ip6tables --policy OUTPUT DROP - Замечание: правила по умолчанию для других таблиц не изменяем, поскольку обычно в этом нет необходимости