Выяснение у справки с iptables

Во-первых я хочу спросить почему мой rules.v4 взгляды так сложными после использования: iptables -F. Я думал, что это будет пусто после сбрасывания:

# Generated by iptables-save v1.6.0 on Tue Jan  9 21:25:13 2018
*filter
:INPUT ACCEPT [76:4024]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:40]
:ufw-after-forward - [0:0]
:ufw-after-input - [0:0]
:ufw-after-logging-forward - [0:0]
:ufw-after-logging-input - [0:0]
:ufw-after-logging-output - [0:0]
:ufw-after-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-before-input - [0:0]
:ufw-before-logging-forward - [0:0]
:ufw-before-logging-input - [0:0]
:ufw-before-logging-output - [0:0]
:ufw-before-output - [0:0]
:ufw-logging-allow - [0:0]
:ufw-logging-deny - [0:0]
:ufw-not-local - [0:0]
:ufw-reject-forward - [0:0]
:ufw-reject-input - [0:0]
:ufw-reject-output - [0:0]
:ufw-skip-to-policy-forward - [0:0]
:ufw-skip-to-policy-input - [0:0]
:ufw-skip-to-policy-output - [0:0]
:ufw-track-forward - [0:0]
:ufw-track-input - [0:0]
:ufw-track-output - [0:0]
:ufw-user-forward - [0:0]
:ufw-user-input - [0:0]
:ufw-user-limit - [0:0]
:ufw-user-limit-accept - [0:0]
:ufw-user-logging-forward - [0:0]
:ufw-user-logging-input - [0:0]
:ufw-user-logging-output - [0:0]
:ufw-user-output - [0:0]
-A INPUT -i enp3s0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i enp3s0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i enp3s0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i enp3s0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i enp2s0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i enp2s0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i enp2s0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i enp2s0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input
-A FORWARD -d 10.42.0.0/24 -o enp3s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.42.0.0/24 -i enp3s0 -j ACCEPT
-A FORWARD -i enp3s0 -o enp3s0 -j ACCEPT
-A FORWARD -o enp3s0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i enp3s0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -d 10.42.1.0/24 -o enp2s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.42.1.0/24 -i enp2s0 -j ACCEPT
-A FORWARD -i enp2s0 -o enp2s0 -j ACCEPT
-A FORWARD -o enp2s0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i enp2s0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j ufw-before-logging-forward
-A FORWARD -j ufw-before-forward
-A FORWARD -j ufw-after-forward
-A FORWARD -j ufw-after-logging-forward
-A FORWARD -j ufw-reject-forward
-A FORWARD -j ufw-track-forward
-A OUTPUT -j ufw-before-logging-output
-A OUTPUT -j ufw-before-output
-A OUTPUT -j ufw-after-output
-A OUTPUT -j ufw-after-logging-output
-A OUTPUT -j ufw-reject-output
-A OUTPUT -j ufw-track-output
-A ufw-after-input -p udp -m udp --dport 137 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 138 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 139 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 445 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 67 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 68 -j ufw-skip-to-policy-input
-A ufw-after-input -m addrtype --dst-type BROADCAST -j ufw-skip-to-policy-input
-A ufw-after-logging-forward -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-after-logging-input -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-forward -j ufw-user-forward
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
-A ufw-before-input -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-input -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A ufw-before-input -j ufw-not-local
-A ufw-before-input -d 224.0.0.251/32 -p udp -m udp --dport 5353 -j ACCEPT
-A ufw-before-input -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j ACCEPT
-A ufw-before-input -j ufw-user-input
-A ufw-before-output -o lo -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -j ufw-user-output
-A ufw-logging-allow -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW] "
-A ufw-logging-deny -m conntrack --ctstate INVALID -m limit --limit 3/min --limit-burst 10 -j RETURN
-A ufw-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
-A ufw-skip-to-policy-forward -j DROP
-A ufw-skip-to-policy-input -j DROP
-A ufw-skip-to-policy-output -j ACCEPT
-A ufw-track-output -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-output -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT
COMMIT
# Completed on Tue Jan  9 21:25:13 2018
# Generated by iptables-save v1.6.0 on Tue Jan  9 21:25:13 2018
*nat
:PREROUTING ACCEPT [306:30491]
:INPUT ACCEPT [79:4750]
:OUTPUT ACCEPT [128:10004]
:POSTROUTING ACCEPT [122:8932]
-A POSTROUTING -s 10.42.0.0/24 ! -d 10.42.0.0/24 -j MASQUERADE
-A POSTROUTING -s 10.42.1.0/24 ! -d 10.42.1.0/24 -j MASQUERADE
COMMIT
# Completed on Tue Jan  9 21:25:13 2018

Второй вопрос - мне нужно iptables к ограничению скорости новые соединения на определенном порте (предел не на IP, но все новые попытки, если существуют слишком многие из них), одновременно не блокируйте трафик, который не прибывает в тот определенный порт. Все примеры, которые я видел на интернет-ОТБРАСЫВАНИИ использования для ВХОДНОЙ политики по умолчанию, но которые не подходят мне.

Обновление: Я выполняю игровой сервер на порте 45000 (он использует tcp и upd протокол), и недавно у меня были проблемы со спамом бота. Боты пытаются соединиться с моим сервером со всего мира с помощью сотен прокси. Игровые плагины сервера успешно заблокировали их, но это нападение становится намного более сильным в последнее время, и теперь оно вызывает задержки. Идеально я хотел блокировать доступ к этому порту на основе геолокации и позволить только 5-10 стран, но это сложно. Другая опция уже является к ограничению скорости новыми соединениями с тем портом при сохранении существующей. Конечно, это, к которому sertanly заблокирует нормальные плееры, пытающиеся присоединиться во время нападения, но по крайней мере те, кто уже играет, могут сделать это без экстремального отставания. Мой сервер не является большим (30 плееров макс.), таким образом, я предполагаю, что ограничение скорости для 30 новых соединений с портом 45000 в 30 секунд будет прекрасно.

1
задан 10 January 2018 в 17:07

1 ответ

Все элементы, которые вы опубликовали, потому что в какой-то момент вы активировали UFW, который является интерфейсом iptables, и создали все эти пользовательские таблицы.

Опция -F удаляет правила из некоторых, но не из всех правил из всех таблиц, а также из пустых цепочек, которые вы видите.

Вам понадобятся некоторые дополнительные опции:

Из https://serverfault.com/questions/200635/linux-iptables-best-way-to-clear-all-rules-leaving-anything -open полный набор команд для сброса iptables:

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
  • -P опция сбрасывает политику по умолчанию для таблиц.
  • -t nat -F очищает таблицу nat.
  • -t mangle -F сбрасывает mangle, который почти никогда не используется.
  • -X удаляет пустые цепочки.

См. Ссылку для IPv6 и man iptables для получения дополнительной информации.

«Проблема» - опция -F, без указания цепочки, не сбрасывает все цепочки, в вашем случае у вас есть несколько оставшихся цепочек, созданных UFW.

Чтобы удалить эти цепочки, вы должны сначала очистить их (-X не удалит их, если они не пусты)

Так что для каждой цепочки сначала вы должны удалить любую ссылку на цепочку, очистите цепочку, а затем удалите его

Начиная с «ufw-before-logging-forward»

sudo iptables -D FORWARD -j ufw-before-logging-forward
sudo iptables -F ufw-before-logging-forward
sudo iptables -X ufw-before-logging-forward

и далее для всех пользовательских цепочек, добавленных ufw.

Конечно, поскольку вы используете UFW, есть гораздо более простой метод:

sudo ufw disable

Несколько общих комментариев

  1. Я предлагаю вам придерживаться политики по умолчанию ПРИНЯТЬ, а не ОТКЛЮЧИТЬ или УБРАТЬ. Если вы устанавливаете политику по умолчанию REJECT / DROP, вы можете заблокировать себя, если вы запустите iptables -F

  2. Если вы пишете правила iptables вручную, не используйте ufw или другие инструменты для изменения ваших правил. .

  3. Я настоятельно рекомендую REJECT, а не DROP. В ореховой скорлупе DROP более мешает легитимному трафику, и, хотя звучит неплохо, DROP не замедляет и не обманывает ни один из современных инструментов взлома. Поскольку ваша система реагирует на пакет, взломщики будут знать, что вы работаете по вашему IP-адресу, а DROP ничего не скрывает.

Подробнее см. http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject .

  1. Использовать iptables-persistent

Верхний ответ Как сохранить правила iptables? рассматривает базовое использование, включая сохранение и восстановление вашего набора правил. Для получения дополнительной информации см. Справочную страницу.


Для помощи в написании правил мне нужно больше подробностей, какой порт и какой трафик вы хотите ограничить и как. Ограничение пинга другое. Ограничение веб-сервера отличается от ограничения соединений ssh. Позволить большинству, но ограничить немногих - это использовать черный список. Ограничение всего и разрешение нескольких - это белый список и т. Д.

Примеры:

Веб-трафик - я мог бы использовать общий синтаксис для веб-сервера, если он был очень занят:

iptables -I INPUT -p tcp -m state --state NEW -m limit --limit 30/minute --limit-burst 5 -j ACCEPT

Вы, безусловно, можете добавить опцию --dport 80 к вышеуказанная команда.

Это ограничивает 30 соединений в минуту, что очень медленно для Apache. Если веб-сервер не был так занят, вы можете либерализовать до тысячи соединений в минуту.

SSH - эти правила отлично подходят для блокировки попыток перебора

# This rule tracks incoming connections to port 22
iptables -A INPUT -p tcp -m tcp --dport 22 -m tcp -m state --state NEW -m recent --set --name SSH --rsource

# This command rejects any attempt to connect to ssh more than
# 8 times in 10 minutes
# After 10 minutes you can attempt again so not permanent ban
iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --update --seconds 600 --hitcount 8 --rttl --name SSH --rsource -j REJECT --reject-with icmp-host-prohibited

# Finally this will accept the connections 
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Если вам нужна более конкретная помощь, обновите свой вопрос =)

1
ответ дан 10 January 2018 в 17:07

Другие вопросы по тегам:

Похожие вопросы: