1. 程式人生 > >三十二、iptables filter表小案例、iptables nat表應用

三十二、iptables filter表小案例、iptables nat表應用

iptables小案例 iptables應用

三十二、iptables filter表小案例、iptables nat表應用

一、iptables filter表小案例

需求:只針對filter表,預設策略INPUT鏈DROP,其他兩個鏈ACCEPT,然後針對192.168.188.0/24開通22端口,對所有網段開放80端口,對所有網段開放21端口。

這個需求寫一個腳本,內容如下:

# vi /usr/local/sbin/iptables.sh

#! /bin/bash

ipt="/usr/sbin/iptables" //ipt:定義了一個變量,應寫絕對路徑。

$ipt -F

$ipt -P INPUT DROP

$ipt -P OUTPUT ACCEPT

$ipt -P FORWARD ACCEPT

$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT (一定要加)

$ipt -A INPUT -s 192.168.93.0/24 -p tcp --dport 22 -j ACCEPT 想放行的源IP和24端口

$ipt -A INPUT -p tcp --dport 80 -j ACCEPT 下面就是加端口

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

寫完後保存,直接運行/bin/sh/usr/local/sbin/iptables.sh即可。

sh命令:執行命令從標準輸入讀取或從一個文件中讀取。讀取文件裏的內容來執行。

# sh /usr/local/sbin/iptables.sh

# iptables -nvL

Chain INPUT (policy DROP 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

30 1980 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

0 0 ACCEPT tcp -- * * 192.168.188.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

-m state --state RELATED,ESTABLISHED -j ACCEPT

作用:為了讓下面的數據包和端口更順利的相互連接。

RELATED:編譯員。

ESTABLISHED:保持連接。

如果想開機啟動時初始化防火墻規則,

則需要在/etc/rc.d/rc.local中添加一行/bin/sh /usr/local/sbin/iptables.sh。

icmp案例

# iptables -I INPUT -p icmp --icmp-type 8 -j DROP 增加這條規則 -I

# iptables -D INPUT -p icmp --icmp-type 8 -j DROP 刪除這條規則 -D

--icmp要和-p icmp一起使用,後面指定類型編號。8指的是能在本機ping通其他機器,而其他機器不能ping通本機。(牢記)

二、iptables nat表應用

需求1:兩臺機器A和B。A的ens33能連外網,ens37僅是內網,B只有ens37,和A的ens37可以通信互聯。

準備工作:進虛擬機設置,將A和B兩臺機器都添加一個網卡,給第二個網卡設置一個LAN區段,區段名字自定義即可,將A和B的第2個網卡都連接同一個LAN區段。

LAN區段:相當於是一臺內網的交換機,Windows連不上。

連上同一臺交換機兩臺機器就能相互通信了。

技術分享圖片技術分享圖片

技術分享圖片技術分享圖片

# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens37

# vi /etc/sysconfig/network-scripts/ifcfg-ens37

給第二個網卡設置一個IP,修改NAME,DEVICE,IPADDR即可。

NAME=ens37

DEVICE=ens37

ONBOOT=yes

IPADDR=192.168.100.1 這個IP的網段和主網卡的網段不要一樣的。

這樣也可以改,但只是臨時生效,重啟就沒了:# ifconfig ens37 192.168.93.133/24

B機器由於不能連外網了,就只能進虛擬機操作,雖然停用了ens33,為了保險,ifdown掉它。然後給同樣拷貝ens33給ens37設置個IP。

NAME=ens37

DEVICE=ens37

ONBOOT=yes

IPADDR=192.168.100.10

然後可以先ping一下A機器的ens37網卡,若不通,先ping一下自己,看網卡連接了沒有(mii-tool ens33),檢查一下兩臺機器的IP。

# echo "1" > /proc/sys/net/ipv4/ip_forward 打開路由轉發功能,該文件默認是0

# iptables -t nat -A POSTROUTING -s 192.168.98.1/24 -o ens33 -j MASQUERADE

-s想要給能連外網的IP。-o出口的有外網的網卡名。

到B機器上設置一個網關。

# route add default gw 192.168.98.134(或133,為默認網關,不可隨意設置)

# route del default gw 192.168.98.134可以刪除網關

可以route -n查看到。此時這臺B機器就能ping通外網了。加個DNS就能ping通DNS和域名了。

# vi /etc/resolv.conf

nameserver 119.29.29.29

需求2:C只能和A通信,讓C機器可以直接連通B機器的22端口。

讓A機器做一個跳轉作用,這就叫端口映射。把B機器的22端口映射出來,A機器的外網22端口是有的狀態,比如映射成1122,實際上就是訪問1122端口的時候就是在訪問B機器的22端口。

1.打開A機器的端口轉發。

# echo "1" > /proc/sys/net/ipv4/ip_forward

# iptables -t nat -D POSTROUTING -s 192.168.98.1/24 -o ens33 -j MASQUERADE

先刪掉之前的規則,以免影響後面的操作。

A上執行:# iptables -t nat -A PREROUTING -d 192.168.93.130 -p tcp --dport 1122 -j DNAT --to 192.168.98.134:22 進去的包

A上執行:# iptables -t nat -A POSTROUTING -s 192.168.98.134 -j SNAT --to 192.168.93.130 回來的包

還需要給B機器加上網關,因為前面做過了所以省略

B上執行:# route add default gw 192.168.98.134

再新建一個會話

技術分享圖片技術分享圖片

連接即可。可以ifconfig發現是B機器的IP。


三十二、iptables filter表小案例、iptables nat表應用