天天看點

iptables系列二

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

netfilter:Framework,TCP,核心中

iptables文法

iptables [-t table] command CHAIN [num] 比對條件 -j 處理動作

比對條件:
    通用比對
     -s
     -d 
     -p {tcp|udp|icmp}
     擴充比對
        隐含比對
        顯式比對
指令:
   管理規則:
      -A:附加一條規則,添加在鍊的尾部
      -I CHAIN [num]:插入一條規則,插入為對應CHAIN上的第num條,不加num,預設第一條
      -D CHAIN [num]:删除指定鍊中的第mun條規則
      -R CHAIN [num]:替換指定的規則;
      
    管理鍊:
       -F [CHAIN]: flush,清空指定規則鍊,如果省略CHAIN,則可以實作删除對應表中的所有鍊
       -P CHAIN:設定指定鍊的預設政策
       -N:自定義一條新的空鍊
       -X:删除一個自定義的空鍊,如若非空,可以先-F 清空,再删除。
       -Z:置零指定鍊中所有規則的計數器
       -E:重命名自定義的鍊。
    檢視類:
       -L:顯示指定表中的規則;
             -n:以數字格式顯示主機位址和端口号
            -v:顯示詳細資訊
            -vv:更詳細
            -x:顯示計數器精确值
            --line-numbers:顯示規則号碼
           
iptables -L -n 
iptables -t filter -L -n 
iptables -t nat -L -n 
iptables -t filter -A INPUT -s 172.16.0.0/16 -j DROP 
           

動作(target):

ACCECT :放行
    DROP   :丢棄
    REJECT  :拒絕
    DNAT   :目标位址轉換
    SNAT  :源位址轉換
    REDIRECT  :端口重定向
    MASQUERADE:位址僞裝
    LOG  :日志
    MARK :打标記
    NOTRACK 
    SET
           

擴充比對

隐含比對:
       -p tcp 
            --sport PORT[-PORT]:源端口
            --dport PORT[-PORT]:目标端口(可以連續的端口)
            --tcp-flags  msak comp :隻檢查mask指定的标志位,是用逗号分隔的标志清單;comp:此清單中出現的标記位必須為1,comp中沒出現的,而mask中出現的,必須為0。
            --syn:三次握手的第一次

       -p icmp 
             --icmp-type 
                0:echo-reply
                8:echo-request 
       -p udp 
            --sport 
            --dport 
    -p tcp -m tcp --dport   
    顯式擴充:  明确指定的擴充,使用額外的比對機制
     -m EXTESTION   --spe-opt 
         state:狀态擴充
             結合nf_conntrack追蹤會話的狀态
                  NEW:新連接配接請求
                  ESTABLISH:已建立的連接配接 
                  INVALID:非法連接配接 
                  RELATED:相關聯的。
                  
    -m state --state NEW -j ACCEPT 
    -m state --state NEW,ESTABLISHED  -j ACCEPT 放行兩個。
    -m     multiport 離散多端口比對擴充
          --source-ports
          --destination-ports 
          --ports 
           

注意:iptables不是服務,但是有服務腳本,服務腳本的主要作用在于管理儲存的規則,

由于iptables是工作在核心中的,需要載入記憶體的,防止所定義的規則重新開機後消失,是以要儲存這些規則,以及下一次生效,删除等。

裝載及移除iptables/netfilter相關的核心子產品

--tcp-flags SYN,FIN,ACK,RST SYN,ACK   --syn 
 (檢查TCP的SYN,FIN,ACK,RST4個标志位其中隻能SYN,ACK為1)   
 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
 
 
 lsmod:用于檢視相關子產品是否載入。
 lsmod - program to show the status of modules in the Linux Kernel
 
 lsmod |grep ip 
 
ip_conntrack:做ip追蹤的 
 
serrvice  iptables stop
lsmod |grep ip 
關閉iptables的服務腳本,就是将iptables的核心子產品移除。
 
vim /etc/init.d/iptables 
/sbin/modprobe 
/sbin/rmmod 
modprobe(8), rmmod(8), lsmod(8)
insmod 
           
iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.1.3 -p tcp --dport 22 -j ACCEPT 
iptables -t filter -A  OUTPUT -s 172.16.1.3 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT 
iptables -P INPUT DROP 
iptables -P OUTPUT DROP 
iptables  -P FORWARD DROP 

iptables -t filter -I INPUT -d 172.16.1.3 -p tcp --dport 80 -j ACCEPT 
iptables -t filter -I INPUT -s 172.16.1.3 -p tcp --sport 80 -j ACCEPT 

iptables -t filter -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT 
iptables -t filter -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT 

icmp-type
http://www.cnitblog.com/yang55xiaoguang/articles/59581.html 
TYPE    CODE    Description
0   0   Echo Reply——回應答覆(Ping應答)
8   0   Echo request——回應要求(Ping請求)
           

可以實作自己可以ping通任何人,其他人不可以ping本機:

iptables -t filter -A OUTPUT -s 172.16.1.3 -p icmp --icmp-type 8  -j ACCEPT 
iptables -t filter -A INPUT -d 172.16.1.3 -p icmp --icmp-type 0 -j ACCEPT  
           

允許dns的請求:

iptables -t filter -A INPUT -d 172.16.1.3 -p udp --dport 53 -j ACCEPT 
iptables -t filter -A OUTPUT -s  172.16.1.3 -p udp --sport 53 -j ACCEPT
           

dns伺服器的疊代:

iptables -t filter -A OUTPUT -s 172.16.1.3 -p udp --dport 53 -j ACCEPT 
iptables -t filter -A INPUT -d 172.16.1.3 -p udp --sport 53 -j ACCEPT 
           

反彈式木馬:

反彈木馬,是駐留在使用者計算機裡的一段服務程式,而攻擊者控制的則是相應的用戶端程式。服務程式通過特定的端口,打開使用者計算機的連接配接資源。一旦攻擊者所掌握的用戶端程式送出請求,反彈木馬便和他連接配接起來,将使用者的資訊竊取出去。

連接配接追蹤:
 ip_conntrack 
 可以追蹤tcp和udp
 
 A--->B  
 連接配接跟蹤(CONNTRACK),顧名思義,就是跟蹤并且記錄連接配接狀态。Linux為每一個經過網絡堆棧的資料包,生成一個新的連接配接記錄項 (Connection entry)。
 
    /proc/net/ip_conntrack
    /proc/net/nf_conntrack el6 
    儲存目前系統上每一個用戶端和主機的所建立的連接配接狀态。
           
iptstate 
iptstate - A top-like display of IP Tables state table entries
  -t  顯示連接配接個數 
 
 /proc/net/nf_conntrack保留ip的連接配接狀态,進行追蹤。
 
 modprobe -r ip_conntrack 移除子產品 
 modprobe -r nfnetlink
 
 service iptables stop 
 modprobe ip_conntrack 
 多少個連接配接就會有多少個條目
 /proc/sys/net/ipv4/ip_conntrack_max 
 /proc/sys/net/filter/nf_conntrack_max 
 /proc/sys/net/filter/nf_conntrack_max   定義nf_conntrack存儲多少個條目,最多可以建立多少連接配接。若連接配接超過定義的值就會丢棄,導緻大量的逾時。
 
 注意:在業務繁忙的網站,此子產品一定不要開啟。
 iptables -t nat -L  會觸發nf_conntrack子產品。
可以修改:
  vim /etc/sysctl.conf 
net.netfilter.nf_conntrack_max = 655360
net.nf_conntrack_max = 655360   
 
iptables啟動時會讀取/etc/sysconfig/iptables 
service iptables save  儲存iptables的規則

iptables-save > /etc/sysconfig/iptables.20150818
iptables-restore < /etc/sysconfig/iptables.20150818 
手動儲存規則以及手動載入規則。
           

允許ssh和http的服務,并且還要追蹤(以及預設政策):

iptables -F 
iptables -t filter -A INPUT -d 172.16.1.3 -p tcp --dport 22 -m state --state  NEW,ESTABLISHED -j ACCEPT 
iptables -t filter -A OUTPUT -s 172.16.1.3 -P tcp --sport 22 -m state --state  ESTABLISHED -j ACCEPT  

iptables -P INPUT DROP 
iptables -P OUTPUT DROP 
iptables -P FORWARD DROP 

iptables -t filter -A INPUT -d 172.16.1.3 -p tcp --dport 80 -m --state NEW,ESTABLISHED -j ACCEPT 
iptables -t filter -A OUTPUT -s 172.16.1.3 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT 

sysctl -w net.netfilter.nf_conntrack_max=65536 



sysctl - configure kernel parameters at runtime
EXAMPLES
       /sbin/sysctl -a

       /sbin/sysctl -n kernel.hostname

       /sbin/sysctl -w kernel.domainname="example.com"

       /sbin/sysctl -p /etc/sysctl.conf

在/proc/sys/net/netfilter/目錄下參數進行配置以及逾時時間。

若要永久有效将參數寫在/etc/sysctl.conf 
           
iptables -t filter -A INPUT -d 172.16.1.3 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.1.3 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT 


ping 172.16.1.3
iptstate -t 

iptables -L -n --line-numbers 



iptables -t filter -I OUTPUT -s 172.16.1.3 -m state --state ESTABLISHED -j ACCEPT 
iptables -t filter -I INPUT -d 172.16.1.3 -m state --state NEW,ESTABLISHED -j ACCEPT 

iptables -D OUTPUT 2 

vim /etc/vsftpd/vsftpd.conf 
pasv_enable=NO 
servicevsftpd restart 


允許ftp主動模式通過:
iptables -t filter 


iptables -R OUTPUT 1 -s 172.16.1.3 -m state ESTABLISHED,RELATED -j ACCEPT 
 
iptables -R OUTPUT 1 -d  172.16.1.3 -m state NEW,ESTABLISHED,RELATED -j ACCEPT 


注意:要裝載nf_

vim /etc/sysconfig/iptables-config 
IPTABLES_MODULES="nf_nat_ftp nf_conntrack_ftp"

service iptables reload 

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


注意: !  表示條件取反