天天看點

Linux日常維護(filter的一個小案例,filter的nat表應用)

一個iptables的小案例。

寫一個腳本,并執行它。

在編輯之前可以先看iptables的規則,和之後會有對比

[root@litongyao ~]# iptables -nvL

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

[root@litongyao ~]# vim /usr/local/sbin/iptables.sh

ipt="/usr/sbin/iptables"                            (定義一個全局變量)

$ipt -F                                        (計數器清零)

$ipt -P INPUT DROP                                 (把進來的資料包鍊DROP掉)

$ipt -P OUTPUT ACCEPT                                (本機的資料包可以出去)

$ipt -P FORWARD ACCEPT                                (目标不是本機位址的可以通行)

$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT (指定狀态,RELATED和ESTABLISHED是要同時存在的,詳細見下)

$ipt -A INPUT -s 192.168.52.0/24 -p tcp --dport 22 -j ACCEPT (指定隻要源位址是這個網段的ip都可以遠端連接配接ssh)

$ipt -A INPUT -p tcp --dport 80 -j ACCEPT             (開放本機的80端口)HTTP服務

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT              (開放本機21端口)FTP服務

[root@litongyao ~]# sh /usr/local/sbin/iptables.sh      sh執行這個指令

再來看看iptables的規則:

[root@litongyao ~]# iptables -nvL        

Chain INPUT (policy DROP 0 packets, 0 bytes)

 pkts bytes target     prot opt in    out   source     destination         

   64  4472 ACCEPT     all  --  *   *   0.0.0.0/0      0.0.0.0/0      state RELATED,ESTABLISHED

    0     0 ACCEPT     tcp  --  *   *  192.168.52.0/24   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

    0     0 ACCEPT     tcp  --  *   *   0.0.0.0/0        0.0.0.0/0            tcp dpt:21

Chain OUTPUT (policy ACCEPT 37 packets, 3556 bytes)

可以看到我們寫的腳本都被加入了規則裡,這裡注意的是,沒有運作service iptables save,就不會儲存規則,重新開機即可恢複

實驗:關于icmp的小案例   (在開始這個小案例之前,需要把上一條規則恢複預設,既重新開機服務)

[root@litongyao ~]# service iptables restart

下面執行一條指令:

[root@litongyao ~]#  iptables -I INPUT -p icmp --icmp-type 8 -j DROP

我們ping外網,發現沒有問題,可以ping通,用别的主機ping自己的時候,卻發現ping不通了

Linux日常維護(filter的一個小案例,filter的nat表應用)
Linux日常維護(filter的一個小案例,filter的nat表應用)

Iptables的四種狀态:

NEW

NEW說明這個包是我們看到的第一個包。意思就是,這是conntrack子產品看到的某個連接配接的第一個包,它即将被比對了。比如,我們看到一個SYN 包,是我們所留意的連接配接的第一個包,就要比對它。

ESTABLISHED

ESTABLISHED已經注意到兩個方向上的資料傳輸,而且會繼續比對這個連接配接的包。處于ESTABLISHED狀态的連接配接是非常容易了解的。隻要發送并接到應答,連接配接就是ESTABLISHED的了。一個連接配接要從NEW變為ESTABLISHED,隻需要接到應答包即可,不管這個包是發往防火牆的,還是要由防火牆轉發的。ICMP的錯誤和重定向等資訊包也被看作是ESTABLISHED,隻要它們是我們所發出的資訊的應答。

RELATED

RELATED是個比較麻煩的狀态。當一個連接配接和某個已處于ESTABLISHED狀态的連接配接有關系時,就被認為是RELATED的了。換句話說,一個連接配接要想是RELATED的,首先要有一個ESTABLISHED的連接配接。這個ESTABLISHED連接配接再産生一個主連接配接之外的連接配接,這個新的連接配接就是 RELATED的了,當然前提是conntrack子產品要能了解RELATED。ftp是個很好的例子,FTP-data 連接配接就是和FTP-control有關聯的,如果沒有在iptables的政策中配置RELATED狀态,FTP-data的連接配接是無法正确建立的,還有其他的例子,比如,通過IRC的DCC連接配接。有了這個狀态,ICMP應答、FTP傳輸、DCC等才能穿過防火牆正常工作。注意,大部分還有一些UDP協定都依賴這個機制。這些協定是很複雜的,它們把連接配接資訊放在資料包裡,并且要求這些資訊能被正确了解。

INVALID

INVALID說明資料包不能被識别屬于哪個連接配接或沒有任何狀态。有幾個原因可以産生這種情況,比如,記憶體溢出,收到不知屬于哪個連接配接的ICMP錯誤資訊。一般地,我們DROP這個狀态的任何東西,因為防火牆認為這是不安全的東西

nat表的兩個應用

1A機器有兩個網卡。一個外網網卡。一個内網網卡。B機器有一個網卡,隻有一個内網網卡。需求:B機器可以上網(路由器)

準備工作:

1.給litongyao虛拟機增加一塊内網網卡,并設定為LAN區段,(如果沒有LAN區段。則需要增加一個區段。)

2.給内網網卡設定一個IP和網段。

[root@litongyao ~]# ifconfig ens37 192.168.100.100/24    

(這種方法設定的ip是臨時性的,重新開機後就會失效。可以複制ens33的配置檔案改名為ens37,并修改裡面的配置)

3.給xuniji的内網網卡設定一個ip。(因為沒有外網網卡。是以不能遠端登入連接配接)

[root@xuniji ~]# ifconfig ens33 192.168.100.50/24 

4.檢查

用一台去Ping另外一台機器,如果Ping通,則準備工作完成

實驗:

打開A機器端口轉發,并更改防火牆設定

出于安全考慮,Linux系統預設是禁止資料包轉發的。所謂轉發即當主機擁有多于一塊的網卡時,其中一塊收到資料包,根據資料包的目的ip位址将包發往本機另一網卡,該網卡根據路由表繼續發送資料包。這通常就是路由器所要實作的功能。

[root@litongyao ~]# cat /proc/sys/net/ipv4/ip_forward   (預設是0,則表示端口轉功能關閉)

[root@litongyao ~]# echo "1" > /proc/sys/net/ipv4/ip_forward        (打開端口轉發功能,将0修改成1)

[root@litongyao ~]# cat /proc/sys/net/ipv4/ip_forward

1

[root@litongyao ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE      

2.設定B機器的網關

[root@litongyao ~]# route -n                         (檢視網關的指令)

[root@litongyao ~]# route add default gw 192.168.100.1        (增加一個192.168.100.1的網關)

2.C機器隻能和A機器通信,讓C機器可以連通B機器的22端口(端口映射)

工作:

A機器上打開端口轉發

[root@litongyao ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

2.A機器上更改防火牆配置 (最好恢複預設的配置,以免出現偏差)

[root@litongyao ~]# iptables -t nat -A PREROUTING -d 192.168.52.100 -p tcp --dport 1122 -j DNAT --to 192.168.100.50:22

[root@litongyao ~]# iptables -t nat -A POSTROUTING -s 192.168.100.50 -j SNAT --to 192.168.52.100

3.B機器上設定網關

實驗:用xshell試着連接配接192.168.52.100:1122,看是否能映射到B機器的192.168.100.50

本文轉自 小新銳 51CTO部落格,原文連結:http://blog.51cto.com/13407306/2046196,如需轉載請自行聯系原作者

繼續閱讀