iptables之state扩展与开启被动模式ftp

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iptables之state扩展与开启被动模式ftp相关的知识,希望对你有一定的参考价值。

1. state扩展

2. 如何开放被动模式的ftp服务?

3. 防火墙规则的检查次序

4. 保存与加载预存的规则


1. state扩展

??该扩展至关重要,正是由于state才实现了连接追踪机制。
??连接追踪机制:每一台客户端与本地主机进行通讯时(有可能是通过本地主机去访问其他主机),本地主机都会在内存的一段空间中存储源IP、源端口、目标IP、目标端口的信息(每条记录都有生存时间)。当客户端下次再与本地主机进行通讯时,就可以通过查找之前存储的信息来追踪该客户端是否与本地主机通讯过。
??注意:开启连接追踪功能,需要占用内存的空间,影响系统性能。且前端负载均衡服务器若开启此功能,由于连接追踪模板空间有限制,空间满了之后,会导致后续的连接请求无法得到响应。

连接追踪机制已经追踪到并记录下来的连接保存在/proc/net/nf_conntrack文件中

ipv4     2 tcp      6 299 ESTABLISHED src=192.168.25.1 dst=192.168.25.128 sport=52832 dport=22 src=192.168.25.128 dst=192.168.25.1 sport=22 dport=52832 [ASSURED] mark=0 zone=0 use=2

以上内容的部分解释
ipv4:基于哪种底层协议
tcp:上层的协议
src sport:源地址 源端口
dst dport:目标地址,目标端口
ESTABLISHED:目前状态

  连接追踪功能所能记录的最大连接数量通过该文件定义(可调整):

/proc/sys/net/nf_conntrack_max

  调整连接追踪机制所能记录的最大连接数:

sysctl -w net.nf_conntrack_max=300000
echo 300000 > /proc/sys/net/nf_conntrack_max

  conntrack所能追踪的连接数量最大值取决于/proc/sys/net/nf_conntrack_max的设定。已经追踪到并记录下来的连接位于/proc/net/nf_conntrack文件中,超时的连接将会被删除。当/proc/net/nf_conntrack满时,后续的新连接可能会超时。
解决办法(通常采用第一种方法):
??1. 加大nf_conntrack_max的值
??2. 降低nf_contrack条目的超时时长
  不同协议的连接追踪时长记录在/proc/sys/net/netfilter/目录下的各文件中conntrack的子集,用于对报文的状态做连接追踪;

The "state" extension is a subset of the "conntrack" module. "state" allows access to the connection tracking state for this packet.

  根据”连接追踪机制“去检查连接的状态;

??conntrack机制:追踪本机上的请求和响应之间的关系;状态有如下几种:
??NEW:新发出请求;连接追踪模板中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求;与协议无关。
??ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态;
?? RELATED:相关联的连接;如ftp协议中的数据连接与命令连接之间的关系;
?? INVALID:无法识别的连接;
?? UNTRACKED:未进行追踪的连接;

例:

~] # iptables -A INPUT -s 172.18.0.0/16 -d 172.18.0.100 -p tcp -m multiport --dport 22,23,80 -m state --state NEW,ESTABLISHED -j ACCEPT
~] # iptables -A OUTPUT -d 172.18.0.0/16 -s 172.18.0.100 -p tcp -m multiport --sport 22,23,80 -m state --state ESTABLISHED -j ACCEPT
~] # iptables -A INPUT -d 172.18.100.6 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
~] # iptables -A OUTPUT -s 172.18.100.6 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT

以上规则可合并为:

~] # iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
~] # iptables -A INPUT -d 172.18.100.6 -p tcp -m multiport --dports 22,23,80 -m state --state NEW -j ACCEPT
~] # iptables -A INPUT -d 172.18.100.6 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT
~] # iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

开启被动模式ftp

~] # modprobe nf_conntrack_ftp   #内核加载nf_conntrack_ftp模块
~] # systemctl start vsftpd.service     #开启vsftpd服务
~] # iptables -A INPUT-d 172.18.100.6 -m state --state ESTABLISTED,RELATED -j ACCEPT    
~] # iptables -A INPUT -d 172.18.100.6 -p tcp -m multiport --dports 21,22,23,80 -m state --state NEW  -j ACCEPT
~] # iptables -A OUTPUT -s 172.18.100.6 -m state --state ESTABLISHED -j ACCEPT

2. 如何开放被动模式的ftp服务?

(1) 装载ftp连接追踪的专用模块:

~]# modproble  nf_conntrack_ftp

(2) 放行命令连接(假设Server地址为172.16.100.67):

~]# iptables -A INPUT -d 172.16.100.67 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
~]# iptables -A OUTPUT -s 172.16.100.67 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT

(3) 放行数据连接(假设Server地址为172.16.100.67):

~]# iptables -A INPUT -d 172.16.100.67 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
~]# iptables -I OUTPUT -s 172.16.100.67 -m state --state ESTABLISHED -j ACCEPT

3. 防火墙规则的检查次序

规则在链上的次序即为其检查时的生效次序,因此其优化使用有一定法则

  1. 同类规则(访问同一应用),匹配范围小的放前面。用于特殊处理
  2. 不同类的规则(访问不同应用),匹配范围大的放前面。
  3. 应该将那些可由一条规则描述的多个规则合并为一条规则。(规则越少,检查的次数越少)。
  4. 要设置默认策略
    规则的有效期限
    ??iptables命令添加的规则,手动删除前,其生效期限为kernel的生命周期

    4. 保存与加载预存的规则

    保存规则:
      CentOS 6:

#方式一:
~]# service iptables save      
#方式二:
~]# iptables-save > /etc/sysconfig/iptables  
#该目录为默认目录,也可以自定义保存路径
~]# iptables-save > /PATH/TO/SOME_RULE_FILE

  CentOS 7:

~]# iptables -S > /PATH/TO/SOME_RULE_FILE
~]# iptables-save > /PATH/TO/SOME_RULE_FILE

从文件中加载预存的规则:
  以下命令会自动从/etc/sysconfig/iptables文件中重载规则
  通用方法:

~]# iptables-restore < /PATH/FROM/SOME_RULE_FILE

  CentOS 6专用命令

service iptables restart

自动生效规则文件中的规则:

  1. 把iptables命令放在脚本文件中,让脚本文件开机自动运行。
      把脚本放在/etc/rc.d/rc.local中即可
  2. 用规则文件保存规则,开机自动运行重载命令
      在/etc/rc.d/rc.local中
      iptables-restore < /PATH/FROM/SOME_RULE_FILE

以上是关于iptables之state扩展与开启被动模式ftp的主要内容,如果未能解决你的问题,请参考以下文章

iptables详解:iptables扩展模块之state扩展

Linux笔记-ftp主动和被动模式下iptables的规则配置

iptables开放被动模式FTP服务

Iptables 之二扩展模块

iptables详解:iptables扩展之udp扩展与icmp扩展

iptables防火墙