目錄linux
1、 firewalld和iptables
2、 netfilter5表5鏈介紹
3、 iptables語法
4、 iptables filter表案例
5、 iptables nat表應用vim
1.Selinux(Security Enhanced Linux)windows
初學者最好是先關閉Selinux,等有必定經驗以後再考慮開啓selinux。bash
查看selinux狀態:網絡
[root@bluequark ~]# getenforce Enforcing
臨時關閉selinuxssh
[root@bluequark ~]# setenforce 0 [root@bluequark ~]# getenforce Permissive
永久關閉selinuxtcp
[root@bluequark ~]# vim /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. //此處修改成SELINUX=disabled SELINUX=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted 或者 [root@bluequark ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config [root@bluequark ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted //兩種方法修改完配置文件/etc/selinux/config後均須要重啓才能生效,可結合臨時關閉selinux的方法,等有空閒再重啓。
2.防火牆性能
兩種防火牆管理機制(兩者均基於Linux內核的 Netfilter)測試
iptables Centos6及之前版本3d
firewalld Centos7開始引進
兩種防火牆管理機制的區別
firewalld 和 iptables service之間最本質的不一樣是
iptables service 在 /etc/sysconfig/iptables 中儲存配置,而 firewalld 將配置儲存在
/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各類XML文件裏
使用 iptables service,每個單獨更改意味着清除全部舊有的規則和從/etc/sysconfig/iptables裏讀取全部新的規則 ,然而使用firewalld卻不會再建立任何新的規則 ;僅僅運行規則中的不一樣之處。
在Centos7中使用iptables服務
//中止firewalld服務 [root@lanquark ~]# systemctl stop firewalld.service //取消firewalld開機啓動 [root@lanquark ~]# systemctl disable firewalld.service Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. //安裝iptables服務 [root@lanquark ~]# yum -y install iptables-services //設定iptables開機啓動 [root@lanquark ~]# systemctl enable iptables.service Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service. //啓動iptables [root@lanquark ~]# systemctl start iptables.service [root@lanquark ~]# systemctl status iptables.service ● iptables.service - IPv4 firewall with iptables Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled) Active: active (exited) since Tue 2018-06-12 20:55:50 CST; 47s ago Main PID: 1913 (code=exited, status=0/SUCCESS) Jun 12 20:55:50 lanquark.com systemd[1]: Starting IPv4 firewall with iptables... Jun 12 20:55:50 lanquark.com iptables.init[1913]: iptables: Applying firewall rules: [ OK ] Jun 12 20:55:50 lanquark.com systemd[1]: Started IPv4 firewall with iptables.
默認狀況下,Linux系統的iptables中定義了五個表:filter表、nat表、mangle表、raw表、security表。
1.filter爲默認的表。主要用於通常的包過濾,包含三個鏈:
INPUT:主要與進入Linux主機的包有關
OUTPUT:主要與Linux要發送的包有關
FORWARD:與本機無關,只是將包轉發到其餘主機中,與nat表的關係比較大
2.nat表主要用於要轉發的包,通常與本機無關。包括三個鏈:
PREROUTING:在進行路由判斷前所要進行的規則(DNAT/REDIRECT)
POSTROUTING:進行路由判斷後要進行的規則(SNAT/MASQUERADE)
OUTPUT:與發送出去的包有關
3.mangle:主要用於改寫分組數據的相關包,通常來講使用較少。
4.raw:能夠對收到的數據包在鏈接跟蹤前進行處理。raw表的優先級最高,常常用在那些不須要nat的狀況下,以提升性能。
5.security用於強制訪問MAC的網絡規則。
iptables經常使用的五個鏈
PREROUTING:在內核進行IP路由計算前所要進行的規則(DNAT/REDIRECT)
INPUT:主要與進入Linux主機的包有關
FORWARDING:與本機無關,只是將包轉發到其餘主機中,與nat表的關係比較大
OUTPUT:由本機產生,向外發送
POSTROUTING:在內核進行IP路由判斷後要進行的規則(SNAT/MASQUERADE)
iptables處理數據包的過程:
當一個數據包進入網卡時,他首先進入PREOUTING鏈(數據包進入路由以前)-而後判斷目標IP是否本機。
若是數據包是進入本機的,他會到達INPUT鏈(經過路由表後目的地爲本機),數據包到達INPUT鏈後
進入本機內核,而後內核進行處理,處理完到OUTPUT鏈(由本機產生,向外轉變)最後到
POSTROUTING(發送到網卡接口以前)若是不是進入本機的,他會到FORWARDING鏈(經過路由
表後,目的地不爲本機)最後POSTROUTING鏈(發送到網卡接口以前)。
經常使用語法
iptables [-t table] command [match] [target]
-t table表示所使用的表,若是未指定該項則使用filter做爲默認表。
command表示iptables所要作的任務,如插入規則 ,將規則添加到鏈的末尾或刪除規則等。
match表示信息包與規則匹配所應具備的特徵(如源地址,源ip,目標地址,源末端口,協議等)。
target表示對於匹配的包要進行的處理動做。
iptables經常使用參數
-A 將新的規則添加到鏈的最後。
-I 在現存規則鏈中插入一條規則。
-F 若是指定鏈名,則刪除該鏈中的全部規則,不然清除全部鏈中的規則。
-N 建立一個新的鏈。
-X 刪除一個用戶自定義的鏈。
-Z 將全部chain的封包計數器歸零。
-P 定義鏈的默認策略。
-D 經過指定要刪除的規則或在鏈中的位置來刪除規則。
-R 取代現行規則,規則被取代後並不會改變順序。
-L 列出指定鏈中全部的規則
-n 不進行IP與主機名的反查,能夠提升信息顯示速度
-v 提供更多的信息,包括每條策略或每條規則,每條鏈的簡單流量統計
iptables通用匹配說明
-p 匹配通訊協議類型是否相符
-s 匹配數據包的源IP,能夠匹配單機或網絡
-d 匹配數據包的目的地IP地址
-i 匹配數據包從哪塊網卡進入
-o 匹配數據包從哪塊網卡送出
--sport 匹配數據包的源端口,能夠匹配單個端口或一個範圍
--dport 匹配數據包的目的地端口號
iptables的處理動做說明
ACCEPT 接收數據包,而且再也不匹配其餘規則,直接跳往下一個規則鏈。
DROP 丟棄數據包不予處理,而且再也不匹配其餘規則,直接中斷過濾程序
REJECT 阻止數據包,並通知發送方,此後再也不匹配其餘規則,直接中斷過濾程序。
REDIRECT 將數據包從新導向另外一個端口(PNAT),此後將會繼續匹配其餘規則。
MASQUERADE 改寫數據的源IP爲防火牆NIC IP,也能夠指定端口號對應的範圍,此後直接跳往下一個規則鏈。
LOG 將數據包的相關信息記錄到日誌中,而且以後會繼續匹配其餘規則。
SNAT 改寫數據包的源IP爲某一指定的IP或IP範圍。也能夠指定端口號對應的範圍,此後將直接跳往下一個規則鏈。
DNAT 改寫數據包的目的IP爲某一指定的IP或IP範圍,也能夠指定端口號對應的範圍,些後將會直接跳往下一個規則鏈。
MIRROR 將源IP與目的IP對調,將數據包送回,此後中斷過濾程序。
QUEUE 將數據包放入隊列中,交給其餘程序處理,再也不進行其餘規則匹配,直接中斷過濾程序。
RETURN 結束當前規則鏈中的過濾,返回主規則鏈繼續過濾。
查看iptables規則: iptables -nvL
[root@lanquark ~]# iptables -vnL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 560 43280 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 1792 350K REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 411 packets, 93020 bytes) pkts bytes target prot opt in out source destination
列出filter表的規則:iptables -L
[root@lanquark ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination
列出nat表規則
[root@lanquark ~]# 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 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
清空規則:iptables -F
[root@lanquark ~]# iptables -F [root@lanquark ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
清零數據包計數器:iptables -Z
[root@lanquark ~]# iptables -vnL Chain INPUT (policy ACCEPT 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 icmp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 2 402 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 16 packets, 1536 bytes) pkts bytes target prot opt in out source destination [root@lanquark ~]# iptables -Z [root@lanquark ~]# iptables -nvL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 6 428 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 1 201 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 4 packets, 432 bytes) pkts bytes target prot opt in out source destination
使用-P參數定義默認策略
//將本機的默認INPUT設爲DROP, //將本機的默認OUTPUT、FORWARD設爲ACCEPT [root@lanquark ~]# iptables -P INPUT DROP [root@lanquark ~]# iptables -P OUTPUT ACCEPT [root@lanquark ~]# iptables -P FORWARD ACCEPT [root@lanquark ~]# iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination
保存規則
[root@lanquark ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] //規則保存配置文件:/etc/sysconfig/iptables
載入默認規則
[root@lanquark ~]# systemctl restart iptables.service
增長規則
在規則鏈的最後附加一條新規則:iptables -A chain rules -j target
在指定位置添加一條新規則:iptables -I chain rulenum rules -j target
//拒絕192.168.122.0及10.1.10.0網絡主機訪問 [root@lanquark ~]# iptables -A INPUT -s 192.168.122.0/24 -j DROP [root@lanquark ~]# iptables -A INPUT -s 10.1.10.0/24 -j DROP //因爲已經拒絕了全部來自10.1.10.0網段的主機數據,如今添外 10.1.10.22 [root@lanquark ~]# iptables -I INPUT 1 -s 10.1.10.22 -j ACCEPT [root@lanquark ~]# iptables -nvL Chain INPUT (policy ACCEPT 3 packets, 603 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * * 10.1.10.22 0.0.0.0/0 462 33904 ACCEPT tcp -- * * 192.168.1.9 0.0.0.0/0 tcp dpt:22 0 0 ACCEPT tcp -- * * 192.168.1.0/24 0.0.0.0/0 tcp dpt:22 0 0 DROP all -- * * 192.168.122.0/24 0.0.0.0/0 0 0 DROP all -- * * 10.1.10.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 17 packets, 2604 bytes) pkts bytes target prot opt in out source destination
阻止全部流向攻擊者IP地址的數據包
[root@lanquark ~]# iptables -A OUTPUT -d 123.45.78.0/24 -j DROP
刪除規則:-D
刪除規則的兩種方式
一種是指定要刪除規則在規則鏈的位置(這種比較方便,尤爲是不記得原始規則是如何寫的狀況下)
//技巧:查看規則的編號 [root@lanquark ~]# iptables -nvL --line-numbers Chain INPUT (policy ACCEPT 140 packets, 28002 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- * * 10.1.10.22 0.0.0.0/0 2 595 43784 ACCEPT tcp -- * * 192.168.1.9 0.0.0.0/0 tcp dpt:22 3 0 0 ACCEPT tcp -- * * 192.168.1.0/24 0.0.0.0/0 tcp dpt:22 4 0 0 DROP all -- * * 192.168.122.0/24 0.0.0.0/0 5 0 0 DROP all -- * * 10.1.10.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 104 packets, 11360 bytes) num pkts bytes target prot opt in out source destination //刪除3號規則 iptables -D 鏈 數字 [root@lanquark ~]# iptables -D INPUT 2 [root@lanquark ~]# iptables -nvL Chain INPUT (policy ACCEPT 3 packets, 603 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * * 10.1.10.22 0.0.0.0/0 29 1940 ACCEPT tcp -- * * 192.168.1.0/24 0.0.0.0/0 tcp dpt:22 0 0 DROP all -- * * 192.168.122.0/24 0.0.0.0/0 0 0 DROP all -- * * 10.1.10.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 17 packets, 1524 bytes) pkts bytes target prot opt in out source destination
一種是指定要刪除的規則
//使用指定要刪除的規則的方法來刪除相應的規則 [root@lanquark ~]# iptables -D INPUT -s 10.1.10.22 -j ACCEPT
#!/bin/bash ipt=/usr/sbin/iptables //清空默認策略 $ipt -F //INPUT鏈默認規則拒絕 $ipt -P INPUT DROP //OUTPUT鏈默認規則容許 $ipt -P OUTPUT ACCEPT //FORWARD鏈默認規則容許 $ipt -P FORWARD ACCEPT //INPUT鏈NEW,RELATED,ESTABLISHED狀態的容許 $ipt -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT //容許源地址是192.168.133.0網段的主機訪問本機的22 $ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT //本機80端口的訪問容許 $ipt -A INPUT -p tcp --dport 80 -j ACCEPT //本機21端口的訪問容許 $ipt -A INPUT -p tcp --dport 21 -j ACCEPT #$ipt -A INPUT -p udp --sport 53 -j ACCEPT #$ipt -A INPUT -p tcp --sport 80 -j ACCEPT #$ipt -A INPUT -p tcp --sport 443 -j ACCEPT //icmp容許 $ipt -A INPUT -p icmp -j ACCEPT
[root@lanquark ~]# vim iptables_cmd.sh "iptables_cmd.sh" [New File] 0,0-1 All 1 #!/bin/bash 2 ipt=/usr/sbin/iptables 3 $ipt -F 4 $ipt -P INPUT DROP 5 $ipt -P OUTPUT ACCEPT 6 $ipt -P FORWARD ACCEPT 7 $ipt -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 8 $ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT 9 $ipt -A INPUT -p tcp --dport 80 -j ACCEPT 10 $ipt -A INPUT -p tcp --dport 21 -j ACCEPT 11 #$ipt -A INPUT -p udp --sport 53 -j ACCEPT 12 #$ipt -A INPUT -p tcp --sport 80 -j ACCEPT 13 #$ipt -A INPUT -p tcp --sport 443 -j ACCEPT 14 $ipt -A INPUT -p icmp -j ACCEPT [root@lanquark ~]# chmod u+x iptables_cmd.sh [root@lanquark ~]# ./iptables_cmd.sh [root@lanquark ~]# iptables -nvL Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 26 1986 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state NEW,RELATED,ESTABLISHED 0 0 ACCEPT tcp -- * * 192.168.133.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 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 13 packets, 1244 bytes) pkts bytes target prot opt in out source destination
關於icmp包有一個比較經常使用的應用
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
這條命令,做用是禁止他人ping你的機器,而你能夠ping通其餘機器。
A機器2塊網卡分別是外網和內網,B機器只有內網
需求1:可讓B機器聯外網
實驗環境準備
A機器
增長一塊網卡,網絡鏈接設爲lan區段,ip地址設爲192.168.2.1
[root@lanquark network-scripts]# ifconfig //外網網卡 ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.211 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::5114:2b77:d59a:bc78 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:2f:92:ee txqueuelen 1000 (Ethernet) RX packets 5995 bytes 646928 (631.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2964 bytes 403865 (394.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 //內網網卡 ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255 inet6 fe80::1e53:526f:a4af:a29d prefixlen 64 scopeid 0x20<link> ether 00:0c:29:2f:92:f8 txqueuelen 1000 (Ethernet) RX packets 208 bytes 17459 (17.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 212 bytes 21453 (20.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
B機器,網卡鏈接設爲lan
測試環境是否ok
//從A機器測試, 能夠ping通外網,也能夠ping通B機器 [root@lanquark ~]# ping www.163.com PING 163.xdwscache.ourglb0.com (112.90.246.87) 56(84) bytes of data. 64 bytes from ns.local (112.90.246.87): icmp_seq=1 ttl=58 time=2.03 ms 64 bytes from ns.local (112.90.246.87): icmp_seq=2 ttl=58 time=1.98 ms ^C --- 163.xdwscache.ourglb0.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 1.983/2.010/2.037/0.027 ms [root@lanquark ~]# ping 192.168.2.2 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data. 64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.842 ms 64 bytes from 192.168.2.2: icmp_seq=2 ttl=64 time=1.01 ms ^C --- 192.168.2.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.842/0.930/1.018/0.088 ms
從B機器測試,B機器ping不通外網,能夠pingA機器內網網卡
至此,實驗環境準備OK。
若要實現NAT功能,在A機器必須打開路由轉發功能
echo "1" >/proc/sys/net/ipv4/ip_forward
還須要在A機器添加一條規則
[root@lanquark ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens32 -j MASQUERADE [root@lanquark ~]# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 31 packets, 2675 bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 11 packets, 1178 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 10 packets, 760 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 10 packets, 760 bytes) pkts bytes target prot opt in out source destination 20 1497 MASQUERADE all -- * ens32 192.168.2.0/24 0.0.0.0/0
將B機器的網關設爲A機器的內網網卡,即(192.168.2.1)
從B機器上測試,能夠ping通外網。需求知足。
需求2:window主機鏈接B機器,由於B機器在外面是ping不通,因此咱們須要經過A機器作一個端口映射到B來遠程鏈接。
繼續利用上一需求的環境。
清空配置
[root@lanquark ~]# iptables -t nat -D POSTROUTING -s 192.168.2.0/24 -o ens32 -j MASQUERADE [root@lanquark ~]# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 1 packets, 76 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 0 packets, 0 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
清空配置後B機器只能ping通A機器的內網網卡。
打開ip轉發
//上一實驗已經打開,驗證一下 [root@lanquark ~]# cat /proc/sys/net/ipv4/ip_forward 1
在A機器上增長規則
[root@lanquark ~]# iptables -t nat -A PREROUTING -d 192.168.1.211 -p tcp --dport 1122 -j DNAT --to 192.168.2.2:22 [root@lanquark ~]# iptables -t nat -A POSTROUTING -s 192.168.2.2 -j SNAT --to 192.168.1.211
B機器的默認網關設爲A機器內網網卡(192.168.2.1)。
驗證
從windows遠程ssh到B機器
從B機器驗證
可正常實現功能。知足需求