iptables-rules

Примеры команд iptables

Если коротко то так. Делаем файлик. Назовем его например fw. Файлик делаем исполняемым chmod +x fw.
И в него вносим все что нужно из того что написано ниже, но не забываем добавить в начале файла.
#!/bin/sh
Так же нужно указывать полный путь к файлу iptables что бы все отработало корректно при запуске системы.
/usr/sbin/iptables
Далее написано без /usr/sbin/, но мы должны помнить, что писать /usr/sbin/ нужно!!! :)

И поехали

1. Удалить все правила. Нужно когда вы меняете правила без перезагрузки сервера. Фишка в том, что когда вы добавляете правила или редактируете их, предыдущие правила висят в памяти сервера и никуда не деваются. После перезагрузки все правила конечно удаляются, но эта запись в самом начале файла не повредит.
iptables -F

# 2. Устанавливаем значение по умолчанию. Будем все дропать, то есть блокировать.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# 3. Блокируем конкретный IP
iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP

# 4. Открываем TCP порт 22 (это SSH)
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# 5. Открываем TCP порт 22 только для конкретной сети. В нашем случае всем компам из сети 192.168.200.0 по маске 24, то есть 255.255.255.0
iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# 6. По аналогии открываем всем 80 порт HTTP
#iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

# По аналогии открываем всем 443 порт HTTPS
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

# 7. Одним выстрелом трех зайцев :)
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

# 8. Открываем исходящее соединение на порт 22. SSH
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# 9. Тоже что и выше но для сети
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.101.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# 10. Открываем исходящее соединение на порт 443. HTTPS
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

# 11. Load balance incoming HTTPS traffic
#iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
#iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
#iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

# 12. Пинг снаружи во внутрь
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

# 13. Пинг изнутри наружу
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

# 14. Локальной петле разрешаем ваще все.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 15. Разрешаем проброс снаружи во внутрь
# if eth1 is connected to external network (internet)
# if eth0 is connected to internal network (192.168.1.x)
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

# 16. Разрешаем общаться с DNS сервером
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

# 17. Разрешаем NIS Connections
# rpcinfo -p | grep ypbind ; This port is 853 and 850
iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 853 -j ACCEPT
iptables -A INPUT -p udp --dport 853 -j ACCEPT
iptables -A INPUT -p tcp --dport 850 -j ACCEPT
iptables -A INPUT -p udp --dport 850 -j ACCEPT

# 18. разрешаем rsync для конкретной сети
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

# 19. Разрешаем MySQL для конкретной сети
iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

# 20. Разрешаем хождение почты Sendmail or Postfix
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

# 21. тоже что и выше только для IMAP и IMAPS
iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT

# 22. Теперь для POP3 и POP3S
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

# 23. Профилактика от DoS атак
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

# 24. Перенаправление портов с 422 на 22
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

# 25. Log пакеты убиваем
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
iptables -A LOGGING -j DROP
# 26. Ну и разрешаем хождение всего на всё для конкретной сети. 192.168.1.1 IP адрес сетевого интерфейса eth0. То есть если расшифровать на людской язык. Все входящие пакеты на интерфейс eth0 c адресом назначения 192.168.1.1 от источника, сеть 192.168.1.0 по маске 24, разрешить. Все пакеты исходящие пакеты с интерфейса eth0 IP источника 192.168.1.1, назначение, сеть 192.168.1.0 по маске 24, разрешить. То есть все пакеты гуляют как хотят. Аккуратнее с этим правилом. Не на роком можно открыть сеть не туда.
iptables -A INPUT  -i eth0 -d 192.168.1.1 -s 192.168.1.0/24  -j ACCEPT
iptables -A OUTPUT -o eth0 -s 192.168.1.1 -d 192.169.1.0/24  -j ACCEPT


Ну пока все. далее по аналогии можно рулить самим. По опыту рекомендую в файлике не делать кашу и все раздеть на части INPUT-ы к INPUT-ам, OUTPUT-ы к OUTPUT-ам и так далее. Так же не поленитесь и создайте несколько файлов. Один для фильтров (INPUT, OUTPUT) Другой для nat-a и так далее. Упростите себе жизнь в поисках причины почему не работает. Так же бы не помешало понимание чего за чем идет. Но это уже другая история.
Пример как по моему разумению удобнее всего

#!/bin/sh

/sbin/iptables -F INPUT
/sbin/iptables -A INPUT  -i eth1 -d 192.168.1.1 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT  -i eth0 -p icmp --icmp-type echo-request -j ACCEPT
/sbin/iptables -A INPUT  -i eth0 -p icmp --icmp-type echo-reply -j ACCEPT
/sbin/iptables -A INPUT  -i eth0 -d 192.168.0.1 -s 192.168.0.0/16  -j ACCEPT
/sbin/iptables -A INPUT  -i eth0 -j DROP

/sbin/iptables -F OUTPUT
/sbin/iptables -A OUTPUT -o eth1 -p tcp --sport 80 -j ACCEPT
/sbin/iptables -A OUTPUT -o eth0 -p icmp --icmp-type echo-request -j ACCEPT
/sbin/iptables -A OUTPUT -o eth0 -p icmp --icmp-type echo-reply -j ACCEPT
/sbin/iptables -A OUTPUT -o eth0 -s 192.169.0.1 -d 192.168.0.0/16  -j ACCEPT
/sbin/iptables -A OUTPUT -o eth0 -j DROP


Расшифровка:
eth1 одна сеть, eth0 другая

цепочка INPUT (входящие)

Чистим правила

Разрешаем проход на 80 порт всем. Просто открываем 80 порт.

Открываем пинги

Разрешаем все на все для сети 192.168.0.0/16

Все остальное отсеиваем (DROP)



цепочка OUTPUT (исходящие)

Чистим правила

Открываем 80 порт.

Открываем пинги

Разрешаем все на все для сети 192.168.0.0/16

Все остальное отсеиваем (DROP)

Комментариев нет:

Отправить комментарий