IPtables基礎bash
簡介app
iptables命令可用於配置Linux的包過濾規則,經常使用於實現防火牆、NAT。運維
iptables裏面有4張表,分別是filter,NAT,mangle,raw表。運維人員的話主要關注的是filter和NAT表。tcp
filter:主要是過濾包的,內建三個鏈INPUT、OUTPUT以及FORWARD。INPUT做用於進入本機的包;OUTPUT做用於本機送出的包;FORWARD做用於那些跟本機無關的包。ide
NAT:主要用戶地址轉換和端口映射,內建三個鏈,分別是PREOUTING、OUTPUT、POSTROUTING。spa
iptables命令基本結構
rest
iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET日誌
iptables [ –t 表名 ]命令選項 [ 鏈名 ] [ 條件匹配 ] [ –j 目標動做或跳轉 ]xml
注:若是-t默認表是filter表。
blog
Command(命令)
-F:flush, 清空規則鏈; 省略鏈, 表示清空指定表上的全部的鏈;
-N: new, 建立新的自定義規則連;
-X: delete/drop, 刪除用戶自定義的空的規則鏈;
-Z: zero, 清零, 置零規則計數器
-P: Policy, 爲指定鏈設置默認策略,未符合過濾條件之封包,預設的處理方式;
對filter表中的鏈而言, 默認策略一般有ACCEPT(容許,放行), DROP(丟棄), REJECT(拒絕);
-E: rEname, 重命名自定義鏈; 引用計數不爲0的自定義鏈, 沒法更名, 也沒法刪除;
-L, --list:列出某規則鏈中的全部規則。
規則管理:
-A: append, 將新規則追加於指定鏈的尾部;
-I: insert, 將新規則插入至指定鏈的指定位置; //不指明插入的行數時默認插入到第一行.
-D: delete, 刪除指定鏈上的指定規則;
有兩種指定方式:
(1) 指定匹配條件;
(2) 指定規則編號;
-R: replace, 替換指定鏈上的指定規則;
查看:
-L: list, 列出指定鏈上的全部規則;
-n: numberic, 以數字格式顯示地址和端口號;
-v: verbose, 顯示詳細信息;
-vv, -vvv:詳細更詳細信息.
--line-numbers: 顯示規則編號;
-x: exactly, 顯示計數器計數結果的精確值;
Parameter(參數)
[!] -s IP|Netaddr: 檢查報文中的源IP地址是否符合此處指定的地址範圍;
[!] -d IP|Netaddr: 檢查報文中的目標IP地址是否符合此處指定的地址範圍;
-p {tcp|udp|icmp}: 檢查報文中的協議, 即ip首部中的protocols所標識的協議;
-i IFACE: 數據報文的流入接口; 僅能用於PREROUTING, INPUT及FORWARD鏈上;
-o IFACE: 數據報文的流出接口; 僅能用於FORWARD, OUTPUT及POSTROUTING鏈上;
Target:
ACCEPT: 接收
DROP: 丟棄
REJECT: 拒絕
LOG: 記錄日誌
MARK: 作防火牆標記
DNAT: 目標地址轉換
SNAT: 原地址轉換
MASQUERADE: 地址假裝
基礎命令
iptables -nvL //iptables -nvL 查看規則
[root@ACtest ~]# iptables -nvL Chain INPUT (policy ACCEPT 45 packets, 8317 bytes) pkts bytes target prot opt in out source destination 1284 149K ACCEPT tcp -- * * 172.31.11.189 0.0.0.0/0 tcp dpt:22 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 3 152 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 916 packets, 230K bytes) pkts bytes target prot opt in out source destination
iptables -t filter -A INPUT -p tcp --dport 80 -s X.X.X.X -j DROP //-A 表示插入到最後一行
iptables -t filter -I INPUT -p tcp --dport 80 -s X.X.X.X -j DROP //-A 表示插入到最後一行
[root@chumjtest02 ~]# iptables -t filter -A INPUT -p tcp --dport 80 -s 172.31.24.150 -j DROP [root@chumjtest02 ~]# iptables -t filter -I INPUT -p tcp --dport 80 -s 172.31.24.151 -j DROP [root@chumjtest02 ~]# iptables -nvL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DROP tcp -- * * 172.31.24.151 0.0.0.0/0 tcp dpt:80 466 41872 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 2 473 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited 0 0 DROP tcp -- * * 172.31.24.150 0.0.0.0/0 tcp dpt:80 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 10 packets, 1888 bytes) pkts bytes target prot opt in out source destination
iptables -nvL --line-numbers //查看規則帶有id號
iptables -D INPUT 6 //根據規則的id號刪除對應規則
[root@chumjtest02 ~]# iptables -nvL --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 311 27704 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 2 473 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited 6 0 0 ACCEPT tcp -- * * 172.31.24.150 0.0.0.0/0 tcp dpt:80
service iptables save //iptables若是不保存的話重啓服務就會丟失,因此配置好以後必定要保存下,保存的路徑在/etc/sysconfig/iptables
[root@chumjtest02 ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
iptables-save > X.bak //能夠指定文件進行保存。
iptables-restore <3.bak //能夠將備份的文件導入。
[root@chumjtest02 ~]# iptables-save > 3.bak //將iptables配置文件導出 [root@chumjtest02 ~]# cat 3.bak # Generated by iptables-save v1.4.7 on Thu Dec 29 10:38:16 2016 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [108:16105] -A INPUT -s 172.31.24.151/32 -p tcp -m tcp --dport 80 -j DROP -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A INPUT -s 172.31.24.150/32 -p tcp -m tcp --dport 80 -j DROP -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Thu Dec 29 10:38:16 2016 # Generated by iptables-save v1.4.7 on Thu Dec 29 10:38:16 2016 *nat :PREROUTING ACCEPT [833:120780] :POSTROUTING ACCEPT [11:681] :OUTPUT ACCEPT [11:681] COMMIT # Completed on Thu Dec 29 10:38:16 2016 [root@chumjtest02 ~]# iptables-restore <3.bak //將備份的文件導入
iptables -Z //-Z: zero, 清零, 置零規則計數器
案例
針對filter表,預設策略INPUT鏈DROP,其餘兩個鏈ACCEPT,而後針對172.31.24.0/24開通22端口,對全部網段開放80端口,對全部網段開放21端口。寫腳本執行是爲了方便。:
#!/bin/bash ips="/sbin/iptables" $ips -F //對iptables配置進行清空下 $ips -P INPUT DROP //請謹慎使用,執行後就會斷開一切INPUT鏈接,因此這裏用腳本導入。 $ips -P OUTPUT ACCEPT $ips -P FORWARD ACCEPT $ips -A INPUT -s 172.31.24.0/24 -p tcp --dport 22 -j ACCEPT $ips -A INPUT -s 172.31.11.189 -p tcp --dport 22 -j ACCEPT $ips -A INPUT -p tcp --dport 80 -j ACCEPT $ips -A INPUT -p tcp --dport 22 -j DROP