例えばiptablesマルチポートマッチング、接続追跡、文字列マッチング、時間マッチング、同時接続制限、レートマッチング、メッセージステータスマッチングなどの応用を実現する

10303 ワード

一、基本一致条件:

 : 
     : , iptables/netfilter ;
  • [!] -s, --source address[/mask][,...]:メッセージのソースIPアドレスがここで指定したアドレスまたは範囲に合っているかどうかを確認し、追加します.反逆を取る.
  • [root@bogon ~]# iptables -t filter -A INPUT -s 192.168.0.0/16 -d 192.168.1.11 -p tcp -j ACCEPT# 192.168 tcp 
    [root@bogon ~]# iptables -A OUTPUT -s192.168.1.11 -d  192.168.0.0/16  -p tcp -j ACCEPT# 192.168 tcp 
    
  • [!] -d, --destination address[/mask][,...]:メッセージのターゲットIPアドレスがここで指定したアドレスまたは範囲に合っているかどうかを確認し、追加します.反逆を取る.すべてのアドレス:0.0.0.0/0
  • [!] -p,--protocol protocol:指定プロトコルprotocol:tcp,udp,udplite,icmp,icmpv 6,esp,ah,sctp,mh or"all"{tcp|udp|icmp}
  • [root@bogon ~]# iptables -A INPUT -d 192.168.1.11 -p icmp -j ACCEPT # icmp ping 
    [root@bogon ~]# iptables -A OUTPUT -s 192.168.1.11 -p icmp -j ACCEPT# icmp ping 
    
  • [!] -i,--in-interface name:データメッセージが流入するインタフェース;データメッセージの流れにのみ適用でき、PREROUTING、INPUT、FOrWARDチェーンにのみ適用できます.
  • [!] -o,--out-interface name:データメッセージが流出するインタフェース;データメッセージの流出の一環にしか適用できず、FORWARD、OUTPUT、POSTROOUTINGチェーンにしか適用できない.処理動作:-j targetname[per-target-options]ACCEPT DROP REJECT
  • 二、マッチング条件における拡張マッチング条件:

  • 暗黙的な拡張:-pオプションを使用して特定のプロトコルを指定する場合、-mオプションを同時に使用して拡張モジュールの拡張メカニズムを指定する必要はありません.
  • 明示的な拡張:-mオプションを使用して、呼び出す拡張モジュールの拡張メカニズムを指定する必要があります.

  • 1、暗黙的な拡張

  • 暗黙的な拡張:拡張モジュールを手動でロードする必要はありません.プロトコルの拡張であるため、-pを使用してプロトコルを指定すると、拡張するモジュールが指定されていることを示します.

  • tcpプロトコル:
  • [!] --source-port,--sport[:port]:メッセージのソースポートに一致します.ポート範囲であってもよい.
  • [root@bogon ~]# iptables -I INPUT -s 192.168.1.0/16 -d 192.168.1.11 -p tcp --dport 22 -j ACCEPT # 22 
    [root@bogon ~]# iptables -I OUTPUT -s 192.168.1.11 -d 192.168.1.0/16 -p tcp --sport 22 -j ACCEPT#
    [root@bogon ~]# iptables -A INPUT -d 192.168.1.11 -j -REJECT# , 
    [root@bogon ~]# iptables -A OUTPUT -s 192.168.1.11 -j -REJECT
    [root@bogon ~]# iptables -P INPUT ACCEPT
    [root@bogon ~]# iptables -P OUTPUT ACCEPT
    
  • [!] --destination-port,--dport[:port]:メッセージのターゲットポートに一致します.ポート範囲であってもよい.
  • [!] --tcp-flags mask comp mask is the flags which we should examine,written as a comma-separated list,例えばSYN,ACK,FIN,RST comma-separated list of flags which must be set,例えばSYN:「--tcp-flags SYN,ACK,FIN,RST SYN」表は、検査するフラグビットがSYN,ACK,FIN,RSTの4つであり、そのうちSYNは1でなければならず、残りは0でなければならない.[!] --syn:最初の握手にマッチするために使用され、「tcp-flags SYN、ACK、FIN、RST SYN」;
  • に相当する.
    udpプロトコル
  • [!] --source-port,--sport[:port]:メッセージのソースポートに一致します.ポート範囲であってもよい.
  • [!] --destination-port,--dport[:port]:メッセージのターゲットポートに一致します.ポート範囲であってもよい.
  • [root@bogon ~]# iptables -I INPUT -d 192.168.1.11 -p udp --dport 137:138 -j ACCEPT # udp 137 138 
    [root@bogon ~]# iptables -I OUTPUT -s 192.168.1.11 -p udp --sport 137:138 -j ACCEPT # udp 137 138 
    

    icmpプロトコル:
  • [!] --icmp-type{type[/code]|typename}echo-request:8#pingアウト、エコーリクエストecho-reply:0#ping応答
  •  ping , ping              
    [root@bogon ~]# iptables -A INPUT -i eth0  -j REJECT# , 
    [root@bogon ~]# iptables -A OUTPUT -i eth0  -j REJECT
    [root@bogon ~]# iptables -I OUTPUT -s 192.168.1.1 -p icmp --icmp-type 8 -j ACCEPT# ping 
    [root@bogon ~]# iptables -I INPUT 2 -d 192.168.1.1 -p icmp --icmp-type 0/0 -j ACCEPT# ping 
     ping 8, 0。
    

    2、明示的な拡張

  • 明示的な拡張:拡張モジュールを手動でロードする必要があります[-m matchname[per-match-options]].
  • 明示的な拡張:-mオプションを使用して、呼び出す拡張モジュールの拡張メカニズムを指定する必要があります.

  • (1)、マルチポートマッチング


    マルチポートマッチング条件を離散的または連続的に定義し、最大15個、プロトコルtcp、udp、udplite、dccp and sctpをサポートする.
  • [!] --source-ports,--sports port[,port|,port:port]...:複数のソースポートを指定します.
  • [!] --destination-ports,--dports port[,port|,port:port]...:複数のターゲットポートを指定します.
  • [root@bogon ~]#  iptables -R INPUT  -d 192.168.1.11 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT# 
    [root@bogon ~]#  iptables -R OUTPUT  -s 192.168.1.11 -p tcp -m multiport --sports 22,80,139,445,3306 -j ACCEPT# 
    

    (2)、iprange接続トレースマッチング


    マルチIPアドレスマッチング条件は、連続アドレスブロックによって示される.
  • [!] --src-range from[-to]
  • [!] --dst-range from[-to]
  • [root@bogon ~]# iptables -I INPUT 3 -d 192.168.1.11 -p tcp --dports 23 -m iprange --src-range 192.168.1.60-192.168.1.70 -j REJECT# 23 
    [root@bogon ~]# iptables -I OUTPUT 3 -s 192.168.1.11 -p tcp --sports 23 -m iprange --src-range 192.168.1.60-192.168.1.70 -j REJECT
    

    (3)、time拡張:時間区間に基づいてアクセス制御を行う


    --timestart hh:mm[:ss] --timestop hh:mm[:ss]
  • [!] --weekdays day[,day...]
  • [!] --monthdays day[,day...] --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

  • --kerneltz:デフォルトのUTCではなく、カーネル構成のタイムゾーンを使用します.
    [root@bogon ~]# iptables -I OUTPUT 4 -s 192.168.1.11 -p udp --dports 123,323  -j REJECT# 123,323 
    [root@bogon ~]# iptables -I INPUT 4 -d 192.168.1.11 -p udp --sports 123,323  -j REJECT# 123,323 
    [root@bogon ~]# iptables -R INPUT 4 -d 192.168.1.11 -p tcp  --dport 23 -m iprange --src-reange 192.168.1.60-192.16.1.70 -m time --timestart 10:00:00 --timestop 16:00:00 --weekdays 1,2,3,4,5 --kerneltz -j ACCEPT# 1-5 10 16 60-70 ip 23 
    [root@bogon ~]# iptables -R OUTPUT 4 -s 192.168.1.11 -p tcp  --sport 23 -m iprange --dsp-reange 192.168.1.60-192.16.1.70 -m time --timestart 10:00:00 --timestop 16:00:00 --weekdays 1,2,3,4,5 --kerneltz -j ACCEPT# 1-5 10 16 60-70 ip 23 
     :centos6 --kerneltz
    

    (4)、string文字列マッチング(明文符号化マッチングのみ)

       --algo {bm|kmp}
    

    [!] --string pattern [!] --hex-string pattern --from offset --to offset
    [root@bogon ~]# iptables -I OUTPUT -s 192.168.1.11 -m string --algo kmp --string "holle" -j REJECT# holle , 
    

    (5)、connlimit単一クライアントの最大同時数量マッチング

    --connlimit-upto n     # n 
    --connlimit-above n   # n 
    
    [root@bogon ~]# iptables -I INPUT -s 192.168.10/16 -d 192.168.1.11 -p tcp --dport 3306 -j ACCEPT# 3306 
    [root@bogon ~]# iptables -I OUTPUT -d 192.168.10/16 -s 192.168.1.11 -p tcp --sport 3306 -j ACCEPT# 3306                 
    [root@bogon ~]# iptables -R INPUT -s 192.168.10/16 -d 192.168.1.11 -p tcp --dport 3306  -m connlimit --connlimit-upto 2 -j ACCEPT# 3306 , ip 2 
                        
    

    (6)、limit制限発注速度に基づいて制限する


    専用オプション:トークンバケツアルゴリズム--limit rate[/second|/minute|/hour|/day]単位時間あたりのレート--limit-burst number最大収集トークン数
    [root@bogon ~]# iptables -I INPUT 6 -d 192.168.1.11 -p icmp --icmp-type 8 -m liit-burst 5 --limit 20/minute -j ACCEPT# 5 , 20 
    [root@bogon ~]# iptables -I OUTPUT 6 -s 192.168.1.11 -p icmp --icmp-type 0 -j ACCEPT# 
    

    本機のあるtcpサービスが新しい要求を受信する速度を制限する:--syn,-m limit

    三、state拡張:追跡メッセージ


    接続トレーステンプレートを有効にして接続を記録し、接続に基づいて接続状態の拡張を一致させる.
  • [!] --state stateは、それらの状態INVALID、ESTABLISHED、NEW、RELATED or UNTRACKEDを示す.

  • NEW:新規接続要求;ESTABLISHED:確立された接続;INVALID:認識できない接続;RELATED:関連する接続で、現在の接続は新しい要求ですが、既存の接続に付属しています.UNTRACKED:未追跡の接続;

    1.state拡張:


    カーネルモジュールマウント:nf_conntrack nf_conntrack_ipv4
    追跡された接続:/proc/net/nf_conntrack調整記録可能な接続数最大値:/proc/sys/net/nf_conntrack_maxタイムアウト時間長:/proc/sys/net/netfilter/timeout
    [root@bogon ~]# iptables -F # 
    [root@bogon ~]# iptables -A INPUT -d 192.168.1.11 -p tcp -m multiport ---dports 22:23,80,139,445,3306 -m state --state NEW -j ACCEPT# tcp 22,23,80,139,445,3306 
    [root@bogon ~]# iptables -I INPUT 2 -d 192.168.1.11 -p udp --dport  137:138 -m state --state NEW -j ACCEPT# udp 137,138 
    [root@bogon ~]# iptables -I OUTPUT 2 -s 192.168.1.11 -p udp -m --multiport ---dport  123,323 -m state --state NEW -j ACCEPT# 123,323 
    [root@bogon ~]# iptables -I INPUT -d 192.168.1.11 -m state --state ESTABLISHED -j ACCEPT# 
    [root@bogon ~]# iptables -I   OUTPUT -s 192.168.1.11 -m state --state ESTABLISHED -j ACCEPT# 
    [root@bogon ~]# iptables -A  INPUT -d192.168.1.11 -j REJECT# 
    [root@bogon ~]# iptables -A  INPUT -s192.168.1.11 -j REJECT# 
    [root@bogon ~]# iptables -vnL  # 
     
    

    RELATED状態のトレース:手動マウント状態が必要なトレースモジュール:nf_conntrack_ftp
    [root@bogon ~]#modprobe  nf_conntrack_ftp # 
    [root@bogon ~]#lsmod  # 
    [root@bogon ~]# iptables -R INPUT 3 -d 192.168.1.11 -p tcp -m multiport --dports 21:23,80,139,445,3306 -m state --state NEW -j ACCEPT# tcp 
    [root@bogon ~]# iptables -R INPUT 1 -d 192.168.1.11 -m state --state ESTABLISHED,RELATED -j ACCEPT# 
    

    2.処理動作(ジャンプ先):


    -j targetname [per-target-options]
  • 単純target:ACCEPT,DROP
  • 拡張target:REJECT--reject-with type:拒否タイプ
  • LOGログ--log-level--log-prefix
  • [root@bogon ~]# iptables -I INPUT 3 -d 192.168.1.11 -p tcp  --dport 23 -m state --state NEW -j LOG --log-prefix"access telnet"# 23 access telnet                    
    
                     /var/log/messages
    

    3.カスタムチェーンをtargetとする(処理動作):

    [root@bogon ~]# iptables -N in_ping_rules# ping 
    [root@bogon ~]# iptables -A in_ping_rules -d 192.168.1.11 -p icmp --icmp-type8 -j ACCEPT # ping 
    [root@bogon ~]# iptables -I in_ping_rules -d 192.168.1.11  -s 192.168.1.12  -p icmp  -j REJECT # 68 ping 
    
    # INPUT 
    [root@bogon ~]# iptables -I INPUT 5 -d 192.168.1.11 -p icmp -j in_ping_rules# INPUT 
    
  • 複数のカスタムチェーンを呼び出すには、まずカスタムチェーン
  • を空にする必要があります.
    [root@bogon ~]# iptables -F  in_ping_rules# 
    [root@bogon ~]# iptables -vnL# 
    [root@bogon ~]# iptables -X  in_ping_rules# 
    

    RETURN:呼び出し元を返します.

    四、ルールの保存とロード:

  • 保存:iptables-save>/PATH/TO/SOME_RULE_FILE
  • リロード:iptabls-restoreをコミットしません.
  • CentOS 6:
  • 保存規則:

  • Serviceiptables save保存ルールは/etc/sysconfig/iptablesファイルに保存され、上書き保存されます.リロードルール:service iptables restartデフォルトリロード/etc/sysconfig/iptablesファイルのルールプロファイル:/etc/sysconfig/iptables-config
  • CentOS 7:

  • (1)Unit Fileをカスタマイズし、iptables-restoreを行う.(2)firewalldサービス;(3)カスタムスクリプト;

    五、ルールの最適化の考え方:


    カスタムチェーンを使用して、特定のアプリケーションに関するルールを管理し、管理ルールをモジュール化します.
    (1)優先的に双方の状態がESTABLISHEDである旨のメッセージを発行する.(2)異なるカテゴリの機能にサービスするルールは、メッセージの可能性がより大きい前に一致する.(3)同じカテゴリの機能に奉仕するルールであり、マッチング条件が厳格であることを前に置く.(4)デフォルトポリシーの設定:ホワイトリストメカニズム(a)iptables-P、推奨しない;(b)ルールの最後にルールをデフォルトポリシーとして定義することを提案する.