防火牆的相關知識
防火牆:位於網絡之間的,根據所定義的規則對進出網絡數據包經行匹配,並匹配到包用指定的處理機制進行處理的硬件、軟件或者二者的結合
包過濾防火牆:工作於網絡層
有狀態檢測
簡單包過濾
網關代理型防火牆:工作於應用層,效率低,安全性高
Hook function:5個鉤子
INPUT
OUTPUT
RORWARK
PREROUTING
POSTRONTING
filter:過濾 在INPUT,OUTPUT,RORWARK
nat:PREROUTING(dnat)POSTRONTING(snat) OUTPUT
mangle:對數據包的封裝格式重新進行修改,在5個鉤子裏都可以
raw:PREROUTING,OUTPUT
當每個鉤子擁有不同的表時,其檢測順序是先mangle,在nat,最後filter
防火牆規則的查看:
# iptables -t table -L -n -v
-t 默認是filter
-L 列出目前的table的規則
-n 不進行IP與hostname反查,使顯示信息更快
-v 顯示詳細信息
--line-numbers 顯示的時候帶行號
防火牆規則的清除
# iptables -t table [-FXZ]
-F (flush):清空所有的已定規則
-X ():刪除用戶自定義的空鏈
-Z ():清空計數器(每一條規則都有兩個計數器,一個用於記錄被本條規則所匹配到的包的個數,另一個用戶記錄所有匹配到包的體積之和)
定義防火牆的默認策略
# iptables -P chain (ACCEPT|DROP) REJECT
# iptables -P INPUT DROP
配置防火牆
#iptables [-t table] sub_command CHAIN [num] [cretiria] [ -j ACCTION]
sub_command:
Rule:
-A (append):追加
-I (insert):插入,
-D (delete):刪除 -D OUTPUT
-R (replace):替換, -R FORWARD 6
chain:鏈
-N (new):新建
-E 重命名一條鏈
通用匹配:
-s ! IP/NETWORK 源地址
-d ! IP/NETWORK 目標地址
-p (tcp|udp|icmp)指定協議
-i interface 一般不用於output,postrouting
-o interface 一般不用在input,prerouting
擴展匹配:
隱式擴展:一般指對-p選項中指定的協議進行的擴展
-p tcp
--sport
--dport
--tcpflags 要檢查的標記,必須爲1的標記(剩餘位必須爲0)
--syn
-p udp
--sport
--dport 53 DNS 端口
-p icmp
--icmp-type
echo-request;8
echo-reply;0
顯示擴展:一般指必須使用-m選項明確指定要加載擴展
-m state:連接狀態
--state state
NEW:想要新建立的數據包
# iptables -A OUTPUT -o eth1 -m state --state NEW -j DROP
ESTABLISHED:已建立狀態的請求數據包
# iptables -P OUTPUT DROP
# iptables -A OUTPUT -s 172.16.100.1 -m state --state ESTABLISHED -j ACCEPT
RELATED:相關聯的數據包
INVALID:無效的數據包
-m (mport|multiport)第一個可能不能用,所有儘量用第二個
--source-ports 80,23
--destination-ports
--ports
# iptables -A INPUT -d 172.16.19.1 -p tcp -m multiport --source-ports 80,23 -j ACCEPT
-m iprange
--src-range ip-ip
--dst-range ip-ip
# iptables -A INPUT -m iprange --src-range 172.16.19.10-172.16.19.100 -p tcp --dport 80 -j ACCEPT
-m connlimit
--connlimit-above n 限制某個連接請求上併發請求的個數
-m limit
--limit rate 平均單位時間是幾個
--limit-burst number 突發限制的數量
# iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit --limit 1/second --limit-burst 30 -j ACCEPT
-m time
--timestart value
--timestop
--days listofdays
--datestart date
--datestop date
# iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m time --datestart 2012:02:18 --datestop 2012:02:26 --timestart 08:30:00 --timestop 14:30:00 -j ACCEPT
-m string
--algo bm|kmp
--string pattern
# iptables -A OUTPUT -s 172.16.100.1 -p tcp --dport 80 -m string --algo bm --string “wed” -j DROP
21 FTP 22 ssh 23 telent
練習:192.168.1.0/24是“狼窩”,在要求爲172.16.x.1寫規則,滿足以下要求:
1、filter表所有鏈接的默認規則爲DROP;
2、lo接口上進出的所有數據包均放行;
3、Web和ssh開放給非“狼窩”的主機;
1)ssh僅允許在工作時間(每週一至週五的9:00-18:00)被訪問,但172.16.0.0/16網絡中的主機可在任意時段訪問;
2)web服務全時段可被訪問,但每秒種接收的新請求的個數不能超過100個;
4、發往本機的ping請求,每秒只各應兩個數據包,且最高每秒只響應3個;拒絕來自“狼窩”的ping請求;本機可向任意主機發送Ping請求;
5、本機出口僅將已經建立的連接放行
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARK DROP
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
# iptables -A INPUT -s 192.168.1.0/24 -p tcp -m --multiport --source-ports 80,22 -j DROP
# iptables -A INPUT -s 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -m --timestart 09:00:00 --timestop 18:00:00 --weekdays Mon,Tue,Web,Thu,Fri -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp --syn -m limit --limit-burst 100 -j ACCEPT
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type 8 -j DROP
# iptables -A INPUT -d 172.16.19.1 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT
# iptables -A OUTPUT -s 172.16.19.1 -p icmp --icmp-type 8 -j ACCEPT
# iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT