1. 程式人生 > >iptables簡單了解

iptables簡單了解

映射 外網 顯示 基於 本地ip num pack p地址 clas

簡介

  Iptables是unix/linux自帶的一款優秀且開源的基於包過濾的防火墻工具。

怎麽用

  可以用來做主機防火墻。

  可以做局域網共享上網。

  可以做ip及端口映射。

Iptables工作流程

  iptables分為4表5鏈

  表:

    filter:INPUT,OUTPUT,FORWARD

    NAT:POSTROUTING,PREROUTING,OUTPUT

    mangle:INPUT,OUTPUT,FORWARD,POSTROUTING,PREROUTING

    raw:PREROUTING,OUTPUT

  鏈:

    INPUT:進入主機的數據包。

    OUTPUT: 流出主機的數據包。

    FORWARD: 流經主機的數據包。

    PREROUTING: 進入服務器最先經過的鏈,用來做NAT端口或ip映射

    POSTROUTING: 流出服務器最後經過的鏈,NAT共享上網。 局域網共享上網。

4個表:filter,nat,mangle,raw,默認表是filter(沒有指定表的時候就是filter表)。表的處理優先級:raw>mangle>nat>filter。

filter:一般的過濾功能

nat:用於nat功能(端口映射,地址映射等)

mangle:用於對特定數據包的修改

raw:優限級最高,設置raw時一般是為了不再讓iptables做數據包的鏈接跟蹤處理,提高性能

RAW 表只使用在PREROUTING鏈和OUTPUT鏈上,因為優先級最高,從而可以對收到的數據包在連接跟蹤前進行處理。一但用戶使用了RAW表,在某個鏈 上,RAW表處理完後,將跳過NAT表和 ip_conntrack處理,即不再做地址轉換和數據包的鏈接跟蹤處理了.

RAW表可以應用在那些不需要做nat的情況下,以提高性能。如大量訪問的web服務器,可以讓80端口不再讓iptables做數據包的鏈接跟蹤處理,以提高用戶的訪問速度。

技術分享圖片

iptables命令

[root@linux ~]# iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT  #添加filter表,開放21端口  

[root@linux ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE     #添加nat表,將源地址是 192.168.10.0/24 的數據包進行地址偽裝

[root@linux ~]# iptables -I INPUT 3 -p tcp -m tcp --dport 20 -j ACCEPT  #添加filter表,開放20端口,並且插入到指定位置

[root@linux ~]# iptables -L -n --line-number   
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
2    DROP       icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 8
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:20                #-I指定位置插的
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
6    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
7    DROP       all  --  0.0.0.0/0            0.0.0.0/0           state INVALID,NEW
8    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:21                #-A默認插到最後

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination


[root@linux ~]# iptables -L -n --line-number |grep 21    #查看filter表,--line-number可以顯示規則序號,在刪除的時候比較方便

[root@linux ~]# iptables -t nat -vnL POSTROUTING --line-number    #查看nat表
Chain POSTROUTING (policy ACCEPT 38 packets, 2297 bytes)  
num   pkts bytes target     prot opt in     out     source               destination  
1        0     0 MASQUERADE  all  --  *      *       192.168.10.0/24      0.0.0.0/0  

[root@linux ~]# iptables -R INPUT 3 -j DROP    #將規則3改成DROP  

[root@linux ~]# iptables -D INPUT 3  #刪除input的第3條規則

[root@linux ~]# iptables -t nat -D POSTROUTING 1  #刪除nat表中postrouting的第一條規則

[root@linux ~]# iptables -F INPUT   #清空 filter表INPUT所有規則

[root@linux ~]# iptables -F    #清空所有規則

[root@linux ~]# iptables -t nat -F POSTROUTING   #清空nat表POSTROUTING所有規則

[root@linux ~]# iptables -P INPUT DROP  #設置filter表INPUT默認規則是 DROP  

把所有通過eth0這個網卡發往地址122.225.97.111的包都轉發到局域網的中192.168.1.130這臺機器上.它也可以配全--string功能更強大
[root@linux ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp--dst 122.225.97.111 --dport 80 -j DNAT --to-destination 192.168.1.130:80

將匹配到img.51yip.com的請求轉到局域網的192.168.1.136這臺機器上
[root@linux ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80-m string --string "img.51yip.com" --algo bm -j DNAT --to-destination 192.168.1.136:80

snat可以讓本地ip地址偽裝成其他機器的ip地址,或者是公網IP,假如我有三臺機器,一臺能上外網,另外二臺卻不可以.不能上網的機器可以偽裝成可上網的那機器的IP
[root@linux ~]# iptables -t nat -I POSTROUTING 1 -j SNAT -s 192.168.10.0/24 --to-destination 192.168.1.108

iptables簡單了解