![我是否有任何不需要的 iptable 规则?](https://linux22.com/image/565138/%E6%88%91%E6%98%AF%E5%90%A6%E6%9C%89%E4%BB%BB%E4%BD%95%E4%B8%8D%E9%9C%80%E8%A6%81%E7%9A%84%20iptable%20%E8%A7%84%E5%88%99%EF%BC%9F.png)
有人能告诉我,我是否有不需要的规则吗?
我尤其不确定
$IPT -t nat -P PREROUTING ACCEPT # is this required?
$IPT -t nat -P INPUT ACCEPT # is this required?
$IPT -t nat -P OUTPUT ACCEPT # is this required?
需要嗎?
IPT='/sbin/iptables'
LAN_IP_NET="192.168.0.1/24"
WAN_IP="x.x.x.x"
LAN_NET="192.168.245.0/24"
CLIENT_NET1="192.168.245.128/25" # 192.168.245.128 - 192.168.245.25
CLIENT_NET2="192.168.245.64/26" # 192.168.245.64 - 192.168.245.12
CLIENT_NET3="192.168.245.32/27" # 192.168.245.32 - 192.168.245.63
CLIENT_NET4="192.168.245.16/28" # 192.168.245.16 - 192.168.245.31
CLIENT_NET5="192.168.245.8/29" # 192.168.245.8 - 192.168.245.15
LAN_NIC="eth1"
WAN_NIC="eth0"
# Flush everything
$IPT -F
$IPT -F -t nat
$IPT -X
$IPT -X -t nat
# Enable packet forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# Allow all outgoing
$IPT -P OUTPUT ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# Filter rules
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow all traffic from LAN_NET on LAN_NIC
$IPT -A INPUT -i $LAN_NIC -s $LAN_NET -j ACCEPT
# Allow some services from the outside
$IPT -A INPUT -i $WAN_NIC -p icmp --icmp-type echo-request -j ACCEPT
$IPT -A INPUT -i $WAN_NIC -p tcp --dport ssh -j ACCEPT
$IPT -A INPUT -i $WAN_NIC -p tcp --dport www -j ACCEPT
$IPT -A INPUT -j REJECT
# Masquerade 192.168.245.8 - 192.168.245.255
$IPT -t nat -P PREROUTING ACCEPT # is this required?
$IPT -t nat -P INPUT ACCEPT # is this required?
$IPT -t nat -P OUTPUT ACCEPT # is this required?
$IPT -t nat -A POSTROUTING -s $CLIENT_NET1 -o $WAN_NIC -j MASQUERADE
$IPT -t nat -A POSTROUTING -s $CLIENT_NET2 -o $WAN_NIC -j MASQUERADE
$IPT -t nat -A POSTROUTING -s $CLIENT_NET3 -o $WAN_NIC -j MASQUERADE
$IPT -t nat -A POSTROUTING -s $CLIENT_NET4 -o $WAN_NIC -j MASQUERADE
$IPT -t nat -A POSTROUTING -s $CLIENT_NET5 -o $WAN_NIC -j MASQUERADE
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Forward 192.168.245.8 - 192.168.245.255. The first 7 IPs are reserved for failover etc
$IPT -A FORWARD -i $LAN_NIC -o $WAN_NIC -s $CLIENT_NET1 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $LAN_NIC -o $WAN_NIC -s $CLIENT_NET2 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $LAN_NIC -o $WAN_NIC -s $CLIENT_NET3 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $LAN_NIC -o $WAN_NIC -s $CLIENT_NET4 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $LAN_NIC -o $WAN_NIC -s $CLIENT_NET5 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -j REJECT
答案1
策略规则与其他规则不同,所有内置链都有策略。它们是链的隐式部分,指定如果链中没有规则与数据包匹配时要做什么。将策略设置为已知值是一种很好的做法。
您可以尝试删除规则,然后查看重新启动后默认策略是否为“接受”。只要默认策略保持“接受”,这些命令就是多余的。但是,如果有人更改了策略或默认策略发生更改,您的防火墙脚本将不再按您的意愿执行。即使您似乎不需要这些规则,也要保留它们。
对于策略,最好的选择是将其设置为您希望对不匹配的数据包执行的任何操作。对于默认链,DROP 或 REJECT 可能比 ACCEPT 更好。对于 NAT 链,ACCEPT 往往是一种很好的策略。
答案2
-P 规则是“策略”规则。即:如果所有规则均不匹配,则采用默认策略。对于您而言,它们不会执行任何操作,因为最后一个“like”无论如何都是拒绝所有,您可以使用 -P DROP 并放弃该拒绝行,但是我使用防火墙的方式与您当前的方式相同,因为如果您使用 -P 删除规则,然后使用 -F 远程刷新表,则您仍然有删除策略,它会切断您的连接。