Netfilter Tables and Chains
有五條鏈分別是:
INPUT,FORWARD,OUTPUT,PREROUTING,POSTROUTING
四個表:
filter:INPUT,OUTPUT,FORWARD
nat:OUTPUT,PREROUTING,POSTROUTING
mangle: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(端口重定向)
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
-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
首先這個防火牆主機得有路由功能:
/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的)
#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
#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
#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
#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