定義:工作于網(wǎng)絡(luò)或主機邊緣羹呵,對進出本網(wǎng)絡(luò)或本主機的網(wǎng)絡(luò)報文按照事先設(shè)定好的匹配規(guī)則進行檢查或衡,對能夠被規(guī)則所匹配的報文按照規(guī)則定義的處理機制進行處理的組件
1较沪、處理tcp逻翁、ip數(shù)據(jù)是工作在內(nèi)核層次上的,所以linux處理防火墻必須在內(nèi)核實現(xiàn)氧急,2.0之前沒有實現(xiàn)
2颗胡、用于匹配報文的 有 源ip,目標ip吩坝,源端口毒姨,目標端口,TCP钉寝。防火墻工作再傳輸層和網(wǎng)絡(luò)層
3弧呐、越是工作在低層的防火墻(網(wǎng)絡(luò)層),性能越好嵌纲,越是高層的防火墻(應(yīng)用層)泉懦,越能理解實際需求
4、并不是有防火墻就可以萬無一失了疹瘦,還應(yīng)該有入侵防御系統(tǒng)
5、進入電腦的5個布局位置
6巡球、默認規(guī)則是關(guān)閉的言沐,還需要寫關(guān)閉的規(guī)則,規(guī)則是有次序的酣栈。規(guī)則越嚴格的险胰,越早判斷越好
7、iptables 就是寫這些規(guī)則并管理這些規(guī)則的次序的一個管理軟件矿筝,最后還是要經(jīng)過netfilter來實現(xiàn)起便,netfilter的實現(xiàn)離不開iptables的規(guī)則,所以防火墻的實現(xiàn)對于他們倆是相輔相成的
8、規(guī)則的功能(四個表榆综,放置在5個檢查點)
filter:過濾
nat:轉(zhuǎn)換
SNAT:源地址ip
DNAT:目標地址ip
PAT:端口轉(zhuǎn)換(一般目標端口)
mangle:把報文首部拆開妙痹,改標志位等,改完后再封裝起來(5個位置都可以)
raw:
在一個地方實現(xiàn)兩個功能鼻疮,比如filter 和 mangle
9怯伊、五個內(nèi)置鏈:(每個點可以放不同功能)
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
10、在寫iptables要指明那個點判沟,和那個功能(表)
11耿芹、iptables
大寫字母選項:子命令
小寫字母選項:定義匹配標準及其它:
-t{filter|nat|mangle|raw}默認filter
-L:list 不加-t 是默認的filter的chain
-n:數(shù)字格式,不做反向解析顯示ip和端口挪哄,如果不加吧秕,都會反解析為主機名和服務(wù)名
-v:詳細信息。(顯示兩個計數(shù)器 package和bytes)
--line-numbers:顯示鏈中規(guī)則的行號
-x:顯示精確值迹炼,不要做單位換算
其他子命令:
管理鏈:
-F:清空鏈
iptables -t filter -F INPUT 清空filter表的INPUT鏈
iptables -F 清空filter(默認)表的所有鏈
-P:設(shè)定默認策略
iptables -t filter -P INPUT DROP 設(shè)定INPUT鏈的默認策略為丟棄{ACCEPT|DROP}
-N:新建一條自定義鏈(只能附加在內(nèi)置鏈才能工作) iptables -N FILTER_WEB
-X:刪除自定義空鏈(刪除之前先清空)
-Z:重置計數(shù)器(-v 顯示的那個計數(shù)器)
-E:重命名自定義鏈
管理規(guī)則:
-A:append 添加到尾部
-I[n]:插入為第n條砸彬,原來的第n條變?yōu)?1條
-D[n]:刪除第n條規(guī)則
-R[n]:替換第n條規(guī)則
12、表和鏈對應(yīng)的關(guān)系:
filter:INPUT疗涉,F(xiàn)ORWARD拿霉,OUTPUT
nat:PREROUTING,POSTROUTING咱扣,OUTPUT
mangle:PREROUTING绽淘,POSTROUTING云挟,OUTPUT凳枝,INPUT,F(xiàn)ORWARD
raw:PREROUTING硅瞧,OUTPUT
13偏瓤、每個鏈都有其默認策略杀怠,policy ACCEPT 通常只需要修改filter表的默認策略
14、規(guī)則和默認策略都有兩個計數(shù)器:
package:被本規(guī)則所匹配到的包的個數(shù)
bytes:所有被匹配到的包的大小和
15厅克、編寫規(guī)則語法:
目標:DROP(上策)赔退、ACCEPT、REJECT证舟、RETURN(自定義鏈返回主鏈)
REDIRECT:端口重定向
DNAT:目標地址轉(zhuǎn)換
SNAT:源地址轉(zhuǎn)換
LOG:記錄日志(--log-prefix "日志前綴")
MARK:標記(負載均衡要用) 也可以是自定義鏈(要返回RETURN)
iptables [-t 表] 大寫選項字命令 [規(guī)則號] 鏈名 匹配標準 -j 目標
匹配標準:
通用匹配:
-s|--src|--source [!] IP/NETWORK 嘆號表示取反
-d|--dst|--destination [!] IP/NETWORK
例:iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -j ACCEPT
設(shè)定默認:iptables -P INPUT DROP
service iptables save 將目前rules寫入到配置文件中 /etc/sysconfic/iptables
iptables-save>/root/iptables.rules 將目前rules寫入到重定向的文件中
iptables-restore < /path/to/iptables.rules 生效文件中的規(guī)則
-i incoming_interface:指定數(shù)據(jù)報文流入接口 INPUT FORWARD PREROUTING
-o outing_interface:指定數(shù)據(jù)報文流出接口 OUTPUT FORWARD POSTROUTING
iptables -R INPUT 1 -s 172.16.0.0/16 -d 172.16.100.1 -i eth0 -j ACCEPT
-p {tcp|udp|icmp}明確說明哪一種協(xié)議
擴展匹配:要使用 -m 擴展名稱來引用硕旗,而每個模塊一般都具有自己的專用選項,這些選項中女责,有些是必備的
隱含擴展
-p tcp
--sport 連續(xù)端口漆枚,不能間斷,而且可以取反
--dport 連續(xù)端口抵知,不能間斷墙基,而且可以取反
--tcp-flags 要檢查的標志 必須為1的標記 (除了為1的標記软族,其他的標記都是0)
--tcp-flags SYN,ACK,RST,FIN SYN
(前邊是一個要檢查的標記的表,后邊是必須為1的標記残制,剩下的要必須為0 簡寫:--syn)
ALL 所有標志位 NONE 所有標志位都為0
例:放行對web服務(wù)器的訪問:
iptables -A INPUT -d 192.168.159.12 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -s 192.168.159.12 -p tcp --sport 80 -j ACCEPT
-p udp
--sport
--dport 用法機制和tcp一樣的
例如: 本地DNS服務(wù)器立砸,INPUT OUTPUT 默認為DROP,本機地址172.161.100.1,要本地客戶端做遞歸查詢
iptables -A INPUT -d 172.16.100.1 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT-s 172.16.100.1 -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT-s 172.16.100.1 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -d 172.16.100.1 -p udp --sport 53 -j ACCEPT
-p icmp
--icmp-type
請求:8 響應(yīng):0
例:放行192.168.159.0/24 網(wǎng)段的主機可以ping 本機痘拆,本機也可以ping 0/24的所有主機
iptables -A OUTPUT -s 192.168.159.12 -d 192.168.159.0/24 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -s 192.168.159.0/24 -d 192.168.159.12 -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -s 192.168.159.12 -d 192.168.159.0/24 -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -s 192.168.159.0/24 -d 192.168.159.12 -p icmp --icmp-type 8 -j ACCEPT
顯式擴展
-m state --state
NEW仰禽,ESTABLISHED,RELATED纺蛆,INVALID
ftp服務(wù)器需要裝載吐葵,nf_conntrack_ftp模塊,可以使用modprobe命令桥氏,也可以編輯/etc/sysconfig/iptables-config文件實現(xiàn)
-m mulitport:可以指定15個以內(nèi)的離散端口 21-23,80
--source-ports
--destination-ports
--ports
iptables -I INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp -m state --state NEW -m multiport --destination-prots 21,22,80 -j ACCEPT
-m iprange:指定匹配的ip地址范圍
172.16.100.1-172.16.109.254
--src-range
--dst-range
-m limit
--limit 20/min
--limit-burst 2
iptables -I INPUT 2 -s 172.16.0.0/16 -d 172.16.100.1 -p tcp -m state --state NEW -m limit --limit 12/min --limit-burst 2 設(shè)置每分鐘最多的次數(shù)温峭,還有一次性進來的次數(shù)
-m string 報文中字符串匹配 應(yīng)用層
--string '' --algo kmp/bm
iptables -I OUTPUT 1 -d 172.16.0.0/16 -s 172.16.100.1 -p tcp --sport 80 -m string --string 'hello' --algo kmp -j REJECT http服務(wù)器返回字符串包含hello就不會被放行
-m time
--datestart
--datestop
--timestart
--timestop
--weekdays
--monthdays
-m connlimit
--connlimit-above [num] 限制一個客戶端最高發(fā)起的連接數(shù)
iptables -A INPUT -s 172.16.0.0/16 -p tcp --dport 80 -m connlimit ! --connlimit-above 5 -j ACCEPT
-m hashlimit
原來的limit 只能限制總共訪問的速率,而不能限制單個ip的訪問速度字支,hashlimit 可以限制每個ip的速率
-m recent
利用iptables的recent模塊來抵御DOS攻擊:22凤藏,建立一個列表,保存有所有訪問過指定服務(wù)的客戶端IP
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
建立一個名字為SSH的列表堕伪,存儲新建立的訪問22端口的ip地址
iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --uptate --seconds 300 --hitcount 3 --name SSH -j LOG --log-prefix "SSH Attack" 先記錄日志然后在DROP 日志放在var/log/message下
iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --uptate --seconds 300 --hitcount 3 --name SSH -j DROP
當用戶訪問22端口的時候會給列表中的字段自動更新揖庄,當在300秒之內(nèi),計數(shù)器打到3以后欠雌,就會拒絕此ip的訪問(默認拒絕5分鐘蹄梢?)
練習:
1、限制本地主機的web服務(wù)器在周一不允許訪問富俄;且新請求的速率不能超過100個每秒禁炒;web服務(wù)器包含了admin字符串的頁面不允許訪問;web服務(wù)器僅允許響應(yīng)報文離開本機霍比;
2幕袱、在工作時間,既周一到周五的8:30-18:00悠瞬,開放本機的ftp服務(wù)給172.16.0.0網(wǎng)絡(luò)中的主機訪問们豌;數(shù)據(jù)下載請求的次數(shù)每分鐘不得超過5個;
3浅妆、開放本機的ssh服務(wù)給172.16.x.1-172.16.x.100中的主機玛痊,x為你的座位號,新請求建立的速率一分鐘不得超過2個狂打;僅允許相應(yīng)報文通過其服務(wù)端口離開本機;
4混弥、拒絕TCP標志位全部為1及全部為0的報文訪問本機趴乡;
5对省、允許本機ping別的主機;但不開放別的主機ping本機晾捏;
SNAT:代理內(nèi)部客戶端訪問外部網(wǎng)絡(luò)蒿涎。在iptables的POSTROUTING
-j SNAT --to-source IP 適用static地址
-j MASQUERADE 自動將source ip 設(shè)置為外網(wǎng)ip(撥號)
DNAT:將內(nèi)部服務(wù)器發(fā)布至外部網(wǎng)絡(luò)。在iptables的PREROUTING
-j DNAT --to-destination IP:port
不但能轉(zhuǎn)換目標地址惦辛,還能映射目標端口
iptables -t nat -A PREROUTING -d 192.168.10.254 -p tcp --dport 22 -j DNAT --to-destination 172.16.100.17
轉(zhuǎn)換目標地址 然后就是在FORWARD鏈上加數(shù)據(jù)過濾規(guī)則就可以打到既轉(zhuǎn)發(fā)又過濾的效果
映射目標端口
iptables -t nat -A PREROUTING -d 192.168.10.254 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.177:8080
(將真實服務(wù)器的80端口改成8080劳秋,然后訪問前一個主機的80)
iptables -t nat -A PREROUTING -d 192.168.10.254 -p tcp --dport 6789 -j DNAT --to-destination 172.16.100.17:3306
(將mysql服務(wù)器的真實3306端口隱藏起來,讓用戶去訪問前一個主機的6789端口)
iptables -A FORWARD -d 172.16.100.17 -p tcp --dport 3306 -m state --state ESTABLISHED
(放行轉(zhuǎn)換了端口的數(shù)據(jù))
主機實現(xiàn)不同網(wǎng)絡(luò)間的轉(zhuǎn)發(fā)
/proc/sys/net/ipv4/ip_forward 設(shè)置為1
iptables -t nat -A POSTROUTING -s 192.168.117.0/24 -j SNAT --to-source 192.168.253.2
將所有192.168.117.0網(wǎng)段的訪問外網(wǎng)的請求的源地址改成192.168.253.2
iptables -P FORWARD DROP 報文轉(zhuǎn)發(fā)全部拒絕
FTP設(shè)置防火墻
ftp鏈接的默認模式為被動模式
主動模式配置
port_enable=yes
connect_from_port_20=YES
iptables需要開啟21端口的訪問權(quán)限
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
被動模式設(shè)置
1胖齐、設(shè)置開放端口
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
/etc/vsftpd/vsftpd.conf
pasv_min_port=50000
pasv_max_port=60000
iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT
2玻淑、加入內(nèi)核追蹤模塊
iptbales -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
modprobe nf_conntrack_ftp
vim /etc/sysconfig/iptables-config(開機自動加載)
IPTABLIS_MODULES="nf_conntrack_ftp"
NAT
SNAT
iptables -t nat -A POSTROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232
DNAT
iptables -t nat -A PREROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.233:80