iptables
Install ipdables with nft
apt install iptables
https://habr.com/ru/company/ruvds/blog/580648/
Check iptables uses nft
iptables -V
iptables v1.8.7 (nf_tables)
ls -lh /etc/alternatives/iptables*
lrwxrwxrwx 1 root root 22 Aug 7 15:34 /etc/alternatives/iptables -> /usr/sbin/iptables-nft
lrwxrwxrwx 1 root root 30 Aug 7 15:34 /etc/alternatives/iptables-restore -> /usr/sbin/iptables-nft-restore
lrwxrwxrwx 1 root root 27 Aug 7 15:34 /etc/alternatives/iptables-save -> /usr/sbin/iptables-nft-save
To update alternatives
update-alternatives --config iptables
Keep rules after reboot
apt install iptables-persistent
systemctl is-enabled netfilter-persistent.service
Check persistent rules
cat /etc/iptables/rules.v4
After you add new rule you should save it to persistent rule
iptables-save > /etc/iptables/rules.v4
https://www.cyberciti.biz/faq/how-to-save-iptables-firewall-rules-permanently-on-linux/
Show rules
iptables -L -v -n --line-numbers
Add SSH from specific address
iptables -A INPUT -p tcp ! -s 11.11.11.11 --dport 22 -j DROP
OR
iptables -A INPUT -p tcp -s 11.11.11.11/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Allow HTTP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Allow ICMP
iptables -A INPUT -p icmp -j ACCEPT
Allow local
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
https://selectel.ru/blog/setup-iptables-linux/
Allow related and established connections
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
Insert rule on specific position
iptables -I INPUT 1 -s 11.11.11.11 -j ACCEPT
Set default rule for incoming
iptables -P INPUT DROP
Delete rule
iptables -D INPUT 5
https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands
iptables and firewalld
CentOS 8 uses nftables, which by itself isn't surprising. It ships with the nft version of the iptables commands, which means when you use the iptables command it actually maintains a set of compatibility tables in nftables.
iptables --version
iptables v1.8.2 (nf_tables)
However...
Firewalld - which is installed by default - has native support for nftables, so it doesn't make use of the iptables compatibility layer.
So while iptables -S INPUT shows you:
iptables -S INPUT
-P INPUT ACCEPT
What you actually have is:
nft list table inet firewalld
nft list ruleset
chain filter_INPUT {
type filter hook input priority 10; policy accept;
ct state established,related accept
iifname "lo" accept
jump filter_INPUT_ZONES_SOURCE
jump filter_INPUT_ZONES
ct state invalid drop
reject with icmpx type admin-prohibited <-- HEY LOOK AT THAT!
}
The solution here (and honestly probably good advice in general) is:
systemctl disable --now firewalld
With firewalld out of the way, the iptables rules visible with iptables -S will behave as expected.
iptables can only confirm the table with the specified keywords. If nftables is running behind firewalld, the rules displayed in iptables are incorrect! So use nft instead of iptables to check the rules
Limit to 32 connections per client
iptables -A INPUT -p tcp --syn --dport ${LISTENING_PORT} -m connlimit --connlimit-above 32 -j REJECT --reject-with tcp-reset
просмотреть все правила iptables
iptables -L -n -v
Show specific NAT table
iptables -t nat --line-numbers -n -L
iptables [-t ТАБЛИЦА] -A ЦЕПОЧКА ПАРАМЕТРЫ_ПАКЕТА -j ДЕЙСТВИЕ
Цепочки: - INPUT - пакеты предназначающиеся Вашему узлу. То есть входящий трафик. Транзитный трафик сюда не попадает. - FORWARD - пакеты которые предназначены для другого узла, то есть транзитный трафик. - OUTPUT - пакеты, которые уходят от нашего узла, или исходящий трафик. Транзитный трафик сюда не попадает. - -A - добавление нового правила в цепочку. Правило будет добавлено в конец цепочки. - -I - добавление правила не в конец,а туда куда вы укажите. - -D - удаление правила. - -F - сброс всех правил цепочки. - -N - создание пользовательской цепочки. - -X - удаление пользовательской цепочки.
iptables delete all rules
iptables -F # table "filter" is a default table
iptables -t nat -F
iptables -t mangle -F
фильтрация пакета по источнику
iptables -A INPUT -s 192.168.133.133 -j DROP
фильтрация пакета по назначению
iptables -A OUTPUT -d 192.168.156.156 -j DROP
фильтрация по протоколу и порту источника
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
фильтрация по протоколу и порту назначения
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Действия: - ACCEPT - разрешить пакет. - DROP - уничтожить пакет. - REJECT - будет отправлено ICMP сообщение, что порт недоступен. - LOG - информация об этом пакете будет добавлена в системный журнал (syslog). Не прерывает цепочку. - Модули (-m модуль параметр) - -m state - NEW - пакет устанавливающий новое соединение. - ESTABLISHED - пакет от уже установленного соединения. - RELATED - пакет устанавливающий новое соединение от уже установленного (ESTABLISHED) соединения (пример: установка FTP-data соединения из FTP-control соединения). - INVALID - говорит о том, что пакет не может быть идентифицирован и поэтому не может иметь определенного статуса
iptables -A INPUT -s 192.168.0.1 -m mac --mac-source 00:65:3F:ED:12:98 -j DROP
Пример, защищенной настройки iptables
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
iptables -A INPUT DROP
The first rule records the IP address of each attempt to access port 22 using the recent module. The second rule checks to see if that IP address has attempted to connect 4 or more times within the last 60 seconds, and if not then the packet is accepted. Note this rule would require a default policy of DROP on the input chain.
В CentOS править нужно /etc/sysconfig/iptables в котором и содержатся правила, для сохранения после перезагрузки
Secure SSH
iptables -A INPUT -p tcp --dport 22 -m recent --set --name ssh --rsource
iptables -A INPUT -p tcp --dport 22 -m recent ! --rcheck --seconds 60 --hitcount 4 --name ssh --rsource -j ACCEPT
Пример правил для NAT
iptables -A INPUT -p tcp --dport 2382 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dst $EXT_IP --dport 2382 -j DNAT --to-destination $INT_IP:8082
iptables -t nat -A POSTROUTING -p tcp --dst $INT_IP --dport 2382 -j SNAT --to-source $EXT_IP
для DHCP - сервера
iptables -I INPUT -i eth0 -p udp --dport 67 --sport 68 -j ACCEPT
для сохранения правил
service iptables save
NAT to lower port for non-root process
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080
Добавление определения портов для сетевых сервисов
nano /etc/services
zabbix_agent 10050/tcp
zabbix_trap 10051/tcp