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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章