10.15 iptables filter表小案例10.16/10.17/10.18 iptables nat表应用
2019獨角獸企業重金招聘Python工程師標準>>>
10.15 iptables filter表小案例
iptables 命令、語法總結
iptables-nvL //查看iptables規則 iptables -F //清空規則 service iptables save //保存規則,保存在/etc/sysconfig/iptables,重啟的時候會調用這里面的規則 iptables -t nat //-t指定表,如果不用-t,默認對filter 執行 iptables -Z //可以把計數器清零iptables -I/-A/-D INPUT -s 1.1.1.1 -j DROP iptables -I INPUT -s 192.168.1.0/24 -ieth0 -j ACCEPT-A 和 -I 的區別
命令語法
iptables -A INPUT -s 192.168.188.1 -p tcp--sport 1234 -d 192.168.188.128 --dport80 -j DROP iptables -I [鏈的名字] -s [源IP] -p [指定協議] --sport [指定源端口] -d [指定目標IP] --dport [指定目標端口] -j [指定行為][鏈的名字]
[指定協議]
[指定行為]
案例
需求:把80端口、22端口、21端口放行,22端口指定IP段內的IP才能進行訪問
使用腳本實現
#! /bin/bash ipt="/usr/sbin/iptables" //定義了環境變量 ipt $ipt -F //清除filter表的規則 $ipt -P INPUT DROP //定義INPUT鏈的默認策略為全部丟掉 $ipt -P OUTPUT ACCEPT //定義OUTPUT鏈的默認策略為全部放行 $ipt -P FORWARD ACCEPT //定義了FORWARD鏈的默認策略為全部放行 $ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //針對RELATED,ESTABLISHED這兩狀態進行放行 $ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT //這個網段的數據包放行 $ipt -A INPUT -p tcp --dport 80 -j ACCEPT //80端口放行 $ipt -A INPUT -p tcp --dport 21 -j ACCEPT //21端口放行腳本解釋:
定義環境變量的理由,因為正確使用命令是用絕對路徑進行使用,這樣才不會因為環境變量的改動導致無法使用命令 兩種狀態:
使用腳本的原因
因為逐個執行命令,會導致遠程終端斷開連接,如果使用腳本將會在瞬間執行好所有的命令,將不再產生端口終端的狀態
查看新增規則狀況
[root@aminglinux-02 ~]# !sh sh /usr/local/sbin/iptables.sh [root@aminglinux-02 ~]# iptables -nvL Chain INPUT (policy DROP 0 packets, 0 bytes)pkts bytes target prot opt in out source destination26 1888 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED0 0 ACCEPT tcp -- * * 192.168.133.0/24 0.0.0.0/0 tcp dpt:220 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:800 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21licmp示例:
禁止ping本機
iptables -I INPUT -p icmp --icmp -type 8 -j DROP10.16/10.17/10.18 iptables nat表應用
準備工作:
設備情況: A機器兩塊網卡ens33(192.168.133.130)、ens37(192.168.100.1),ens33可以上外網,ens37僅僅是內部網絡,B機器只有ens37(192.168.100.101),和A機器ens37可以通信互聯。
- 環境準備
一、克隆一個虛擬機
==PS:克隆好的虛擬機需要修改 hostname 以便區分==
二、對兩臺(aminglinux-02、aminglinux-02的克隆)虛擬機增加一個網卡,網卡選項選擇為LAN區段
PS:需要同時對兩臺虛擬機都進行這個操作,這個操作是目的,為的就是讓兩臺虛擬機都處于同一個虛擬交換機中(LAN區段,就類似一個虛擬交換機);克隆好虛擬機以后記得修改hostname 不然也會出錯
需要注意的一點,因為實驗環境,A機器是可以內網、外網同時訪問,所以A機器必須是要有兩個網卡;B機器可以只有一個網卡,所以在配置B機器的時候只需要把B機器的網絡適配器網絡連接調整為LAN區段也是可以的(但這樣做需要改動進入系統內調整網卡配置),但是為了方便,直接重復創建一個網卡,改動網絡連接為LAN區段即可
三、配置兩臺機器的LAN區段IP
A機器: 因為A機器配置能訪問外網的網卡,所以可以直接通過終端進行訪問 配置LAN網卡
[root@aminglinux-02 ~]# ifconfig ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.133.131 netmask 255.255.255.0 broadcast 192.168.133.255inet6 fe80::6e6a:61ff:f17c:5942 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:c4:13:b8 txqueuelen 1000 (Ethernet)RX packets 2908766 bytes 284945595 (271.7 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 7085 bytes 1858943 (1.7 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet6 fe80::44fe:e11f:f99c:4de1 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:c4:13:c2 txqueuelen 1000 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 51 bytes 8994 (8.7 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1 (Local Loopback)RX packets 68 bytes 5524 (5.3 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 68 bytes 5524 (5.3 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@aminglinux-02 network-scripts]# ifconfig ens34 192.168.100.1/24 [root@aminglinux-02 network-scripts]# ifconfig ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.133.131 netmask 255.255.255.0 broadcast 192.168.133.255inet6 fe80::6e6a:61ff:f17c:5942 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:c4:13:b8 txqueuelen 1000 (Ethernet)RX packets 2911127 bytes 285202630 (271.9 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 8305 bytes 2026122 (1.9 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.100.1 netmask 255.255.255.0 broadcast 192.168.100.255inet6 fe80::acc1:13e6:b0b6:33ab prefixlen 64 scopeid 0x20<link>ether 00:0c:29:c4:13:c2 txqueuelen 1000 (Ethernet)RX packets 39 bytes 8230 (8.0 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 81 bytes 11500 (11.2 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1 (Local Loopback)RX packets 72 bytes 5864 (5.7 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 72 bytes 5864 (5.7 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ifconfig 配置的網卡IP只是暫時生效,重啟以后又會失效,如果想永久生效,需要更改配置,但是網卡是新創建的并沒有網卡配置文件,需要cp原有的ens32網卡的配置文件,修改NAME、DEVICE兩個還需要修改相關的IP B機器 因為環境需要,我們只用使用一個網卡,所以需要在虛擬機上進行配置
四、測試兩臺機器的連通狀況
A機器pingB機器
[root@aminglinux-02 ~]# ping 192.168.100.100 PING 192.168.100.100 (192.168.100.100) 56(84) bytes of data. 64 bytes from 192.168.100.100: icmp_seq=1 ttl=64 time=0.406 ms 64 bytes from 192.168.100.100: icmp_seq=2 ttl=64 time=0.258 ms 64 bytes from 192.168.100.100: icmp_seq=3 ttl=64 time=0.333 ms 64 bytes from 192.168.100.100: icmp_seq=4 ttl=64 time=0.333 ms 64 bytes from 192.168.100.100: icmp_seq=5 ttl=64 time=0.307 ms 64 bytes from 192.168.100.100: icmp_seq=6 ttl=64 time=0.290 ms 64 bytes from 192.168.100.100: icmp_seq=7 ttl=64 time=0.323 ms ^C --- 192.168.100.100 ping statistics --- 7 packets transmitted, 7 received, 0% packet loss, time 6004ms rtt min/avg/max/mdev = 0.258/0.321/0.406/0.045 ms [root@aminglinux-02 ~]#B機器pingA機器情況
需求一
可以讓B機器連接外網
A機器配置
- 打開路由轉發
要想使用路由轉發,必須要修改內核文件,打開端口轉發
[root@aminglinux-02 ~]# cat /proc/sys/net/ipv4/ip_forward 0 /proc/sys/net/ipv4/ip_forward 這個文件默認是0 表示沒有打開 [root@aminglinux-02 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward [root@aminglinux-02 ~]# cat /proc/sys/net/ipv4/ip_forward 1- 增加一個規則
B機器配置
- 增加網關
因為使用ifconfig命令添加的IP地址是沒有網關的,通過下圖可以看到
測試連通情況
==PS:之前配置A機器的時候出了錯誤,導致一直ping不同外網,最后檢查的時候發現,設置的網卡出錯了。(因為命令也是復制PPT的,PPT里面針對設置的網卡是ens33,而我的虛擬機并沒有這個網卡)==
需求二:
實現遠程登錄B機器,也就是實現宿主機C,能ping通B機器
A機器配置
- 一、打開端口轉發
因為之前A機器B機器互通,已經做過了,可以省略
- 二、清除原有規則
因為之前A機器B機器互通,添加有規則,先把規則清楚,不讓他影響到我們之后的操作 [root@aminglinux-02 network-scripts]# iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens32 -j MASQUERADE [root@aminglinux-02 network-scripts]# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1 packets, 76 bytes) pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 1 packets, 76 bytes) pkts bytes target prot opt in out source destination
- 三、新增規則
1、
iptables -t nat -A PREROUTING -d 192.168.133.131 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22命令理解:將192.168.133.131 端口為1122 進來的數據轉發到 192.168.100.100端口22
2、
iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130命令理解:將192.168.100.100源IP轉發到192.168.133.130
B機器配置
- 在B機器上增加網關
因為之前需求一的時候,做過這個操作,所以這一步也可以省略
- 用終端連接
做完這些操作就可以嘗試在終端上進行連接
證明連接的就是B機器 查看一下是否能上網
[root@aminglinux-02-kl ~]# ping www.qq.com PING www.qq.com (14.17.42.40) 56(84) bytes of data. 64 bytes from 14.17.42.40 (14.17.42.40): icmp_seq=1 ttl=127 time=23.5 ms 64 bytes from 14.17.42.40 (14.17.42.40): icmp_seq=2 ttl=127 time=23.9 ms 64 bytes from 14.17.42.40 (14.17.42.40): icmp_seq=3 ttl=127 time=23.1 ms ^C --- www.qq.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 23.187/23.574/23.945/0.309 ms上網也是正常的
經過前面的操作,實現了C機器連接A機器,同時還能上網,完成了需求
轉載于:https://my.oschina.net/nova12315/blog/1649575
總結
以上是生活随笔為你收集整理的10.15 iptables filter表小案例10.16/10.17/10.18 iptables nat表应用的全部內容,希望文章能夠幫你解決所遇到的問題。