iptables系列之基本應用及顯式擴展

netfiler:Framework, TCP/IP

iptables [-t TABLE] COMMAND CHAIN [num] 匹配條件 -j 處理動作

匹配條件  

    通用匹配

   -s 匹配源地址

   -d 匹配目標地址

   -p 匹配協議的{tcp|udp|icmp}

   -i 指定數據報文流入接口

   -o 指定書庫報文流出接口

擴展匹配

    隱含擴展

    -p tcp

       --sport PORT [-PORT]: 源端口

       --dport PORT [-PORT]: 目標端口

    --tcp-flags mask comp:只檢查mask指定的標誌位,是逗號分隔的標誌位列表;

           comp:此列表中出現的標記爲必須爲1,comp中沒出現,而mask中出現,必須爲0;

    --tcp-flags SYN,FIN,ACK,RST SYN = --syn

    --syn:專門匹配tcp三次握手的第一次

   -p icmp

       --icmp-type

          0:echo-reply  響應報文

          8:echo-request 請求報文

   -p udp

       --sport

       --dport

顯示擴展:使用額外的匹配機制

   -m EXTESTION --spe-opt

   state:狀態擴展

        結合ip_conntrack追蹤會話的狀態

         NEW:新連接請求

        ESTABLISHED:已建立的連接

        INBALID:非法連接

        RELATED:相關聯的

      -m state --state NWE,ESTABLISHED -j ACCEPT

   multiport:離散的多端口擴展

       --source-ports

       --destination-ports

       --ports

      -m multiport --destination-ports 21,22,80 -j ACCEPT   合併端口

    條件取反:!, -s ! 172.16.100.6 除了此IP以外都可以作爲原地址

      -m  iprange       IP的範圍

             --src-range

             --dst-range 

          

     -s ,-d:  172.168.100.6 , 172.168.0.0/16 , 172.16.100.3-172.16.100.100 


iptables -A INPUT -p tcp -m iprange --src-range 172.16.100.3-172.16.100.100  --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT


       

      -m connlimit  連接數限定

         ! --connlimit-above n   加!表示低於n個,

      -m limit

         --limit RATE 每分鐘允許多少次連接請求

         --limit-burst 7  首先一次性允許連接7個 

      -m string

         --algo {bm|kmp}      指定字符串的匹配算法 2選1

         --string "STRING"     匹配的字符串

 

        

每分鐘只接受5次ping請求,首先一次性響應6個請求:

iptables -A INPUT -d 172.16.100.6 -p icmp --icmp-type 8  -m limit --limit 5/minute  --limit-burst 6 -j ACCEPT

iptables -A OUTPUT -s 172.16.100.6 -p icmp --icmp-type 0  -j ACCEPT


例如,每個用戶最多隻允許有2個連接數到本機

iptables -A INPUT -d 172.16.100.6 -p tcp --sport 80 -m connlimit ! --connlimit-above 2 -j ACCEPT  

 

拒絕用戶訪問172.16.100.7上html裏帶hello的網頁,需要放到80端口規則的前面

-------------------------------

iptables -I OUTPUT -s 172.16.100.7 -m string --algo kmp --string "hello" -j REJECT

-------------------------------

 

 

命令:

    管理規則

        -A:附加一條規則,在鏈的尾部追加一條規則

        -I:CHAIN [num]:插入一條規則,插入爲對應CHAIN上的第num條

        -D:CHAIN [num]:刪除指定鏈中第num條規則

        -R:CHAIN [num]:替換指定的規則

    管理鏈

        -F [CHAIN]:flush,清空指定規則鏈,如果省略CHAIN則表示清空對應表中的所有鏈。

        -P CHAIN: 設定指定鏈的默認策略:

        -N:自定義一條新的空鏈

        -X:刪除一個自定義的空鏈

        -Z:置零指定鏈中所有規則的計數器

        -E:重命名一條自定義的鏈

查看類:

        -L:顯示指定表中的所有規則;

        -n:以數字格式顯示主機地址和端口號

        -V:顯示詳細信息

        -VV

        -X:顯示精確值

        --line-numbers:顯示規則號碼


動作 -j(target)

       ACCEPT 允許通過

       DROP   丟棄

       REJECT 拒絕

       DNAT  目標地址轉換

       SNAT  源地址轉換

       REDIRECT   端口重定向

       MASQUERADE地址僞裝

LOG   日誌,規則需要放到相應的前面

       --log-level 日誌級別

       --log-prefix 指定日誌前綴

       --log-tcp-sequence  記錄TCP序列號

       --log-tcp-options  記錄TCP報文選項

       --log-ip-options   記錄IP報文選項

       --log-uid   記錄用戶uid

例如,記錄ICMP日誌

 iptables -I INPUT 4 -d 172.16.100.6 -p icmp --icmp-type 8 -j LOG --log-prefix "--firewall log for icmp--"


MARK 給一個報文設定標記

iptables -t filter -A INPUT -s 192.168.1.0/24 -j DROP



允許172.16.0.0網段的用戶訪問172.16.100.7,的sshd:22/tcp

iptables -t filter -A INPUT -s 172.16.0.0/16  -d 172.16.100.7 -p tcp --dport 22  -j ACCEPT

iptables -t filter -A OUTPUT -s 172.16.100.7  -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT



iptables 不是服務,而是服務腳本;服務腳本的主要作用,在於生效保存的規則



lsmod命了可以檢查iptables的模塊是都裝載



開啓或者停止iptables服務 其實是裝載或移除iptables/netfilter相關內核模塊

iptanles_nat ,  iptables_filter,  iptables_mangle,  iptables_raw,  iptables_nat

ip_conntrack


 

yum install mysql-server vsftpd httpd -y


iptables -P INPUT DROP 修改默認鏈爲丟棄

iptables -P OUTPUT DROP 

iptables -P FORWARD DROP 


iptables -L -n 查看修改後的鏈



允許所有主機訪問本機的web服務

iptables -I  INPUT  -d 192.168.1.51 -p tcp --dport 80 -j ACCEPT

iptables -I  OUTPUT -s 192.168.1.51 -p tcp --sport 80 -j ACCEPT


iptables -A  INPUT -s 127.0.0.1  -d 127.0.0.1  -i l0 -j ACCEPT

iptables -A  OUTPUT -s 127.0.0.1 -d 127.0.0.1  -o lo  -j ACCEPT



允許自己ping任意主機

iptables -A  OUTPUT -s 192.168.1.51   -p icmp  --icmp-type 8 -j ACCEPT 

iptables -A  INPUT -d 192.168.1.51   -p icmp --icmp-type 0 -j ACCEPT


DNS服務器:放行別人到服務器來請求

iptables -A  INPUT -d 192.168.1.51 -p udp --dport 53 -j ACCEPT

iptables -A  OUTPUT -s 192.168.1.51 -p udp --sport 53 -j ACCEPT

iptables -A  INPUT -s 192.168.1.51  -p udp --sport 53 -j ACCEPT

iptables -A  OUTPUT -d 192.168.1.51 -p udp --dport 53 -j ACCEPT




/proc/net/ip_conntrack  記錄連接信息,追蹤連接,此功能可以使服務器根據追蹤信息 只允許響應回覆出站,從而有效的避免反彈性的病毒。

iptstate

     -t 顯示當前所有連接的個數


modprobe ip_conntrack 裝載模塊

modprobe -r ipcontrack移除模塊

[root@localhost ~]# lsmod |grep ip 查看已裝載的模塊

[root@localhost ~]# cat /proc/sys/net/ipv4/ip_conntrack_max  查看ip_conntrack記載的最大條目數


注意:特別繁忙的服務器不要裝載ip_conntrack模塊。否則會出現問題

iptables -t nat -L 查看nat表,也會自動加載此模塊



重啓iptables 會清空表裏的規則

[root@localhost ~]# cat /etc/sysconfig/iptables

service iptables save 保存規則到此文件,後重啓服務規則不會丟失

iptables-save > /etc/sysconfig/iptables.2013041801 可以使用輸出重定向來指明保存到什麼位置

iptables-restore < /etc/sysconfig/iptables.2013041801 使用輸入重定向來指明從什麼位置讀取信息


-------------------------------

server:172.16.100.7

放行sshd,httpd服務


iptables -I OUTPUT -s 172.16.100.7 -p tcp --sport 80  -m state --state ESTABLISHED    -j ACCEPT

iptables -I INPUT -d 172.16.100.7  -p tcp --dport 80  -m state --state NEW,ESTABLISHED -j ACCEPT


iptables -A INPUT -d 172.16.100.7 -P tcp --dport 22 -m state --state NEW,ESTABLISHED  -j ACCEPT

iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 22  -m state --state ESTABLISHED  -j ACCEPT


iptables -P INPUT DROP 

iptables -P OUTPUT DROP

-------------------------------


修改ip_conntrack最大連接數

sysctl -w net.ipv4.ip_conntrack_max=65536

要永久有效需要修改/etc/sysctl.conf




/proc/sys/net/ipv4/netfilter  此目錄裏的文件定義了一些超時時間





iptables -L -n --line-numbers -v 查看一寫的規則

-------------------------------------------

FTP:

iptables -A INPUT  -i lo  -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

需要安裝ip_conntrack_ftp和ip_nat_ftp模塊

[root@localhost ~]# vim /etc/sysconfig/iptables-config 

  IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"



iptables -A INPUT  -d  172.16.100.7 -p tcp  -m state --state RELATED,ESTABLISHED -j  ACCEPT

iptables -A OUTPUT -s  172.16.100.7 -p tcp  -m state --state RELATED,ESTABLISHED  -j ACCEPT


----------------------

[root@localhost ~]# vim /etc/sysconfig/iptables 可以直接編輯配置文件寫入防火牆規則

由於匹配規則是從第一條開始匹配,直到匹配到就爲止,所有可以把相同的規則,統一後寫到最前面從而提高性能。

  

把端口相同的合併:

列如:

iptables -I INPUT 2 -d 172.16.100.7 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT




iptables -R 修改

列如:

修改第6條 爲 -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,REDIRECT -j ACCEPT

iptanles -R INPUT 6  -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,REDIRECT -j ACCEPT


iptables -D 刪除


iptables之nat及其過濾功能



自定義規則鏈

iptables -N clean_in

[root@localhost ~]# iptables -L -n   查看最後一條會顯示自定義的規則鏈


Chain clean_in (0 references)

target     prot opt source               destination   

      

 

 

 

iptables -A clean_in -d 255.255.255.255 -p icmp  -j DROP

iptalbes -A chean_in -d 172.16.100.7 -j RETURN  如果自定義鏈沒匹配到則跳回原鏈

iptables -I INPUT -j clean_in  首先檢查自定義鏈


刪除自定義鏈 需要先刪除規則,然後iptables -X刪除



利用iptables的recent模塊來抵禦DOS***

ssh:遠程連接

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

iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH

iptables -I INPUT -p tcp --dport 22 -m state --stste NEW -m recent --update --seconds 300 --hitcount 3 -name SSH -j DROP


1.利用connlimit模塊將單IP的併發設置爲3:會誤殺使用NAT上網的用戶,可以根據實際情況增大該值:

2.利用recent和state模塊限制單IP在300s內只能與本機建立3個連接,被限制五分鐘後即可恢復訪問

說明:

1.第二句是記錄訪問tcp 22端口的新連接,記錄名稱爲SSH

--set 記錄數據包的來源IP,如果IP已經存在將更新已經存在的條目


2.第三句是指SSH記錄中的IP,300s內發起超過3次連接則拒絕此IP的連接

-update 是指每次建立連接都更新列表:

-seconds 必須與-rcheck或者--update同時使用

--hitcount必須與-rcheck或者--update同時使用


3.iptables 的記錄:/proc/net/ipt_recent/SSH

也可以使用下面的這句記錄日誌:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --seconds 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"




NAT:network address tranlation

DNAT

SNAT:源地址轉換


echo 1 > /proc/sys/net/ipv4/ip_forward


vim /etc/sysctl.conf

sysctl -p


主機A通過 B 與主機C通信。報文經過主機B後,在主機B的出口(POSTROUTING)時源地址僞裝成主機B的地址,C收到信息以後,回覆給主機B,

然後主機B通過NAT池將此時的目標地址轉換成主機A

-j SNAT

   --to-soure 明確指定修改後的源地址

   

-j MASQUERADE 一般公網地址爲自動獲取時使用,相當於-j SNAT 自動選擇源地址


-j DNAT   指定修改後的目標地址。必須跟指明協議端口

   --to-destination IP [:port]


iptables -t NAT -A POSTROUTING -s 192.168.10.0/24 -j  SNAT --to-soure 172.16.100.7



iptables -P FORWARD DROP 

iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT

iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 80 state --state NEW  -j ACCEPT 

iptables -A FORWARD -s 192.168.10.0/24 -p icmp -m state --state NEW -j ACCEPT 

iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 21 -m state --state NEW -j ACCEPT

-----------



iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.2



iptables -t nat -R PREROUTING 1 -d 172.16.100.7 -p tcp -dport 80 -j DNAT --to-destination 192.168.10.22:8080



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