10.15 iptables filter表案例linux
10.16/10.17/10.18 iptables nat表應用vim
10.15 iptables filter表案例:windows
~1. 寫一個具體的iptables小案例,需求是把80端口、22端口、21 端口放行。可是,22端口我要指定一個IP段,只有這個IP段的IP能訪問到。其餘段的一律拒絕。須要經過一個腳原本指定(腳本可理解爲一個批量執行的命令)、bash
vim /usr/local/sbin/iptables.sh 加入如下內容網絡
#! /bin/bash 經過腳原本實現tcp
ipt=「/usr/sbin/iptables」 首先定義ipt這個變量,下面頻繁用到,不至於那麼繁瑣(寫腳本時儘可能用絕對路徑)命令行
$ipt -F 清空以前的規則 (咱們沒有-t指定一個表。因此爲filter表)3d
$ipt -P INPUT DROP 指定INPUT的默認規則爲DORP(也是爲何要用腳本的緣由,不至於不能遠程鏈接)視頻
$ipt -P OUTPUT ACCEPT 指定OUTPUT的默認規則爲ACCETP(也就是默認規則)server
$ipt -P FORWARD ACCEPT 指定FORWARD的默認規則爲ACCETP(也就是默認規則)
而後下面加一些規則出來
$ipt -A INPUT -m state --state RELATED(可理解爲連接的其餘連接),ESTABLISHED(即爲保持連接) -j ACCEPT
必需要寫的
制定了一些狀態,把他們放行。這些不太經常使用,可是要寫進來。由於咱們要知足上面的須要,這些須要總有一個相互連接的過程,爲的是讓他們更順利的連接
$ipt -A INPUT -s 192.168.159.0/24 -p tcp --dport 22 -j ACCEPT 以上需求,按照22端口的規則的數據包放行
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT 以上需求,80端口的數據包放行
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT 以上需求,21端口的數據包放行
保存退出後,要連接他。sh /usr/local/iptables.sh
iptables -nvL可查看
~2. icmp示例
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
ping外面的機器能夠ping通,ping本機就不ping(外面的也ping不通本機)
實例:
1.
[root@axinlinux-01 ~]# vim /usr/local/sbin/iptables.sh
ipt="/usr/sbin/iptables"
$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.159.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
[root@axinlinux-01 ~]# sh /usr/local/sbin/iptables.sh
[root@axinlinux-01 ~]# iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
22 1872 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- * * 192.168.159.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
--
-
----------------------------------------------------------------------------------------------------------------------------------------------------
10.16/10.17/10.18 iptables
~1. nat表應用
~2. A機器兩塊網卡ens33(192.168.159.128)、ens37(192.168.100.1),ens33能夠上外網,ens37僅僅是內部網絡,B機器只有ens37(192.168.100.100),和A機器ens37能夠通訊互聯
~3. 需求1:可讓B機器鏈接外網
說白了就是作個小路由器(A機器),小路由器能夠上網,那麼電腦就能夠上網
首先,咱們須要兩臺機器。給01添加網卡 實例~3.
~4. A機器上打開路由器轉發 echo "1">/proc/sys/net/ipv4/ip_forward
默認這個路徑文件爲0,即表明沒有開啓內核轉發。由於要使用nat的應用,必需要打開nat的端口轉發
~5. A上執行iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
這條規則,就是想讓100.0這個網段能夠上網
添加這條規則,就能夠上網了
~6. B上設置網關爲192.168.100.1
設置網關的目的:試想一下,你的數據包過去,從A到B,從B到A,我怎麼到A呢?確定的須要一個網關啊,默認網關給他設置好。寫法爲:
route add default gw 192.168.100.1
執行完這個就能夠與公網通訊了(也就是01的IP)。咱們在設置一下dns(vi etc/resolv.conf),就能夠與外網通訊了。
vi以後加上 nameserver 119.29.29.29 這個是dns的公共dns.詳見實例,~5.
其實到這,就會發現,A機器(01)就是個路由器。B機器(02)經過A機器(01)上網
~7. 需求2:C機器只能和A通訊,讓C機器能夠直接連通B機器的22端口
意思是,遠程鏈接B機器。由於A機器能夠遠程,經過A機器跳轉到B機器,達到遠程鏈接B的目的。而這個就叫作「端口映射」
把B機器的22端口映射出來。A機器的端口已經了吧,是能夠遠程的。咱們把他映射成其餘的。也就是說,咱們訪問這個其餘的端口,實際上就是訪問的B機器的22端口。從而達到遠程B機器的目的。如圖:
~8. A上打開路由器轉發echo "1">/proc/sys/net/ipv4/ip_forward
一樣的打開端口轉發
~9. A上執行 iptables -t nat -A PREROUTING -d 192.168.159.150 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
這個是進來的,個人是159.128,給他轉發到100.100的22端口
~9. A上執行 iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.159.150
這是回來的包,回來的包也要作一個操做
就從100.100回來的包,通過這個A機器,給他在作一個SNAT操做,把目標地址改爲159.128
~10. B上設置網關爲192.168.100.1
要給B加上網關,同樣的操做
route add default gw 192.168.100.1
實例:
~3.
首先準備01 的需求
6.選擇網絡適配器2,點lan區段(至關於連到內網的交換機上,這個交換機windows機器是連不上的。咱們這兩臺機器01和02咱們連上同一個交換機就能夠通訊了)
11.咱們02也相同的連上一樣的lan區段(也就是連上一樣的交換機)
以上準備工做已完成,啓動機器(注意,此時咱們遠程不上02,是由於改爲了lan區段)
12.此時01上,ifconfig會出現新的網卡ens37,咱們要修改他的配置IP、網段,能夠手動命令行來設置
ifconfig ens37 192.168.100.1/24 (固然只是在內存中更改的,重啓就沒有了,想要永久生效,就要編輯配置文件。須要cp ens33的,去修改好幾個地方)
[root@axinlinux-01 ~]# ifconfig ens37 192.168.100.1/24
這樣兩塊網卡就設置好了。外網(ens33)內網(ens37)
13.那再來設置02機器的需求
因任務須要,保險起見。咱們能夠先ifdown掉ens33.這樣02只跟01通訊
14.一樣的咱們根據需求,能夠用手動命令行來設置02的IP
小案例:阿鑫在具體修改ens37的時候,並無ens37這個網卡。從新添加了新的網卡,而且鏈接了一樣01的lan區段,纔有的ens37這個網卡
ifconfig ens37 192.168.100.100/24
小案例:阿銘視頻中,ping 01是ping不通的,是由於01 ens37的IP莫名沒有了,有ifconfig設置了一下,就行了
以上,準備工做已所有完成(~2.的準備工做完成)
~4.
[root@axinlinux-01 ~]# cat /proc/sys/net/ipv4/ip_forward
0 默認0,沒有開啓內核轉發
[root@axinlinux-01 ~]# echo "1">/proc/sys/net/ipv4/ip_forward 修改參數
[root@axinlinux-01 ~]# cat /proc/sys/net/ipv4/ip_forward
1 已打開
~5.
route -n查看網關,顯示沒有網關。 route add default gw 192.168.100.1設置默認爲這個網關
~6.
vi etc/resolv.conf
這個時候就能夠ping通這個公共dns了。固然也能夠ping通外網了。可是外網ping不一樣這個。