天天看點

Linux之iptables常用操作

https://blog.csdn.net/hackerain/article/details/8518167

文章目錄

    • 1. 檢視網絡監聽的端口:
    • 2. 檢視本機的路由規則:
    • 3. /etc/services檔案
    • 4. 檢視本地的網絡服務
    • 5. 檢視網絡上的開放的網絡服務
    • 6.iptables
      • 1) 檢視防火牆格式化輸出
      • 2) 檢視完整的防火牆規則:
      • 3) 清除防火牆
      • 4) 定義預設的政策(policy)
      • 5) 為某個chain增加規則
      • 6) 設定規則具體到端口
      • 7) 外挂子產品
      • 8) icmp封包規則
      • 9) 删除某一個規則
      • 10) 将iptables規則導出設定開機自啟動

1. 檢視網絡監聽的端口:

netstat -tunlp
           

2. 檢視本機的路由規則:

route

[[email protected] ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.217.99.1     0.0.0.0         UG    0      0        0 eth0
10.217.99.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 vboxnet0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

Destination-->network
Genmask-->netmask
這兩者組成一個完整的網段

Gateway
如果為0.0.0.0,表示該路由直接由本機傳送出去,即通過區域網路的MAC直接傳送,
如果顯示IP的話,表示改路由要經過路由器才能傳送出去。

Flags:有多個标志,代表的意義如下:
U (route is up):該路由是啟動的;
H (target is a host):目标是一部主機 (IP) 而非網域;
G (use gateway):需要透過外部的主機 (gateway) 來轉遞封包;
R (reinstate route for dynamic routing):使用動态路由時,恢複路由資訊的标志;
D (dynamically installed by daemon or redirect):已經由服務或轉 port 功能設定為動态路由
M (modified from routing daemon or redirect):路由已經被修改了;
! (reject route):這個路由将不會被接受(用來抵擋不安全的網域!)

Iface
這個路由傳遞封包的接口。

路由過程是有順序的,從小網絡傳送到大網絡,當最後沒有合适的路由可以比對時,就使用default路由,即destination是0.0.0.0的路由
           

3. /etc/services檔案

每個port和各種service服務的對應關系
           

4. 檢視本地的網絡服務

netstat -tunlp  #列出正在監聽的網絡服務和端口
netstat -tunp   #列出已聯機的網絡聯機狀态和端口
kill -9 PID     #殺掉sshd程序,即可關閉該遠端連接配接
           

5. 檢視網絡上的開放的網絡服務

nmap IP
nmap localhost
           

6.iptables

1) 檢視防火牆格式化輸出

iptables [-t tables] [-L] [-nv]

選項與參數:
-t :後面接 table ,例如 nat 或 filter ,若省略此項目,則使用預設的filter
-L :列出目前的 table 的規則
-n :不進行 IP 與 HOSTNAME 的反查,顯示訊息的速度會快很多!
-v :列出更多的資訊,包括通過該規則的封包總位數、相關的網絡接口等

eg:

檢視filter表的chain
[[email protected] ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

說明:
target:代表進行的動作, ACCEPT 是放行,而 REJECT 則是拒絕,此外,尚有 DROP (丢棄) 的項目!
prot:代表使用的封包協定,主要有 tcp, udp 及 icmp 三種封包格式;
opt:額外的選項說明
source :代表此規則是針對哪個『來源 IP』進行限制?
destination :代表此規則是針對哪個『目标 IP』進行限制?

以上的每個chain中的規則,對封包進行過濾的時候是有順序的,按從上到下的順序,隻要有一個規則符合,那麼就可以通過防火牆,
如果一直不符合,就一直向下繼續比對,如果都不符合,那麼就執行預設的動作。
可以看到FORWORD的最後兩個rule的target是REJECT,這說明,如果前面的rule都不符合,那麼到這條規則的時候,就拒絕。

檢視nat表的chain
[[email protected] ~]# iptables -t nat -L -n
           

2) 檢視完整的防火牆規則:

檢視所有的表的規則
[[email protected] ~]# iptables-save

# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013

*nat
:PREROUTING ACCEPT [512:70935]
:INPUT ACCEPT [371:61561]
:OUTPUT ACCEPT [2352:148261]
:POSTROUTING ACCEPT [2343:147796]
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
COMMIT

# Completed on Fri Jan 18 14:26:06 2013

# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013

*mangle
:PREROUTING ACCEPT [26824:23528990]
:INPUT ACCEPT [26682:23519288]
:FORWARD ACCEPT [2:656]
:OUTPUT ACCEPT [22885:4162471]
:POSTROUTING ACCEPT [23023:4179687]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT

# Completed on Fri Jan 18 14:26:06 2013

# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013

*filter
:INPUT ACCEPT [26671:23518302]
:FORWARD ACCEPT [2:656]
:OUTPUT ACCEPT [22874:4161485]
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
COMMIT

# Completed on Fri Jan 18 14:26:06 2013

檢視某一個表的規則
[[email protected] ~]# iptables-save -t filter

# Generated by iptables-save v1.4.12 on Fri Jan 18 14:29:14 2013

*filter
:INPUT ACCEPT [26774:23531129]
:FORWARD ACCEPT [2:656]
:OUTPUT ACCEPT [22956:4173130]
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
COMMIT

# Completed on Fri Jan 18 14:29:14 2013

對比

[[email protected] ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    
           

3) 清除防火牆

iptables [-t tables] [-FXZ]

選項與參數:
-F :清除所有的已訂定的規則;
-X :殺掉所有使用者 "自定義" 的 chain (應該說的是 tables )啰;
-Z :将所有的 chain 的計數與流量統計都歸零
           

4) 定義預設的政策(policy)

當你的封包不在你設定的規則之内時,則該封包的通過與否,是以 Policy 的設定為準。即封包不符合你定義的所有規則的話,執行什麼操作。
有兩個可選:ACCEPT, DROP。
policy是和chain對應的,一個chain對應一個policy.

iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

選項與參數:
-P : 定義鍊( chain )。注意,這個 P 為大寫!
ACCEPT : 該封包可接受。
DROP : 該封包直接丢棄,不會讓 client 端知道為何被丢棄。

eg:
iptables -P INPUT DROP  #将filter表的INPUT鍊的預設政策設定為DROP
           

5) 為某個chain增加規則

iptables [-AI 鍊名] [-io 網絡接口] [-p 協定] [-s 來源 IP/網域] [-d 目标 IP/網域] -j [ACCEPT|DROP|REJECT|LOG]
選項與參數:
-AI 鍊名:針對某的鍊進行規則的 "插入" 或 "累加"
-A :新增加一條規則,該規則增加在原本規則的最後面。例如原本已經有四條規則,使用 -A 就可以加上第五條規則!
-I :插入一條規則。如果沒有指定此規則的順序,預設是插入變成第一條規則。例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5 号。
鍊 :有 INPUT, OUTPUT, FORWARD 等,
-io 網絡接口:設定封包進出的接口規範
-i :封包所進入的那個網絡接口,例如 eth0, lo 等接口。需與 INPUT 鍊配合;
-o :封包所傳出的那個網絡接口,需與 OUTPUT 鍊配合;
-p 協定:設定此規則适用于哪種封包格式,主要的封包格式有: tcp, udp, icmp 及 all 。
-s 來源 IP/網域:設定此規則之封包的來源項目,可指定單純的 IP 或包括網域,
   例如: IP:192.168.0.100,網域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
   若規範為『不許』時,則加上 ! 即可,例如:
   -s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源;
-d 目标 IP/網域:同 -s ,隻不過這裡指的是目标的 IP 或網域。
-j :後面接動作,主要的動作有接受(ACCEPT)、丢棄(DROP)、拒絕(REJECT)及記錄(LOG),
    LOG 這個動作僅在進行記錄而已,并不會影響到這個封包的其他規則比對的。

eg:
#1. 給filter表的INPUT鍊加上一條規則,設定 lo 成為受信任的裝置,亦即進出 lo 的封包都予以接受
iptables -A INPUT -i lo -j ACCEPT

#2. 給filter表的INPUT鍊加上一條規則,設定來自eth1接口的192.168.100.0/24網段的封包都接受
iptables -A INPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT

#3. 給filter表的INPUT鍊加上一條規則,設定來自eth1接口的 192.168.100.230 IP的封包都丢棄
iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP

#4. 記錄來自192.168.2.200這個IP的請求記錄
iptables -A INPUT -s 192.168.2.200 -j LOG
           

6) 設定規則具體到端口

iptables [-AI 鍊名] [-io 網絡接口] [-p tcp|udp] \
         [-s 來源 IP/網域] [--sport 端口範圍]  \
         [-d 目标 IP/網域] [--dport 端口範圍] \
      -j [ACCEPT|DROP|REJECT|LOG]

因為僅有 tcp 與 udp 封包具有端口,是以你想要使用--dport,--sport 時,得要加上 -p tcp 或 -p udp 的參數才會成功.

eg:

#1. 隻要來自 192.168.1.0/24 的 1024:65535 端口的封包,且想要聯機到本機的 ssh port 就予以抵擋
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65534 --dport ssh -j DROP

#2. 将來自任何地方來源 port 1:1023 的主動聯機到本機端的 1:1023 聯機丢棄
iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --dport 1:1023 --syn -j DROP
           

7) 外挂子產品

iptables -A INPUT [-m state] [--state 狀态]
選項與參數:
-m :一些 iptables 的外挂子產品,主要常見的有:
    state :狀态子產品
    mac:網絡卡硬體位址 (hardware address)
--state :一些封包的狀态,主要有:
    INVALID:無效的封包,例如資料破損的封包狀态
    ESTABLISHED:已經聯機成功的聯機狀态;
    NEW:想要建立立聯機的封包狀态;
    RELATED:這個最常用!表示這個封包是與我們主機發送出去的封包有關
--mac-source :就是來源主機的 MAC 啦!

eg:
#1. 隻要已建立或相關封包就予以通過,隻要是不合法封包就丢棄
 $ iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 $ iptables -A INPUT -m state --state INVALID -j DROP

#2. 針對區域網路絡内的 aa:bb:cc:dd:ee:ff 主機開放其聯機
$ iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT

#3. 接受ssh聯機
$ iptables -A INPUT -m state --state NEW -j ACCEPT
           

8) icmp封包規則

iptables -A INPUT [-p icmp] [--icmp-type 類型] -j ACCEPT
選項與參數:
--icmp-type :後面必須要接 ICMP 的封包類型,也可以使用代号,例如 8 代表 echo request 的意思

0	Echo Reply (代表一個回應資訊)
3	Destination Unreachable (表示目的地不可到達)
4	Source Quench (當 router 的負載過高時,此類别碼可用來讓發送端停止發送訊息)
5	Redirect (用來重新導向路由路徑的資訊)
8	Echo Request (請求回應訊息)
11	Time Exceeded for a Datagram (當資料封包在某些路由傳送的現象中造成逾時狀态,此類别碼可告知來源該封包已被忽略的訊息)
12	Parameter Problem on a Datagram (當一個 ICMP 封包重複之前的錯誤時,會回覆來源主機關于參數錯誤的訊息)
13	Timestamp Request (要求對方送出時間訊息,用以計算路由時間的差異,以滿足同步性協定的要求)
14	Timestamp Reply (此訊息純粹是回應 Timestamp Request 用的)
15	Information Request (在 RARP 協定應用之前,此訊息是用來在開機時取得網路資訊)
16	Information Reply (用以回應 Infromation Request 訊息)
17	Address Mask Request (這訊息是用來查詢子網路 mask 設定資訊)
18	Address Mask Reply (回應子網路 mask 查詢訊息的)

eg:
#接受所有的icmp請求
$ iptables -A INPUT -p icmp -j ACCEPT
           

9) 删除某一個規則

我們可以用兩種辦法中的任一種删除規則。
首先,因為知道這是INPUT鍊中唯一的規則,我們用編号删除:
#删除INPUT鍊中的編号為1的規則
$ iptables -D INPUT 1

第二種辦法是 -A 指令的映射,不過用-D替換-A。
當你的鍊中規則很複雜,而你不想計算它們的編号的時候這就十分有用了。這樣的話,我們可以使用:
$ iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
-D的文法必須和-A(或者-I或者-R)一樣精确。如果鍊中有多個相同的規則,隻會删除第一個。
           

10) 将iptables規則導出設定開機自啟動

iptables-save >/etc/iptables.rules 

vim /etc/network/if-pre-up.d/iptables
#!/bin/bash
iptables-restore < /etc/iptables.rules

chmod  +x /etc/network/if-pre-up.d/iptables
           
上一篇: 安裝swoole
下一篇: swoole的安裝

繼續閱讀