iptables不完全手冊

iptables簡稱爲包過濾型防火牆一般分爲2種:
    1,主機防火牆:主機防火牆是用來防止本主機內的應用服務被攻擊所需要保護的防火牆
    2,網絡防火牆:做爲想路由功能的防火牆凡是進過此服務器的數據包都要進行規則匹配

iptables實現:

  1、iptables,這個只是方便用戶編寫各類規則交由netfilter處理執行。
   2、一部分是基於TCP/IP協議棧的netfilter安全框架,通過“數據報文進入主機,內核處理完成,交由用戶空間處理”,數據報文的處理路徑設置了各種規則鏈,根據規則鏈的順序或者特點,又在規則鏈中增加功能表,通過在不同的功能表中設置具體的規則,來達到安全訪問。
  我們應該知道主機之間的通信是數據流,是參考OSI七層模型來包裝用戶的數據,OSI七層包括了應用層,表示層,會話層,傳輸層,網絡層,數據鏈路層,物理層,每一層都有其自己的功能,


   34.png


   netfilter就是通過識別每一層功能中的數據是否符合我們定義的規則,從而達到監控,修改,丟棄,轉發的目錄。

iptables的架構由功能和鏈組成:     功能:         filter:過濾,防火牆;         nat:地址轉換nerwork address translation         mangle:拆解報文,做出修改,封裝報文         raw:關閉nat表示啓用的連接追蹤功能(此功能非常消耗CPU)     每一種功能都會內置幾種鏈:         PREROUTING-->路由前         INPUT-->輸入一段         FORWARD-->由本機轉發         OUTPUT-->本機內部發出         POSTROUTING-->在第二次路由決策
在iptables上每一種功能的實現機制都是基於上訴的幾種鏈接:     流入:PREROUTING-->INPUT     流出:OUTPUT-->POSTROUTING     轉發:PEROUTING-->FORWARD-->POSTROUTING 在功能上每一種功能都會內置幾種連接     filter(過濾):INPUT,FORWARD,OUTPUT     nat(地址轉換):PERROUTING(DNAT),OUTPUT,POSTROUTING(SNAT)     mangle(拆解報文,做出修改,封裝報文):PEROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING     raw(關閉nat表示啓用的連接追蹤功能):PREROUTING,OUTPUT 功能優先級:raw>mangle>nat>filter 規則:     組成部分:報文的匹配條件,匹配到之後處理動作         匹配條件:根據協議報文特徵指定匹配條件             基本匹配條件             擴展匹配條件         處理動作:             內建處理機制             自定義處理機制 iptables:規則管理工具     添加,修改,刪除,顯示等 iptables命令:查看linux上man配置手冊裏面會有詳細的解釋     iptables -t (按照自己的修改查看自己需要找的幾個表默認爲filter)     例如:     [root@localhost ~]# iptables -t mangle -L -n     Chain PREROUTING (policy ACCEPT)     target     prot opt source               destination              Chain INPUT (policy ACCEPT)     target     prot opt source               destination              Chain FORWARD (policy ACCEPT)     target     prot opt source               destination              Chain OUTPUT (policy ACCEPT)     target     prot opt source               destination              Chain POSTROUTING (policy ACCEPT)     target     prot opt source               destination 上訴爲查看iptables中mangle規則          iptables命令分爲2種鏈管理,規則管理     鏈管理:         -F:flush,清空規則鏈,省略鏈表示清空指定表上所有的鏈;         -N:new,創建新的自定義規則鏈;         [root@localhost ~]# iptables -t filter -N IN_public         [root@localhost ~]# iptables -L -n         Chain INPUT (policy ACCEPT)         target     prot opt source               destination                  Chain FORWARD (policy ACCEPT)         target     prot opt source               destination                  Chain OUTPUT (policy ACCEPT)         target     prot opt source               destination                  Chain IN_public (0 references)         target     prot opt source               destination                  -X:drop,刪除用戶自定義的規則鏈,必須是空鏈         [root@localhost ~]# iptables -X IN_public         [root@localhost ~]# iptables -L -n         Chain INPUT (policy ACCEPT)         target     prot opt source               destination                  Chain FORWARD (policy ACCEPT)         target     prot opt source               destination                  Chain OUTPUT (policy ACCEPT)         target     prot opt source               destination                  -Z:zero,置零:置零規則計數器;         -P:policy,爲指定鏈設置默認處理策略;對filter表中的鏈而言,默認策略通常有accept(放行),drop(丟棄),reject(拒絕)         [root@localhost init.d]# iptables -P FORWARD DROP         [root@localhost init.d]# iptables -L -n         Chain INPUT (policy ACCEPT)         target     prot opt source               destination                  Chain FORWARD (policy DROP)         target     prot opt source               destination                  Chain OUTPUT (policy ACCEPT)         target     prot opt source               destination                -E:rename:重命名自定義鏈:引用計數器不爲0的自定義鏈無法改名,也無法刪除;         [root@localhost ~]# iptables -E IN_public hello         [root@localhost ~]# iptables -L -n         Chain INPUT (policy ACCEPT)         target     prot opt source               destination                  Chain FORWARD (policy ACCEPT)         target     prot opt source               destination                  Chain OUTPUT (policy ACCEPT)         target     prot opt source               destination                  Chain hello (0 references)         target     prot opt source               destination          規則管理:         -A:append,將新規則追加於指定鏈的尾部;         -I:insert,將新規則插入至指定鏈的指定位置;         -D:delete,刪除指定鏈上的指定規則;             有兩種指定方式:             (1)指定匹配條件;             (2)指定規則編號;         -R:replace,替換指定鏈上的指定規則:     查看:         -L:list,列出指定鏈上的所有規則;             -n:numberic,以數字格式顯示地址和端口號;             -v:verbose,顯示詳細信息             --line-numbers:顯示規則編號;             -x:exactly,顯示計數器計數結果的精確值;     匹配條件:         基本匹配:             [!]-s,--src,--source IP|Netaddr:檢查報文中源IP地址是否符合此處的指明的地址範圍;             [!]-d,--dst,--destination IP|Netaddr檢查報文中源IP地址是否符合此處指定的地址範圍;             [!]-p,--protocol{tcp,udp,icmp}:檢查報文中的協議,即ip首部中的protocols所標識的協議             -i,--ininterface IFACE:數據報文的流入接口:僅能用於PREROUTING, INPUT及FORWARD鏈上;             -o, --out-interface IFACE:數據報文的流出接口;僅能用於FORWARD, OUTPUT及POSTROUTING鏈上;     目標:         -j TARGET:jum至指定的TARGET             ACCEPT:接受             DROP:丟棄             REJECT:拒絕             RETURN:返回調用鏈             REDIRECT:端口重定向             LOG:記錄日誌             MARK:做防火牆標記             DNAT:目標地址轉換             SNAT:源地址轉換             MASQUERADE:地址僞裝             自定義鏈:由自定義鏈上的規則進行匹配檢查         例如:放行本機TCP協議         [root@localhost ~]# iptables -t filter -A INPUT -d 172.16.0.46 -p tcp -j ACCEPT         [root@localhost ~]# iptables -L -n         Chain INPUT (policy ACCEPT)         target     prot opt source               destination                  ACCEPT     tcp  --  0.0.0.0/0            172.16.0.46                  Chain FORWARD (policy ACCEPT)         target     prot opt source               destination                  Chain OUTPUT (policy ACCEPT)         target     prot opt source               destination                  [root@localhost ~]# iptables -t filter -A OUTPUT -s 172.16.0.46 -p tcp -j ACCEPT         [root@localhost ~]# iptables -L -n -v         Chain INPUT (policy ACCEPT 6 packets, 468 bytes)          pkts bytes target     prot opt in     out     source               destination                    203 14998 ACCEPT     tcp  --  *      *       0.0.0.0/0            172.16.0.46                  Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)          pkts bytes target     prot opt in     out     source               destination                  Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)          pkts bytes target     prot opt in     out     source               destination                     30  3168 ACCEPT     tcp  --  *      *       172.16.0.46          0.0.0.0/0      如果我將INPUT和OUTPUT關閉之後任然可以進行訪問     [root@localhost ~]# iptables -P INPUT DROP     [root@localhost ~]# iptables -P OUTPUT DROP     [root@localhost ~]# iptables -P FORWARD DROP     [root@localhost ~]# iptables -L -n     Chain INPUT (policy DROP)     target     prot opt source               destination              ACCEPT     tcp  --  0.0.0.0/0            172.16.0.46              Chain FORWARD (policy DROP)     target     prot opt source               destination              Chain OUTPUT (policy DROP)     target     prot opt source               destination              ACCEPT     tcp  --  172.16.0.46          0.0.0.0/0            擴展匹配:-m指明擴展匹配(指明擴展名)--spec_options     例如:-m tcp --dport 22     隱式擴展:對-p protocol指明的協議進行擴展,可省略-m選項;         -p tcp             --dport PORT[-PORT]:目標端口,可以是單個端口或連續多個端口             --sport PORT[-PORT]:             --tcp-flages:         -p udp         -p icmp             --icmp-type         例如本地可以ping通任意地址,而其他主機無法ping通         ]# iptables -A INPUT -d 172.16.0.46 -p icmp --icmp-type 0 -j ACCEPT         ]# iptables -A OUTPUT -s 172.16.0.46 -p icmp --icmp-type 8 -j ACCEPT     !!!!!!這裏需要提醒一下在放行http80端口的時候如果php的安裝是基於fpm模式編譯安裝的話需要對本地的9000端口做雙向的認證否則http無法調用php的fpm功能:     root@localhost etc]# iptables -L -n     Chain INPUT (policy DROP)     target     prot opt source               destination              ACCEPT     tcp  --  0.0.0.0/0            172.16.0.46         tcp dpt:22      ACCEPT     tcp  --  0.0.0.0/0            172.16.0.46         tcp dpt:80      ACCEPT     icmp --  0.0.0.0/0            172.16.0.46         icmp type 0      ACCEPT     tcp  --  127.0.0.1            0.0.0.0/0           tcp spt:9000      ACCEPT     tcp  --  0.0.0.0/0            127.0.0.1           tcp dpt:9000      Chain FORWARD (policy ACCEPT)     target     prot opt source               destination              Chain OUTPUT (policy DROP)     target     prot opt source               destination              ACCEPT     tcp  --  172.16.0.46          0.0.0.0/0           tcp spt:22      ACCEPT     tcp  --  172.16.0.46          0.0.0.0/0           tcp spt:80      ACCEPT     icmp --  172.16.0.46          0.0.0.0/0           icmp type 8      ACCEPT     tcp  --  127.0.0.1            0.0.0.0/0           tcp spt:9000      ACCEPT     tcp  --  0.0.0.0/0            127.0.0.1           tcp dpt:9000      顯示擴展:必須使用-m選項指定使用的擴展         CentOS 6: man iptables     CentOS 7: man iptables-extensions     1,multiport擴展         以離散方式定義多端口匹配:最多匹配15個端口;         ]# iptables -I INPUT -d 172.16.0.46 -p tcp -m multiport --dport 22,80 -j ACCEPT         ]# iptables -I OUTPUT -s 172.16.0.46 -p tcp -m multiport --sport 22,80 -j ACCEPT     2,iprange擴展         指明連續的(但一般是不能擴展爲整個網絡)ip地址範圍有效:         [!] --src-range from[-to]:指明連續的源IP地址範圍;         [!] --dst-range from[-to]:指明連續的目標IP地址範圍;         ~]# iptables -I INPUT -d 172.16.100.9 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 172.16.100.1-172.16.100.120 -j ACCEPT         ~]# iptables -I OUTPUT -s 172.16.100.9 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 172.16.100.1-172.16.100.120 -j ACCEPT        3,string擴展         檢查報文中出現的字符串;         ~]# iptables -I OUTPUT -m string --algo bm --string 'movie' -j REJECT     4、time擴展         根據報文到達的時間與指定的時間範圍進行匹配;         --datestart          --datestop         --timestart         --timestop         --monthdays         --weekdays     5,state擴展         根據連接追蹤機制檢查連接間的狀態         調整連接追蹤功能所能夠容納的最大連接數量:         /proc/sys/net/nf_conntrack_max         已經追蹤到並記錄下的連接:         /proc/net/nf_conntrack         不同協議或連接類型追的時長:         /proc/sys/net/netfilter/         可追蹤的連接狀態:             NEW:新發出的請求;連接追蹤模板中不存此連接相關的信息條目,因此,將其識別爲第一次發出的請求;             ESTABLISHED:NEW狀態之後,連接追蹤模板中爲其建立的條目失效之前期間內所進行的通信的狀態;             RELATED:相關的連接;如ftp協議的命令連接與數據連接之間的關係;             INVALIED:無法識別的連接; iptables放行被動模式下的ftp服務:     (1)裝載ftp追蹤時專用的模塊在     [root@localhost netfilter]# pwd     /lib/modules/2.6.32-358.el6.x86_64/kernel/net/netfilter     (1) 裝載ftp追蹤時的專用的模塊:         # modprobe nf_conntrack_ftp     (2) 放行請求報文:         命令連接:NEW, ESTABLISHED         數據連接:RELATED, ESTABLISHED         # iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT         # iptables -A INPUT -d LocalIP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT     (3) 放行響應報文:         ESTABLISEHD         # iptables -A OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT iptables的nat的功能     如需要開啓linux上的路由功能做爲路由器需要開啓linux的核心轉發功能     [root@ns1 ~]# sysctl -w net.ipv4.ip_forward=1     net.ipv4.ip_forward = 1     [root@ns1 ~]# cat /proc/sys/net/ipv4/ip_forward      1     iptables:     nat:網絡地址轉換,網絡層以及傳輸層實現     proxy:代理,應用層實現     nat:         SNAT:至修改請求報文的源地址;         DNAT:至修改請求報文的目標地址;         MASQUERADE:基於撥號的模式進行僞裝     nat表:         PREROUTING:DNAT         OUTPUT         POSTROUTING:SNAT     ]# iptables -t nat -A POSTROUTING -s 192.168.56.0/24 ! -d 192.168.56.0/24 -j SNAT --to-source 172.16.0.53 tcp_wrapper:tcp包裝器     對於基於TCP協議開發並且基於TCP協議提供服務應用程序,提供的一層訪問控制工具:     基於庫調用其功能:         庫名稱:libwrap     判斷服務是否能夠由tcp_wrapper進行訪問控制:         (1)動態編譯:ldd命令:         (2)靜態編譯:strings命令查看應用程序文件,其結果中出現下述文件:         hosts.allow         hosts.deny     在配置文件在爲各服務分別定義訪問控制規則實現訪問控制:     /etc/hosts.allow     /etc/hosts/deny     配置文件語法:     daemon_list:client_list [:options]     daemon_list:         應用程序的文件名稱。而非服務名:         應用程序文件名稱列表。彼此間使用逗號分割:             例如:sshd,vsftpd                 ALL:表示所有服務:     client_list:         IP地址:         主機名:         網絡地址:必須使用完整格式的掩碼,不使用前綴格式掩碼,所以類似於172.16.0.0/16不合法:         簡短格式的網絡地址:例如:172.16.表示172.16.0.0/255.255.0.0;         ALL:所有主機:         KNOWN:所有解析的主機         UNKNOWN:所有解析不到的主機         PARANOID:主機名的正反解不匹配     例如:vsftpd服務不允許172.16.100.1訪問:     EXCEOT:除了         host.allow         vsftpd:      [:options]     deny: 拒絕,主要用於hosts.allow文件中     allow:允許,用於hosts.deny文件,實現allow的功能     spawn: 啓動額外應用程序:     vsftpd: ALL :spawn /bin/echo `date` login attempt from %c to %s, %d >> /var/log/vsftpd.deny.log     %c: client ip     %s: server ip     %d: daemon name
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章