iptables filter 表案例
建立一個iptables.sh腳本linux
[root@Ask-02 ~]# vim /usr/local/sbin/iptables.shshell
寫入腳本內容:vim
ipt="/usr/sbin/iptables" //定義一個環境變量(下面$ipt就等同於/usr/sbin/iptables的絕對路徑了) $ipt -F //清空以前規則(沒有-t,默認是執行的filter) $ipt -P INPUT DROP //定義策略 (INPUT策略 DROP掉) $ipt -P OUTPUT ACCEPT //定義策略(OUTPUT策略 ACCEPT接受) $ipt -P FORWARD ACCEPT // 定義策略(FORWARD策略 ACCEPT接受) $ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //增長規則(RELATED狀態,ESTABLISHED狀態放行) $ipt -A INPUT -s 192.168.135.0/24 -p tcp --dport 22 -j ACCEPT //增長規則(192.168.223網段訪問22端口的數據包放行) $ipt -A INPUT -p tcp --dport 80 -j ACCEPT //增長規則(80端口數據包方行) $ipt -A INPUT -p tcp --dport 21 -j ACCEPT //增長規則(21端口數據包放行)
完成腳本後保存退出,接着運行這個腳本;服務器
[root@Ask-02 ~]# sh /usr/local/sbin/iptables.sh網絡
最後再來查看如下規則;tcp
[root@Ask-02 ~]# iptables -nvLide
恢復默認規則;3d
[root@Ask-02 ~]# service iptables restartrest
關於icmp的包比較常見的應用,執行如下命令;code
[root@Ask-02 ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP
這條命令會禁止別人ping不通本機,可是本機能夠ping通外網
刪除這條規則命令以下;
[root@Ask-02 ~]# iptables -D INPUT -p icmp --icmp-type 8 -j DROP
在平常生活中接觸到的路由器,它的功能就是分享上網,原本一根網線過來(其實只有一個公網IP),經過路由器後,路由器分配一個網段(私網IP),這樣鏈接路由器的多臺PC或者手機等設備都能鏈接上網了,而遠端的設備認爲你的IP就是那個鏈接路由器的公網IP。這個路由器的功能其實就是由linux的iptables實現的,而iptables又是經過nat表做用而實現的。
如下舉個例子說明,假設你的兩臺機器,A機器有兩塊網卡ens33和ens33,其中ens33的IP爲192.168.135.133,ens35的IP爲192.168.100.1,ens33網卡鏈接了因特網,但ens35沒有鏈接。如今B機器有個的ens37網卡和A機器的ens37是互通的,如何設置才能讓鏈接ens35的A機器鏈接因特網,和192.168.135.133互通呢,操做以下;
[root@Ask-02 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@Ask-02 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
在此以前若是使用的是虛擬機演戲的話,須要預備幾步工做;
先對A機器進行操做設置,添加網卡
編輯虛擬機設置——選中:網絡適配器——添加:網絡適配器——點擊:下一步——保持默認:NAT模式——點擊: 完成—— 選中:網絡適配器 2——選擇:LAN 區段——添加:自定義名稱——肯定——選中剛剛添加的新LAN段 ——肯定
這裏A機器就設置好了,B機器和A機器設置操做同樣,只是須要先把本來B機器上能夠鏈接的網卡斷掉禁用掉,已方便操做,禁掉操做以下;
這裏記住A、B機器選擇的LAN區段必定要一致。
接下來ifconfig查看下各個機器的網卡現象
給A、B機器新網卡同時設置臨時IP;
[root@Ask-02 ~]# ifconfig ens37 192.168.135.1/24
[root@Ask-01 ~]# ifconfig ens37 192.168.135.100/24
B機器爲了更好的演示操做,能夠ifdown掉ens33網卡
[root@Ask-01 ~]# ifdown ens33
這樣準備工做就作好了,能夠用ping命令檢測如下A、B機器是否能相互ping通內網和外網,若是以上操做正確的話,獲得的結果是A機器能ping通外網和內網,而B機器只能ping通內網。
接下來就是讓A機器的ens37設置的可以鏈接外網
[root@Ask-02 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward //打開端口轉發
[root@Ask-02 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE //增長規則
咱們能夠執行如下命令查看設置結果
[root@Ask-02 ~]# cat /proc/sys/net/ipv4/ip_forward //默認是0端口關閉,1則是打開
1
[root@Ask-02 ~]# iptables -t nat -nvL
再來給B機器設置網關以及修改DNS;
[root@Ask-01 ~]# route add default gw 192.168.100.1
[root@Ask-01 ~]# vi /etc/resolv.conf
寫入公共DNS:119.29.29.29保存並退出
這樣B機器技能ping通A機器也能ping通外網了,好比你ping一個A機器能夠鏈接外網IP的地址或則ping百度或者騰訊的地址
遠程訪問B機器
刪掉A機器以前設定的nat表的規則;
[root@Ask-02 ~]# iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
從新設定一個nat表的規則(針對進去的數據包)
[root@Ask-02 ~]# iptables -t nat -A PREROUTING -d 192.168.135.133 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
在設定一個nat表的規則(針對回來的數據包)
[root@Ask-02 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.135.133
給B機器設置網關;
[root@Ask-02 ~]# route add default gw 192.168.100.1
最後在Xshell設置一個遠程登陸到IP地址爲192.168.135.133端口爲1122的服務器便可。