詳解IPTABLES

詳解IPTABLES

Iptables 是Linux 內核集成的 IP 信息包過濾系統。若是Linux 系統鏈接到因特網或 LAN、服務器或鏈接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置。html

IPTABLES的簡單介紹

防火牆在作信息包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專用的信息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在咱們所謂的鏈(chain)中。而netfilter/iptables IP 信息包過濾系統是一款功能強大的工具,可用於添加、編輯和移除規則。 雖然 netfilter/iptables IP 信息包過濾系統被稱爲單個實體,但它實際上由兩個組件netfilter 和 iptables 組成。服務器

  • netfilter 組件也稱爲內核空間(kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。
  • iptables 組件是一種工具,也稱爲用戶空間(userspace),是用來管理netfilter的,它使得配置防火牆變得簡單。

IPTABLES的規則:

Iptables的規則鏈分爲三種:輸入、轉發和輸出。併發

  1. 輸入——這條鏈用來過濾目的地址是本機的鏈接。例如,若是一個用戶試圖使用SSH登錄到你的PC服務器,iptables會首先匹配其IP地址和端口到iptables的輸入鏈規則。
  2. 轉發——這條鏈用來過濾目的地址和源地址都不是本機的鏈接。例如,路由器收到的絕大數數據均須要轉發給其它主機。若是你的系統沒有開啓相似於路由器的功能,如NATing,你就不須要使用這條鏈。
  3. 輸出——這條鏈用來過濾源地址是本機的鏈接。例如,當你嘗試ping www.baidu.com時,iptables會檢查輸出鏈中與ping和baidu.com相關的規則,而後決定容許仍是拒絕你的鏈接請求。

規則實戰:

  1. 清空全部規則:tcp

    iptables -F
  2. 添加22端口能夠正常鏈接:工具

    iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
     iptables -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
  3. 設置默認規則: 通常設置默認規則有兩種思想:一種是都接受,而後重點拒絕;另外一種是都拒絕,而後重點放行。spa

    iptables -P INPUT DROP
     iptables -P OUTPUT ACCEPT
     iptables -P FORWARD DROP
  4. 開放具體的端口:代理

    iptables -A INPUT -p tcp -m tcp --dport 3304 -j ACCEPT
     iptables -A OUTPUT -p tcp -m tcp --sport 3304 -j ACCEPT(若是OUTPUT默認是DROP)
    
     iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
     iptables -A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT (若是OUTPUT默認是DROP,下面的同樣)
  5. 支持ping:rest

    iptables -A INPUT -p icmp -j ACCEPT 
     iptables -A OUTPUT -p icmp -j ACCEPT

    禁止pingcode

    iptables -A INPUT -p icmp -j REJECT 
     iptables -A OUTPUT -p icmp -j REJECT
  6. 具體到IP地址: 只接受192.168.1.55的包:htm

    iptables -A INPUT -s 192.168.1.55 -p icmp -j ACCEPT (默認是DROP)
     iptables -A OUTPUT -s 192.168.1.23 -p icmp -j ACCEPT
  7. IPTABLES規則的相關操做:

    iptables -F :清空規則
     iptables -X :刪除用戶自定義的規則
     iptables -L :查看規則
     iptables -L -n :以數字的形式顯示規則
     iptables -L --line-numbers :查看規則的編號(適用於刪除規則)
     iptables -D chain num :刪除編號是NUM的規則
  8. 擴展規則:

多端口:

iptables -I INPUT -s 192.168.1.0/24 -d 192.168.1.23 -p tcp -m multiport --dport 22,80,3306 -j ACCEPT
iptables -I OUTPUT -d 192.168.1.0/24 -s 192.168.1.23 -p tcp -m multiport --sport 22,80,3306 -j ACCEPT

iprange擴展:

iptables -I OUTPUT -s 192.168.1.23 -p tcp -m multiport --sport 21,22,80 -m iprange --dst-range 192.168.1.10-192.168.1.20 -j ACCEPT
iptables -I INPUT -d 192.168.1.23 -p tcp -m multiport --dport 21,22,80 -m iprange --src-range 192.168.1.10-192.168.1.20 -j ACCEPT

string擴展:檢查報文中出現的字符串。

--algo {bm|kmp}
--string patterm

iptables -I OUTPUT -m string --algo bm --string 'movie' -j REJECT

time擴展:根據報文對時間範圍進行匹配。

--datestart --datestop
--timestart --timestop
--monthdays --weekdays

iptables -I INPUT -d 192.168.1.23 -p tcp --dport 80 -m time --timestart 23:00 --timestop 6:00 -j REJECT

connlimit擴展:根據客戶端IP作併發鏈接數量匹配

--connlimit-upto n :鏈接數量小於n
--connlimit-above n :鏈接數量大於n
--connlimit-saddr :源地址轉換
--connlimit-daddr :目標地址轉換

iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT

limit擴展:基於收發報文速率作檢查

--limit rate/[second|minute|hour|day]
--limit-burst number 

iptables -A INPUT -d 192.168.1.23 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit  10/minute -j ACCEPT
防止DOS攻擊:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limite-burst 100 -j ACCEPT

state擴展:根據鏈接跟蹤機制檢查鏈接的狀態。

查看鏈接追蹤功能所能容納的最大鏈接個數:/proc/sys/net/nf_conntrack_max 
查看追蹤到的鏈接:/proc/net/nf_conntrack
不一樣協議或者鏈接類型的時長:/proc/sys/net/netfilter/..

NEW:新發出的請求,鏈接追蹤模板中不存在相關的信息條目,所以識別爲第一次發出來的請求
ESTABLISHED:NEW狀態以後,鏈接追蹤模板中爲其創建的條目失效以前期間內所進行的通訊的狀態
RELATED: 相關的鏈接,如:FTP協議命令鏈接與數理鏈接之間的關係
INVALIED:沒法識別的鏈接

iptables -I INPUT -d 192.168.1.23 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -d 192.168.1.23 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT 2 -d 192.168.1.23 -p tcp -m multiport --dport 22,80 -m state --state NEW -j ACCEPT

問題:如何開放被動模式的FTP服務?
1) 裝載FTP追蹤時專用的模塊
    modprobe nf_conntrack_ftp
2) 放行請求報文
    命令鏈接:NEW , ESTABLISHED
    數據鏈接:RELATED , ESTABLISHED
    iptables -A INPUT -d local_IP -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT -d loacl_IP -p tcp -m state --state RELATED,ESTABISHED -j ACCEPT
3) 放行響應報文:ESTABLISHED
    iptables -A OUTPUT -s local_IP -p tcp -m state --state ESTABLISHED -j ACCEPT
4)保存及重載規則:
    iptables-save > file 保存規則至指定規則
    iptables-restore < file 指定文件中重載規則

轉發規則:

開啓iptables forward轉發功能
    echo 1 >/proc/sys/net/ipv4/ip_forward
    
nat: SNAT:只修改請求報文的源地址
     DNAT:只修改請求報文的目標地址 內--》外 外--》內

nat表:PREROUTING(DNAT)-->OUTPUT-->POSTROUTING(SNAT)
將本機的8080端口轉發至其餘主機,主機IP:192.168.1.12,目標主機IP和端口:192.168.1.13:8088,規則以下:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.13:8088
iptables -t nat -A POSTROUTNG -p tcp --dport 8088 -j SNAT --to-source 192.168.1.12

原文出處:https://www.cnblogs.com/dianel/p/10315197.html

相關文章
相關標籤/搜索