我是 iptables 新手。我创建了一个重置 (reset.sh) iptables 的脚本,其他脚本 (ip-chains.sh) 创建类似输入输出链的链。在底部的同一个 scipr (ip-chains.sh) 中,我创建了一条规则,只是为了测试允许我用于 FTP 的传入和传出端口 2121。
问题是当我运行重置脚本时我可以访问 FTP 服务器,但当我运行 ip-chains.sh 脚本时我不能。我很困惑,因为我在同一个脚本文件中有允许端口 2121 上的流量的规则。
我使用 eth1 连接到 FTP 服务器 192.168.1.0,使用 eth2 连接到客户端计算机。这是我的 ip-chains.sh 脚本:
#!/bin/bash
#Flush tables and set policies to drop
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#Create Logging Chain for accepted packets on INPUT CHAIN
iptables -N accept-input
#Rules for accept-input chain
iptables -A accept-input -j LOG --log-prefix "INPUT-ACCEPTED "
iptables -A accept-input -j ACCEPT
#Create Logging Chain for dropped packets on INPUT CHAIN
iptables -N drop-input
#Rules for drop-input chain
iptables -A drop-input -j LOG --log-prefix "INPUT-DROPPED "
iptables -A drop-input -j DROP
#Create Logging Chain for accepted packets on OUTPUT CHAIN
iptables -N accept-output
#Rules for accept-output chain
iptables -A accept-output -j LOG --log-prefix "OUTPUT-ACCEPTED "
iptables -A accept-output -j ACCEPT
#Create Logging Chain for dropped packets on OUTPUT CHAIN
iptables -N drop-output
#Rules for drop-output chain
iptables -A drop-output -j LOG --log-prefix "OUTPUT-DROPPED "
iptables -A drop-output -j ACCEPT
#Allow port 2121
iptables -A INPUT -i eth1 -p tcp -s 0/0 --dport 2121 -m state --state NEW,ESTABLISHED,RELATED -j accept-input
iptables -A OUTPUT -o eth1 -p tcp -d 0/0 --sport 2121 -m state --state ESTABLISHED,RELATED -j accept-input
iptables -A INPUT -i eth2 -p tcp -s 0/0 --dport 2121 -m state --state NEW,ESTABLISHED,RELATED -j accept-input
iptables -A OUTPUT -o eth2 -p tcp -d 0/0 --sport 2121 -m state --state ESTABLISHED,RELATED -j accept-input
#Log all DROPPED traffic
iptables -A INPUT -j drop-input
iptables -A OUTPUT -j drop-output
iptables -L -n
答案1
小心,当您刷新规则时,iptables -F
您会刷新所有规则,但不会刷新您的策略!因此,如果您有的话,policy DROP
您很容易被锁定在系统之外!
通常,将链的最后policy ACCEPT
一条规则设置为更安全。DROP
或者,当您远程工作时,您的防火墙每五到十分钟设置一个cron
作业;这样您在任何情况下都可以访问您的系统。policy ACCEPT
iptables -F
在您的脚本中iptables -p FORWARD DROP
,您没有从eth1
到 的规则eth2
,反之亦然。您必须iptables -p FORWARD ACCEPT
在前向链中设置或添加一些规则来解决您的问题,例如:
iptables -A FORWARD -p tcp -i eth1 -o eth2 -s 2121 -d 2121 -j ACCEPT;
iptables -A FORWARD -p tcp -i eth2 -o eth1 -s 2121 -d 2121 -j ACCEPT;
答案2
使用 -v 查看数据包到达的位置...
iptables --list -n -v