我使用的是由 ISP 的 IP 块集定义的动态 IP。我想打开 ssh、ftp、MySql 等到那组块。我不想为每个规则指定所有条目。有没有办法将所有允许的地址设置为一个组,然后将其分配给我想要访问的每个端口?
答案1
您提到了 CentOS,但没有提到具体版本。
操作系统6
在 CentOS 6 中,您的防火墙可能如下所示/etc/sysconfig/iptables
:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:INTERNAL - [0:0]
:INTERNAL_allow - [0:0]
:LOGGING - [0:0]
#LOGGING Chain
-A LOGGING -p tcp -m limit --limit 2/min -j LOG --log-prefix "iptables DROP: " --log-level 4
#INPUT Chain
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INTERNAL
-A INPUT -j LOGGING
-A INPUT -j REJECT --reject-with icmp-host-prohibited
#INTERNAL Chain to define networks (only networks that match continue to INTERNAL_allow)
-A INTERNAL -s 192.168.10.0/24 -g INTERNAL_allow
-A INTERNAL -s 10.9.8.0/24 -g INTERNAL_allow
#INTERNAL_allow Chain to define allowed ports on those networks
-A INTERNAL_allow -p icmp -j ACCEPT
#open a single port using tcp module
-A INTERNAL_allow -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
#open multiple ports using multiport module
-A INTERNAL_allow -p tcp -m state --state NEW -m multiport --dport 21,3306 -j ACCEPT
也可以看看:
man iptables
formultiport
和tcp
模块以及-g
参数。
操作系统7
您可能可以在firewalld 中使用区域。我对此不太有经验。
答案2
您可以创建一组IPs
使用ipset
,然后可以对其添加任何限制。
例如创建一个ipset
:
ipset -N myset hash:ip,port
将ip
with添加port
到集合中:
ipset add myset x.x.x.0/24,80-82
ipset add myset x.x.x.x,udp:53
ipset add myset y.y.y.y,vrrp:0
然后要在该集上创建规则,您可以将其iptables
用于防火墙:
iptables -A INPUT -m set --set myset dst -j ACCEPT
上面的命令ipset
创建一个具有两个地址(x.x.x.x
和y.y.y.y
)的新集合(iphash 类型的 myset)。
然后,该iptables
命令使用匹配规范引用该集合-m set --set myset dst
,这意味着“匹配其目标标头与名为 myset 的集合匹配(即包含在其中)的数据包”。
该标志dst
表示“目的地”匹配。该标志src
将在“源”上匹配,并且标志 src,dst 将在源和目标上匹配。