例えばiptablesマルチポートマッチング、接続追跡、文字列マッチング、時間マッチング、同時接続制限、レートマッチング、メッセージステータスマッチングなどの応用を実現する
10303 ワード
一、基本一致条件:
:
: , iptables/netfilter ;
[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
[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
二、マッチング条件における拡張マッチング条件:
1、暗黙的な拡張
tcpプロトコル:
[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
udpプロトコル
[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プロトコル:
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、明示的な拡張
(1)、マルチポートマッチング
マルチポートマッチング条件を離散的または連続的に定義し、最大15個、プロトコルtcp、udp、udplite、dccp and sctpをサポートする.
[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アドレスマッチング条件は、連続アドレスブロックによって示される.
[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]
--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拡張:追跡メッセージ
接続トレーステンプレートを有効にして接続を記録し、接続に基づいて接続状態の拡張を一致させる.
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]
[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:呼び出し元を返します.
四、ルールの保存とロード:
Serviceiptables save保存ルールは/etc/sysconfig/iptablesファイルに保存され、上書き保存されます.リロードルール:service iptables restartデフォルトリロード/etc/sysconfig/iptablesファイルのルールプロファイル:/etc/sysconfig/iptables-config
(1)Unit Fileをカスタマイズし、iptables-restoreを行う.(2)firewalldサービス;(3)カスタムスクリプト;
五、ルールの最適化の考え方:
カスタムチェーンを使用して、特定のアプリケーションに関するルールを管理し、管理ルールをモジュール化します.
(1)優先的に双方の状態がESTABLISHEDである旨のメッセージを発行する.(2)異なるカテゴリの機能にサービスするルールは、メッセージの可能性がより大きい前に一致する.(3)同じカテゴリの機能に奉仕するルールであり、マッチング条件が厳格であることを前に置く.(4)デフォルトポリシーの設定:ホワイトリストメカニズム(a)iptables-P、推奨しない;(b)ルールの最後にルールをデフォルトポリシーとして定義することを提案する.