通过 iptables 允许特定端口

通过 iptables 允许特定端口

我是 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 ACCEPTiptables -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

相关内容