Iptables: заблокировать все страны, кроме моей, для конкретного порта

Я хотел бы заблокировать все IP-адреса (CIDR 0.0.0.0/0), за исключением немецких IP-адресов для портов SSH, FTP и SMTP. Таким образом, политика по умолчанию для этих портов должна быть "DROP". У меня есть список всех немецких CIDR-диапазонов, которые будут в списке "ПРИНЯТЬ".

Я не понял, как именно работает iptables, и мне нужно немного помочь с синтаксисом. Я также не нашел, как настроить поведение, когда есть 2 взаимоисключающих правила ACCEPT и DROP для определенного хоста. У меня Debian Linux на ВМ, но я не смог протестировать его, так как в моей сети есть только 1 компьютер, поэтому я не могу проверить, отклонены ли IP-диапазоны или нет.

Кроме того, можно ли сказать iptables, чтобы он принимал динамическое имя хоста, например, имя хоста DynDns, где IP-адрес всегда меняется?

Моя идея будет (не проверено):

iptables -I INPUT -s 0.0.0.0/0 --dport 21 -j DROP
iptables -I INPUT -s 1.2.3.4 --dport 21 -j ACCEPT

где 1.2.3.4 - пример IP, который будет разрешен.

1 ответ

Решение

Daniel,

Вы, вероятно, захотите чего-то подобного. Это просто вырезано из моего файла / etc / sysconfig / iptables в Red Hat.

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 10.1.1.0/24 -p tcp -m multiport --dports 22,80,443,5666 -j ACCEPT
-A INPUT -s 10.2.2.2 -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
COMMIT

Как видите, политика ввода по умолчанию - drop. Таким образом, вам не нужно делать какие-либо конкретные правила отбрасывания. Вам нужно только сказать, что вы хотите разрешить. В моем примере я показал, где вы можете сделать несколько протоколов для одного правила или только один протокол для одного правила.

Изменить: ниже приведен пример сценария, который вы можете использовать для создания ваших правил iptable.

#!/bin/bash
# Iptables configuration script

# Flush all current rules from iptables
/sbin/iptables -F

# Loopback address
/sbin/iptables -A INPUT -i lo -j ACCEPT

# Allowed any established connections
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow FTP and SSH from specific IPs
/sbin/iptables -A INPUT -s 10.0.2.0/24 -p tcp -m state --state NEW -m multiport --dports 21,22 -j ACCEPT

# Allow pings from monitoring server
/sbin/iptables -A INPUT -s 1.1.1.1 -p icmp -m icmp --icmp-type any -j ACCEPT

# Allow web server access from anywhere
/sbin/iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

# Drop rules to prevent them from entering the logs
/sbin/iptables -A INPUT -p tcp -m multiport --dports 135,137,138 -j DROP
/sbin/iptables -A INPUT -p udp -m multiport --dports 135,137,138 -j DROP
/sbin/iptables -A INPUT -p all -d 255.255.255.255 -j DROP

# Log dropped traffic
/sbin/iptables -A INPUT -j LOG -m limit --limit 10/m --log-level 4 --log-prefix "Dropped Traffic: "

# Set default policies for INPUT, FORWARD and OUTPUT chains
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT

# Save settings
/sbin/service iptables save

# List rules
/sbin/iptables -L -v
Другие вопросы по тегам