http://10.1.1.35/ule_exec/exec09_iptables.txt

來源:互聯網
上載者:User
--

iptables


--
1,包過濾防火牆
在網路層對資料包進行選擇,主要是對資料包的所使用的協議,連接埠,源地址和目標地址等參數來進行過濾

2,代理網關
把內網和外網是完全隔離的,內網和外網不能進行直接的TCP通訊,必須通過代理網關的處理

3,狀態檢測
TCP有三向交握的階段,常用的WEB,檔案下載,發送和內送郵件等等都是TCP
狀態檢測防火牆除了包過濾防火牆所考查的參數之外,還要關心資料包串連的狀態



netfilter / iptables --iptables 的全名2.4版本後都整合有這個組件

--查看一下iptables的模組

ls /lib/modules/2.6.18-164.el5/kernel/net/netfilter/
ls /lib/modules/2.6.18-164.el5/kernel/net/ipv4/netfilter/

* stateless packet filtering (IPv4 and IPv6)
* stateful packet filtering (IPv4 and IPv6)
* all kinds of network address and port translation, e.g. NAT/NAPT (IPv4 only)
* flexible and extensible infrastructure
* multiple layers of API's for 3rd party extensions
* large number of plugins/modules kept in 'patch-o-matic' repository


iptables 基本概念


四張表: 表裡有鏈 (chain )

filter: 用來進行包過濾: INPUT OUTPUT FORWARD
nat: 用來網路位址轉譯: network address translation ,允許一個內網地址塊,通過NAT轉換成公網IP,實現對公網的訪問,解決IP地址不足
PREROUTING POSTROUTINGOUTPUT

mangle :用來對資料包標誌
PREROUTING INPUT OUTPUT FORWARD POSTROUTING


raw:對未經處理資料包的處理
PREROUTINGOUTPUT

iptables
-A 增加一條規則,預設就是在後面增加
-D 刪除
-L 列出規則
-n 以數值顯示
-I 在最前面插入規則
-v 顯示統計資料


-F 清空規則
-z 清空計數器
-x 清空自訂鍵

-t 後接表名
-P 後接鏈名
-p 後接協議名
--dport
--sport
-d
-s
-i 接網卡介面, 進入的網卡介面
-o 接網卡介面, 出去的網卡介面
-j 後接動作

動作的分類:

ACCEPT 接收資料包
DROP 丟棄資料包
REJECT 拒絕資料包,和DROP的區別就是REJECT會返回錯誤資訊,DROP不會
MASQUEREAD IP地址偽裝,使用NAT轉換成外網IP,可以PPP拔號(外網IP不固定情況)
SNAT 源地址轉換,它與MASQUEREAD的區別是SNAT是接一個固定IP
DNAT目標地址轉換
LOG 記錄日誌



例1,列規則

iptables -L --預設看的就是filter表
iptables -L -t filter

iptables -L -t nat
iptables -L -t mangle
iptables -L -t raw



例2,對ping的控制

禁用icmp協議
# iptables -t filter -A INPUT -p icmp -j DROP
--使用drop 沒有返回資訊

# iptables -t filter -A INPUT -p icmp -j REJECT
--使用reject 有返回資訊的

我要在禁用icmp協議的基礎上允許10.1.1.35(比如說是真實環境裡的管理機)能夠ping

# iptables -t filter -A INPUT -s 10.1.1.35 -p icmp -j ACCEPT
--使用這一句針對35來允許,-s 接源地址


但要注意,上面的規則寫後,還是不能ping通,因為規則就是一個存取控制清單(ACL),讀取的順序是從上往下一條一條匹配,匹配一條就不繼續往下匹配,最後匹配預設策略
所以正確寫法應該是把剛才允許10.1.1.35的寫到最前面

刪除的方法:
方法一:
# iptables -t filter -D INPUT -s 10.1.1.35 -p icmp -j ACCEPT
--加的時候怎麼寫,刪除時就要怎麼寫 A 參數換成 D就可以
方法二;
# iptables -L -n --line
# iptables -D INPUT 2
--在規則比較多或者不好寫規則的情況下,可以先用--line或者--line-number列出行號,再用行號刪除

刪除後,再把這條規則加到拒絕的規則之前
# iptables -t filter -I INPUT -s 10.1.1.35 -p icmp -j ACCEPT
-- I參數代表插入到最前面
現在就實現了 10.1.1.35可以ping通,別的都不能ping通



例3,規則的儲存與還原
# iptables-save > /etc/sysconfig/iptables--將當前規則儲存到這個檔案,檔案可以自訂

# iptables -F
# iptables -X
# iptables -Z--使用這三條來清空filter表,如果別的表也要清空的話,就加-t 表名都清一次

# iptables-restore < /etc/sysconfig/iptables --把儲存的規則還原回去


例4,預設策略的修改
# iptables -P INPUT DROP--INPUT鍵預設策略改為DROP,改回來把DROP換成ACCEPT就行了
# iptables -P OUTPUT DROP--OUTPUT鍵預設策略改為DROP



例5,實現允許ssh過來,ssh出去,別的都拒絕
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP

下面兩條定義允許ssh進來
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
下面兩條定義允許ssh出去
# iptables -A INPUT -p tcp --sport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT


例六,
在例五的基礎上允許ping自己,本地迴環127.0.0.1和10.1.1.35(管理機)
下面兩條定義能ping自己和127本地迴環
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
下面兩條定義能ping通35這台機器
# iptables -A INPUT -p icmp -s 10.1.1.35 -j ACCEPT
# iptables -A OUTPUT -p icmp -d 10.1.1.35 -j ACCEPT


例七,
在上面的基礎上再加上允許 10.1.1.0這個網段訪問httpd服務
# iptables -A INPUT -s 10.1.1.0/24 -p tcp --dport 80 -j ACCEPT
# iptables -A OUTPUT -d 10.1.1.0/24 -p tcp --sport 80 -j ACCEPT


例8
在上面的基礎上再加上允許別人訪問本台伺服器的DNS
# iptables -A INPUT -p udp --dport 53 -j ACCEPT
# iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT

再加上允許訪問別人的DNS伺服器,(如果有一個域是配置的轉寄別人,那麼也是相當於DNS訪問別人)
# iptables -A INPUT -p udp --sport 53 -j ACCEPT
# iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
# iptables -A INPUT -p tcp --sport 53 -j ACCEPT
# iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT


# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT


例9
再在上面的基礎上加上能夠發送郵件和能夠收到郵件的功能
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 143 -j ACCEPT

iptables -A INPUT -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --sport 110 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --sport 143 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 143 -j ACCEPT



ftp
主動和被動模式
21傳輸命令
20傳輸資料

主動 伺服器主動以20連接埠去串連用戶端一個大於1024的連接埠
被動 用戶端以大於1024的連接埠串連伺服器的20


用iptables實現ftp的主動模式能夠訪問

下面兩句實現的是命令連接埠的串連
# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
--不加這兩句,用戶端訪問時都不能登入,加了後可以登入,但用ls列出ftp的共用資訊的話就發現不行,這是因為20的資料連接埠還沒有做規則

# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
--主動模式是20連接埠去主動串連,所以上面兩條,實現了主動模式的串連,注意:如果使用linux的ftp命令來做實驗的話,注意登入後使用passive命令關掉被動模式再實驗

被動模式

vim /etc/vsftpd/vsftpd.conf
在最後加上
pasv_enable=YES
pasv_min_port=3000
pasv_max_port=3100--最小連接埠範圍和最大連接埠範圍可以自訂

/etc/init.d/vsftpd restart --重啟服務

下面兩句就是針對上面的被動配置來設定的允許規則
# iptables -A INPUT -p tcp --dport 3000:3100 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 3000:3100 -j ACCEPT


最後儲存下來
# iptables-save > /etc/sysconfig/iptables
----------------------------------------------------------------

一些特殊的寫法
串連連接埠
iptables -A INPUT -p tcp --dport 1:1000 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 22,80,110 -j ACCEPT

硬體地址
iptables -A INPUT -m mac --mac-source 00:23:CD:95:DA:0B -p all --dport 80 -j ACCEPT



----------------------------------------------------------------


準備兩台虛擬機器和真實機一起三台機做實驗

VM1GATEWAYVM2
eth0 vmnet1 eth0eth0
172.16.234.129--> 172.16.234.1 路由 10.1.1.35--> 10.1.1.209
網關指向172.16.234.1網關指向10.1.1.35

把gateway加上路由功能

echo "1" > /proc/sys/net/ipv4/ip_forward --臨時生效

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

sysctl -p --改完後使用此命令,使之修改永久生效


路由功能加了後,網關都指向了gateway這台物理機,那麼 兩個網段的這兩台機就能互相ping通



例1:

在FORWARD鏈上對內網的VM1進行一些限制
# iptables -A FORWARD -p icmp -j REJECT

# iptables -A FORWARD -d station209.cluster.com -p tcp --dport 80 -j REJECT

# iptables -A FORWARD -s 172.16.234.129 -p tcp --dport 80 -j REJECT



例2,
SNAT 源地址轉換

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.1.1.35

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


例3,
DNAT 目的地址轉換

# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination 172.16.234.129













聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.