iptables

Netfilter Tables and Chains

有五條鏈分別是:
    INPUT,FORWARD,OUTPUT,PREROUTING,POSTROUTING
四個表:
filter:INPUT,OUTPUT,FORWARD
nat:OUTPUT,PREROUTING,POSTROUTING
mangle:INPUT,FORWARD,OUTPUT,PREROUTING,POSTROUTING
iptables [-t table] command CHAIN number critioti(匹配條件) -j target
command
  rules:
     -A (append)
     -I [num](insert)
     -D [num](delete) 如: iptables -D FOEWARD 1
     -R [num](replace)
  chains:
     -N chain_name (new)
     -X chain_name (刪除用戶自定義的空鏈)
     -F [chain_name] (若沒指chain_name則是清空filter表中的鏈)
     -P chain_name {DROP,ACCEPT}(默認策略policy)
     -Z chain_name (清空計數器爲0)
     -E old_chain_name  new_chain_name  
規則查看:
  -L (list)
    -v (verbose)顯示更詳細的信息,還有-vv,-vv...
    -n (以數字的方式顯示匹配條件)
    -x(精確值包體積之和)
    --line-numbers (把規則前面編號)
-j DROP,REJECT,ACCEPT,DNAT,SNAT(此是指定靜態地址,若是動態則爲MASQUEBADE),LOG,REDITECT(端口重定向)
匹配條件:a:common matching(通用匹配)
             -s,-source(指定原地址)
             -d,-destination(指定目標地址)
             -i [interface] (流入的接口)
             -o [interface] (從哪個網卡出去的接口)
             -p {tcp,udp,icmp}
          b:extended matching(擴展匹配)
             #顯示擴展
                -m state --state {NEW,ESTABLISHED,RELATED,INVALID(不可識別的)}
             #隱式擴展
                -p tcp
                  --sport (源端口)
                  --dport(目標端口)
                  --tcp-flags syn,ack,rst,fin syn  (指定syn爲1,其他爲0,就是建立一個NEW,新連接)
                -p udp
                  --sport
                  --dport
                -p icmp
                  --icmp_type (標定icmp數據包的)
下面爲一些iptables的例子:
  主機防火牆:
    這個是http服務的
    #iptables -A INPUT -d 192.168.0.52 -p tcp --dport 80 -m state --state NEW,ESTABLISHED  -j ACCEPT
    #iptables -A OUTPUT -s 192.168.0.52 -p tcp --sport 80 -m state --state ESTABLISHED  -j ACCEPT
    ftp服務
    #iptables -A INPUT -d 192.168.0.155 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
    #iptables -A OUTPUT -s 192.168.0.155 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
    #iptables -A INPUT -d 192.168.0.52 -m state --state ESTABLISHED,RELATED -j ACCEPT
    #iptables -A OUTPUT -s 192.168.0.52 -m state --state ESTABLISHED -j ACCEPT
    我們用iptables時的ftp服務時,還要配置此文件/etc/sysconfig/iptables-config,在裏面加入"ip_conntrack_ftp,ip_nat_ftp",看這兩個模塊是否加入進去,查看可以用lsmod | grep ip
  網絡防火牆:
    首先這個防火牆主機得有路由功能:
    /proc/sys/net/ipv4/ip-forward=1(此關機就失效)或在此文件/etc/sysctl.conf(永久有效)中配置ipv4-forward=1,可以用命令sysctl -p 來查看。
    增加訓練難度,#iptables -P FORWARD DROP
    #iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.10.2 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
    #iptables -A FORWARD -s 192.168.10.2 -d 192.168.0.0/24 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
    這個是http服務的,我們可以通過查看文件/var/log/httpd來查看訪問的日誌。
  也可以用iptables來記錄日誌:(須在所有iptables定義的規則前加此命令)
    如:#iptables -I FORWARD 1 -s 192.168.0.0/24 -d 192.168.10.2 -p tcp --dport 80 -j LOG --log-prefix "web server"  (--log-prefix是在日誌前面加個web server的)
  ftp服務可以在防火牆內通過:
        #iptables -A INPUT -d 192.168.0.155 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
        #iptables -A OUTPUT -s 192.168.0.155 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
 #iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
  通過NAT轉換來實現http服務:
 #iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.10.2 -p tcp --dport 80 -j SNAT --to-source 192.168.10.1
        #iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.10.2 -p tcp --dport 80 -m state --state NEW,ESTABLESHED -j ACCEPT
 #iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
  通過DNAT轉換來實現http服務:
 #iptables -t nat -A PREROUTING -s 192.168.0.0/24 -d 192.168.0.52 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.2
        #iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.10.2 -p tcp --dport 80 -m state --state NEW,ESTABLESHED -j ACCEPT
 #iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
       
iptables還有其他用法:
   如: #iptables -A FORWARD -s 192.168.10.0/24 -m connlimit !--connlimit-above 6 -j ACCEPT  (connlimit意思是併發連接數的限制,這裏是不能超過六個)
        #iptables -A INPUT  -d 192.168.0.155 -m string --string "text" -alog {bm|kmp} -j DROP (過濾含有字符串text的內容)
           其中把INPUT改成FORWARD這個只能過濾含有text的鏈接。如:
www.text.com
        #iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 80 -m time --timesstart 12:00 --timestop 19:00 -j DROP
             (這個是指80端口不能再12:00-19:00被訪問)
 #iptables -A FORWARD -s 192.168.10.0/24 -p tcp -m multiport --destination-ports 21,80 -j DROP (multiport指定多端口的)
用過濾7層的iptables來防止p2p式的服務:
   如: #iptables -A FORWARD -m layer7 --l7proto qq -j DROP
 

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