Firewall
netfilter - встроенный firewall. Консольные утилиты для управления netfilter:
- iptables - для v4 и v6 различные
- ebtables - mac briging правила
- arptables - правил трансляции arp
ufw - фронтенд для iptables
nftables - иная реализация
firewalld - реализация в RedHat
Iptables
Состоит из 4 таблиц:
- Filter table Базовая защита, обычно используется
- NAT table
- Mangle table Изменение сетевых пакетов при их прохождении через брандмауэр
- Security table Используется в системах с установленным SELinux
Каждая таблица состоит из цепочек правил. Filter table состоит из цепочек INPUT, FORWARD, OUTPUT
Просмотр существующих таблиц
sudo iptables -L -v
Сохранение правил после перезагрузки сервера
sudo apt install iptables-persistant
После этого правила сохраняются в /etc/iptables*
Пример команды
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Аргумент | Описание |
-A, -I |
Добавить в конец или в определенное место цепочки. -A INPUT -I INPUT 1 |
-m | Модуль. |
--ctstate | Состояние пакета. Перечисляется через запятую без пробелов. |
-j |
Действие при соблюдении условия ACCEPT разрешить пакет DROP тихо откинуть пакет REJECT вернуть ответ о блокировании запрашивающей стороне |
-p | Тип соединения, tcp/udp |
--dport |
порт назначения --dport ssh |
-i |
Интерфейс -i lo |
Разрешение доступа для ssh
sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
Здесь для определения порта по названию использовался файл /etc/services То есть возможно прописать свое название службы в данный файл и использовать его в правилах.
cat /etc/services | grep http
# Updated from https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml .
http 80/tcp www # WorldWideWeb HTTP
https 443/tcp # http protocol over TLS/SSL
http-alt 8080/tcp webcache # WWW caching service
http-serg 8081/tcp # test server
Затем правилом разрешаем доступ по имени службы. Однако не понятно, почему нужно определять тип соединения. Похоже, что из файла берется только номер порта.
sudo iptables -I INPUT 1 -p tcp --dport http-serg -j ACCEPT
Разрешение доступа к lo
sudo iptables -I INPUT 1 -i lo -j ACCEPT