iptables filter表案例/iptables nat表應用
iptables filter 表案例
創建一個iptables.sh腳本
[root@Ask-02 ~]# vim /usr/local/sbin/iptables.sh
寫入腳本內容:
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
最後再來查看以下規則;
[root@Ask-02 ~]# iptables -nvL
恢復默認規則;
[root@Ask-02 ~]# service iptables restart
關於icmp的包比較常見的應用,執行以下命令;
[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
iptables nat表應用
在日常生活中接觸到的路由器,它的功能就是分享上網,本來一根網線過來(其實只有一個公網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的服務器即可。
iptables filter表案例/iptables nat表應用