我想阻止除德国 IP 之外的所有 IP(CIDR 0.0.0.0/0)用于 SSH、FTP 和 SMTP 端口。因此,这些端口的默认策略应为“DROP”。我有一个所有德国 IP CIDR 范围的列表,这些范围应位于“ACCEPT”列表中。
我不明白 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
丹尼尔,
您可能想要类似这样的内容。这只是直接从我的 Red Hat 上的 /etc/sysconfig/iptables 文件中剪切出来的。
*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
如您所见,输入的默认策略是丢弃。因此您不必执行任何特定的丢弃规则。您只需说出您想要允许的内容。在我的示例中,我展示了您可以为 1 条规则执行多个协议或仅为 1 条规则执行单个协议的情况。
编辑:下面是一个您可以用来创建 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