Iptables防火牆
防火牆的實現既有基於硬件的又有基於軟件的
硬件 CISCO的 PIX ASA
Juniper netscreen ssg
神州數碼的 DCFW
H3C 的 secpath
天融信
軟件 windows 下的 IAS Internet Security Acceleration
Linux下的 netfilter架構/iptables
Iptables是網絡層防火牆
如果想精確控制 iptables+L7+squid 建構
Iptables的鏈(規則的集合)
INPUT OUTPUT FORWARD PREROUTING POSTROUTING
Iptables的表
Nat 表 包含以下幾個鏈
PREROUTING (路由判斷之前主要用於DNAT)
POSTROUTING (路由判斷之後 主要用於SNAT)
INPUT (一般不用)
Filter表 包含以下幾個鏈
INPUT (主要用於對防火牆本身的訪問)
OUTPUT (用於從防火牆本身出發的控制)
FORWARD (對經過防火牆的規則控制)
Mangle 表 (主要用於qos的設置)
Iptables -t filter -L -v -n
-t 表示後接那個表 (如果沒有-t 表名 默認是filter表)
-L list 列出所用
-v 詳細信息
-n 數字顯示
iptables -P INPUT DROP
將INPUT鏈的默認規則設爲禁止
Service iptables stop start restart save
停止、開啓、重啓、保存iptables
Iptables的語法
iptables -t 表名 指令 鏈名稱 選項 參數
指令
-A --apennd 是添加一條規則
-D --delete 鏈名稱 規則編號
-I --insert 鏈名稱 規則編號 (在編號之前插入一條規則)
-R --replace 鏈名稱 規則編號 (替換該規則)
-N --new 自定義鏈名稱 (自定義的鏈必須被引用才能起作用)
-X 刪除空的自定義鏈
-F --flash 清空鏈
-P --policy 設置默認規則
選項
來源
-s 地址/子網/網絡
-i 網卡接口名稱 【-i eth0】 (表示從eth0網卡進入的)
目標
-d 地址/子網/網絡
-o 網卡接口名稱 【-o eth1】 (表示從eth1網卡進入的)
協議
網絡層協議 ip icmp
傳輸層協議 tcp udp --sport --dport
狀態
NEW (三次握手的SYN 建立連接狀態)
ESTABLISHED (含ACK的確認狀態)
RELATED (含二次連接的 多端口的服務狀態 像FTP 的主被動模式)
動作
-j --jump (跳轉) ACCEPT
REJECT
DROP
SNAT 或(MESQUERADE 它支持通過動態獲取的ip snat)
DNAT
REDIRECT (重定向)
模塊
-m (time state string iprange Layer7)
例如1 將INPUT 和 OUTING鏈默認規則設爲DROP 並能通過ssh連接到linux,進行遠程管理 及能ping 通linux服務器
Iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
Iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT
Iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Iptables -t filter -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
Iptables -P INPUT DROP
Iptables -P OUTPUT DROP
例2
通過狀態控制,是我的client 192.168.2.1 能連上linux server
Iptables -t filter -A INPUT -s 192.168.2.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
Iptables -t filter -A OUTPUT -d 192.168.2.1 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
例3
對內外做SNAT轉換 並且內網裏有一臺 服務器(192.168.2.100)可以遠程管理
打開linux的數據包轉發功能
Iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth1 -j SNAT --to 192.168.101.10
這樣內網就基本上可以訪問外網了
訪問外網的FTP 在執行如下命令
Modprobe ip_nat_ftp 加載一下ftp轉換模塊
如果外網卡的接口是通過撥號獲取的動態ip的話可以這樣做
iptables -t nat -R POSTROUTING1-s 192.168.2.0/24 -o eth1 -j MESQUERADE
iptables -t nat -A PREROUTING -d 192.168.101.2 -p tcp --dport 3389 -i eth1 -j DNAT --to 192.168.2.100
Iptables -P INPUT DROP
Iptables -P OUTPUT DROP --設置默認策略拒絕
iptables模塊介紹
1、string(字符串匹配,可以用做內容過濾)
iptables -I FORWARD -m string --string "騰訊" -j DROP
iptables -I FORWARD -s 192.168.2.100 -m string --string "qq.com" -j DROP
iptables -I FORWARD -s 192.168.2.0/24 -m string --string "寬頻影院" -j DROP
iptables -I FORWARD -s 192.168.2.0/24 -m string --string "色情" -j DROP
iptables -I FORWARD -s 192.168.2.0/24 -p tcp --sport 80 -m string --string "廣告" -j DROP 2.
2、comment (備註匹配,可以支持最多256個字符)
Supported options:
--comment COMMENT
翻譯:這個選項增加CONFIG_IP_NF_MATCH_COMMENT,補充一個註釋匹配模塊.這個匹允許你增加一個備註都任何規則,這個備註最多支持256個字符,例如
(例子:)
-A INPUT -s 192.168.0.0/16 -m comment --comment "A privatized IP block"
譯者:我是這樣測試使用這個comment
iptables -I FORWARD -s 192.168.2.100 -p tcp --dport 80 -j DROP -m comment --comment "the bad guy can not online"
iptables -I FORWARD -s 192.168.2.100 -m string --string "qq.com" -j DROP -m comment --comment "denny go to qq.com"
這樣在iptables -L時,就看到每條規則後面出現備註的內容.可以提高可讀和理解該條規則的作用.
3. connlimit(同時連接個數限制匹配)
:這個增加一個iptables匹配允許你限制每個客戶ip地址的併發tcp連接,即同時連接到一個服務器個數.
例子:
(允許每個客戶機同時兩個telnet連接)
iptables -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT
(你也可以匹配其他的方法:)
iptables -p tcp --syn --dport 23 -m connlimit ! --connlimit-above 2 -j ACCEPT
(限制80端口最多同時16個連接請求)
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT
模塊 connlimit 作用:連接限制
--connlimit-above n 限制爲多少個
--connlimit-mask n 這組主機的掩碼,默認是connlimit-mask 32 ,即每ip.
這個主要可以限制內網用戶的網絡使用,對服務器而言則可以限制每個ip發起的連接數...比較實用
例如:只允許每個ip同時5個80端口轉發,超過的丟棄:
iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP
例如:只允許每組C類ip同時10個80端口轉發:
iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP
例如:爲了防止DOS太多連接進來,那麼可以允許最多15個初始連接,超過的丟棄.
/sbin/iptables -A INPUT -s 192.186.1.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
/sbin/iptables -A INPUT -s 192.186.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
4. time(時間匹配,iptables默認麼加載)
Match only if today is one of the given days. (format: Mon,Tue,Wed,Thu,Fri,Sat,Sun ; default everyday)
(只是匹配已經給出的天,格式Mon,Tue,Wed,Thu,Fri,Sat,Sun ;默認每天)
(開始日期 日期)
Match only if it is after `date' (Inclusive, format: YYYY]]]] h,m,s start from 0 ; default to 1970)
(只是匹配這個開始日期值之後的(包括,格式: YYYY]]]] h,m,s start from 0 ; 默認是1970):
Match only if it is before `date' (Inclusive, format: YYYY]]]] h,m,s start from 0 ; default to 2037)
(只是匹配這個開始日期值之前的(包括,格式: YYYY]]]] h,m,s start from 0 ; 默認是2037):
(例子:)
-A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri
will match packets that have an arrival timestamp in the range 8:00->18:00 from Monday to Friday.
(上面將匹配從到達日期是星期一至星期五時間從8:00至18:00的包)
-A OUTPUT -m time --timestart 8:00 --timestop 18:00 --Days Mon --date-stop 2010
will match the packets (locally generated) that have a departure timestamp in the range 8:00->18:00 on Monday only, until 2010
(上面將匹配本地產生的時間範圍直到2010年爲止的每個星期一8:00至18:00的包)
NOTE: the time match does not track changes in daylight savings time
5. iprange (ip範圍匹配,iptables默認沒有加載該模塊)
這個補丁名令匹配源/目標 IP地址可以倚着給出的地址範圍進行匹配
(例子)
iptables -A FORWARD -m iprange --src-range 192.168.1.5-192.168.1.124 -j ACCEPT
這個例子是允許源ip地址範圍192.168.1.5-192.168.1.124的包通過
iptables -A FORWARD -m iprange --dst-range 10.0.0.0-10.255.255.255 -j ACCEPT
這個例子是允許目標ip地址範圍10.0.0.0-10.255.255.255的包通過
等等 iptables支持多達上百個模塊(在/lib/iptables/),功能很豐富。關於iptables就介紹到這吧!!!!!!。