iptables
iptables的5條規則鏈
INPUT:數據包的目的地是訪火牆
OUTPUT:數據的源地址是防火牆
FORWARD:數據包穿越訪火牆
PREROUTING:路由前
POSTROUTING:路由後
man iptables
netfilter/iptables 表tables 鏈chains 規則policy
比喻:小區裏的一棟樓 樓裏的房子 房子裏的櫃子 增加,擺放的規則
提示
防火牆規則的執行順序默認認爲從前到後依次執行,遇到匹配的規則就不在繼續向下檢查,如果遇到不匹配的規則則會繼續向下進行。
重點:匹配上了拒絕規則也是匹配,因爲,不在繼續向下進行。
iptables 選項
-I :插入規則第1行
常用的表 filter、net、mangle、raw
表tables 鏈chains
INPUT FORWARD OUTPUT PRERROUTING POSTROUTING
filter 1 1 1 - - *****
nat - - 1 1 1 *****
mangle 1 1 1 1 1 **
raw
iptables 指令格式
iptables [-t 表名] 選項 [鏈名] [條件匹配] [-j 目標操作]
表:filter
鏈:INPUT, FORWARD, OUTPUT
表:nat
鏈:INPUT, OUTPUT,POSTROUTING, PREROUTING
選項 A(添加) D(刪除) I(插入) F(清空)
目標操作: REJECT DROP ACCEPT LOG
四元組是:
源IP地址、目的IP地址、源端口、目的端口
五元組是:
源IP地址、目的IP地址、協議號、源端口、目的端口
七元組是:
源IP地址、目的IP地址、協議號、源端口、目的端口,服務類型以及接口索引
#########
filter表:負責防火牆功能(過濾本機流入,流出的數據包)。是iptables默認使用的表,這個表定義了三個鏈(chanis)
1.INPUT :負責過濾所有目標地址是本機(防火牆)地址的數據包,通俗的講,就是過濾進入主機的數據包。
2.FORWARD :負責轉發流經主機但不進入本機的數據包。起轉發的作用,和Nat表關係很大。
3.OUTPUT :處理所有源地址是本機地址的數據包,能俗的講就是處理從主機發出去的數據包。
##########
nat表
網絡地址轉換,即負責來源與目的IP地址和port的轉換,和主機本身無關,一般用於局域 網多人共享上網或者內網IP映射外網IP及不同端口轉換服務等功能,nat表的功能很重要,這個表定義了三個鏈(chains)
1.OUTPUT
和主機發出去的數據包有關,在數據包路由之前改變主機產生的數據 包的目標地址等。
2.PREROUTING
在數據包剛到達防火牆時,進行路由判斷之前執行的規則,改變包的目的地址(DNAT功能),端口等
3.POSTROUTING
在數據包離開防火牆時進行路由判斷之後執行的規則,改變包的源地址(SNAT),端口等
mangle表
主要負責修改數據包中特殊的路由標記,如TTL,TOS,MARK等,這個表定義了5個鏈
1.INPUT
2.FORWARD
3.OUTPUT
4.PREROUTING
5.POSTROUTING
/etc/init.d/iptables start
/etc/init.d/iptables status 檢查狀態
如果防火牆開不起來,在linux命令行輸入setup-->firewall configuration-->enable進行激活
iptables -L #列出所有鏈和規則
iptables -n #以數據字的形式輸出
-t 指定默認的表
-v 顯示詳細信息
-x 禁止單位換算
-A 添加規則到最後1條
-p 指定協議
-j 形爲
-s 指定源地址
-d 指定目標地址
-I 添加規則到第1條
--icmp-type 8 #8表示ping
-i 表示數據包進入接口爲eth0,
-o 表示數據包流出的網絡接口
! 取反
基本目標操作
iptables -L -n filter #查看filter表中的鏈
iptables -L -n net #查看filter表中的鏈
iptables -L -n mangle #查看filter表中的鏈
iptables -L -n -t filter #指定默認的表
清除默認規則 臨時清除
iptables -F :刪除所有的規則
iptables -X :把所有的規則指針清零
iptables -Z :刪除自定義的鏈
例1:禁止ssh默認的22端口
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
刪除規則
iptables -D INPUT -p tcp --dport 22 -j DROP
提示:
1.iptables默認用的是filter表,因此,以上兩條命令等價
2.其中INPUT DROP 等關鍵字要大寫
3.行爲參數
--jump -j target
提示:target常見處理方法ACCEPT(接受),DROP(丟棄),REJECT(絕拒)。
一般不用REJECT(絕拒),會帶來安全隱患,REJECT(絕拒)相當於明確拒絕
SNAT(對於源地址進行轉換),DNAT(對於目的地址進行轉換),MASQUERADE(僞裝)
刪除的方法
iptables -L -n --line-numbers 查看規則行號
1. iptables -D INPUT -p tcp --dport 22 -j DROP
2. iptables -D INPUT 1 #1表示行號進行刪除規則
3. iptables -F service iptables save
例2:禁止10.0.0.0/24網段接入
iptables -t filter -A INPUT -i eth0 -s 10.0.0.0/24 -j DROP
例3:拒絕規則匹配
iptables -t filter -A INPUT -i eth0 -s ! 10.0.0.0/24 -j DROP
提示加!號,表示取反,
在生產環境中封一個非法的IP及端口
iptables -I INPUT -p tcp -s 10.0.0.189/24 -j DROP
禁止IP通過防火牆
iptables -I INPUT -p tcp -dport 22 -j DROP
禁止目的端口爲22的的數據包通過防火牆
提示:-I 的參數意思是插 入到防火牆的第一條生效,-A 是添加到最後一條。
例3:源地址不是10.0.0.101禁止連接
iptables -t filter -I INPUT -i eth0 -s ! 10.0.0.101 -j DROP
iptables -t filter -I INPUT -p icmp --icmp-type 8 -i eth0 ! 10.0.0.101 -j DROP
提示:-i 表示數據包進入接口爲eth0, -o 表示數據包流出的網絡接口
例4.源地址不是10.0.0.0/24的禁止連接
iptables -t filter -A INPUT -i eth0 -s ! 10.0.0.101 -j DROP
iptables -t filter -A INPUT -i eth0 -s 10.0.0.101 -j ACCEPT
匹配指定的協議
iptables -A INPUT -p tcp
iptables -A INPUT -p udp
提示:-p參數可以匹配協議名或者協議號,支持tcp,udp,icmp,all四種
例5:匹配指定協議外的所有協議
iptables -A INPUT -p ! tcp
例6:匹配主機
iptables -A INPUT -s 10.0.0.12
iptables -A INPUT -s 10.0.0.0/24
iptables -A INPUT ! -s 10.0.0.12
iptables -A INPUT ! -s 10.0.0.0/24
例7:匹配端口
iptables -A INPUT -p tcp -sport 53 #源端口
iptables -A INPUT -p tcp -dport 53 #目標端口
例8:匹配端口範圍
iptables -A INPUT -p tcp --sport 22:80 -j DROP #22到80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 21,22,23,24 -j ACCEPT # -m多端口參數
例9:匹配ICMP端口類型
iptables -A INPUT -P icmp --icmp-type 8 -j DROP
iptables -A INPUT -P icmp -m --icmp-type any -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
例10:匹配指定的網絡接口
iptables -A INPUT -i eth0
iptables -A INPUT -0 eth0
安全保護
Syn-flood protection:
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
源地址僞裝
iptables -t nat -A POSTROUTING -s 192.168.4.20 -j SNAT --to-source 176.130.11.84
局域網192.168.4.20僞裝爲源外網IP176.130.11.84上公網
##################
單機防火牆生產環境配置----------------》
1.配置防火牆
iptables -F
iptables -X
iptables -Z
iptables -t filter
2.配置允許SSH登陸端口進入
iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0//24 -j ACCEPT
3.配置本機的lo接口進入和流出
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
4.設置默認的防火牆禁止和允許規則
#setting default firewall policy 設置默認DROP掉FORWARD,INPUT鏈,允許OUTPUT鏈
iptables --policy OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -P INPUT DROP
5.開啓信任的IP段
iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT
6.允許HTTP服務無條件通過
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
7.允許icmp類型協議通過
iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
iptables -A INPUT -p icmp -s 192.168.1.0/24 -m icmp --icmp-type any -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
8.允許關聯的狀態包通過
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
永久保存配置文件
防火牆默認保存文件 /etc/sysconfig/iptables
方法1./etc/init.d/iptables save
方法2.iptables-save /etc/init.d/iptables
臨時 封堵單個IP
iptables -I INPUT -s 10.2.1.2 -j DROP
#####################################################################
生產環境iptables規則實踐
1.僅允許 內部合法的IP地址訪問服務器
iptables -A INPUT -s 203.82.11.0/24 -p all -j ACCEPT
iptables -A INPUT -s 122.42.61.96/27 -p all -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT
2.僅允許合法的IP段訪問監控服務nagios
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 5666 -j ACCEPT
iptables -A INPUT -s 202.82.11.0/24 -p tcp --dport 5666 -j ACCEPT
3.僅允許內部合法的IP段訪問MYSQL數據庫和ORACLE數據庫
iptable -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
iptable -A INPUT -s 192.168.1.0/24 -p tcp --dport 3307 -j ACCEPT
iptable -A INPUT -s 192.168.1.0/24 -p tcp --dport 1521 -j ACCEPT
提示:以上僅適合於LAMP一體環境或都數據庫有外網IP的情況,否則,可以不開啓訪火牆
4.僅允許內部合法的IP段訪問SSH遠程連接服務
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 50718 -j ACCEPT
iptables -A INPUT -p tcp -s 203.82.11.0 --dport 50718 -j ACCEPT
5.對HTTP服務的不同限制
a:對外提供http服務的業務,要允許http服務通過,並且不限制制IP
iptables -A INPUT -p tcp -dport 80 -j ACCEPT
b:對內提供http服務的業務,一般用特殊端口,並且限制合法IP連接或***連接
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m multiport -dport 8080,8081,8082 -j ACCEPT
iptables -A INPUT -s 203.82.11.0/24 -p tcp -m multiport -dport 8080,8081,8082 -j ACCEPT
6:snmp限制,允許以下IP地址來訪問我的161端口,不允其它IP訪問我的161端口
iptables -A INPUT -s 192.168.1.0/24 -p udp -dport 161 -j ACCEPT
iptables -A INPUT -s 203.82.11.0/24 -p udp -dport 161 -j ACCEPT
7:rsync服務的限制策略
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
iptables -A INPUT -s 203.82.11.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
提示:如果沒有外網IP,可以不開啓訪火牆
8:nfs服務的限制
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dport 111,892,2049 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p udp -m multiport --dport 111,892,2049 -j ACCEPT
9:ftp服務的限制
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
提示:以上內容表示已經建立連接的數據包,或者發出去的數據包允許通過
10.icmp協議的限制
iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
iptables -A INPUT -p icmp -s 10.0.0.0/24 -m icmp --imcp-type any -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
######################################################################
案例:設置訪火牆
1.清除規則
iptables -F
iptables -Z
iptables -X
2.配置允許SSH登陸端口進入
iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0/24 -j ACCEPT
提示:允許內部IP連接22號端口
3.配置允許lo接口的進入和流出
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
4.設置默認訪火牆和允許規則
iptables --policy OUTPUT ACCEPT -t filter //出防火牆隨便出
iptables --policy FORWARD DROP -t filter //不允許穿過訪火牆轉發
iptables --policy INPUT DROP -t filter //不允許進入訪火牆
5.開啓信任的IP段
iptables -A INPUT -s 124.43.62.96/27 -p all -j ACCEPT //遠程機房
iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT //內部網絡
iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT //信任網段
6.允許http服務無條件通過
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
7.允許icmp類型協議通過
iptables -A INPUT -p icmp -m -icmp --imcp-type any -j ACCEPT
iptables -A INPUT -p icmp -s 10.0.0.1/24 -m --imcp-type any -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
8.允許關聯的狀態包通過
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
提示:ESTABLISHED已經建立連接的包,RELATED和已有連接相關聯的包
永久保存成配置文件
執行上面的配置後,配置結果都在內存裏,這時一旦服務或者訪火牆重啓,所有的配置都會丟失,所以,在命令行的配置完畢後,我們需要把所有的配置保存成配置文件。方法如下:
法一:
/etc/init.d/iptables save
法二:
iptables-save > /etc/sysconfig/iptables
提示:/etc/sysconfig/iptables爲iptables的默認配置文件路徑
tcp狀態標誌:SYN同步,ACK應答,FIN結果,RST重設,URG緊急,PSH強追推送,ALL所有,NONE無
########################################################################################
把linux服務器配置爲上網網關和端口映射功能
DNAT 目的IP地址轉換
改變數據包目的IP地址等功能的技術,它可以使多臺服務器共享一個IP地址連入internet,並且對外提供服務(請注意是對外提供服務),通過對同一個外部IP地址分配不同的端口,映射不同的內部服務器IP和端口,從而實現提供各服務的目的,除了進行端口映射外,還可以配合SNA的功能一起使用,實現類似訪火牆設備才能實現DMZ功能,即IP的一對一映射
例:DNAT功能
iptables -t nat -A PREROUTING -d 202.3.2.3 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
將所有的訪問ip202.3.3.3並且是80端口的請求,地址改寫爲內部的WEB服務器192.168.1.100的80端口,從而實現內部IP對外提供服務的目的
####
SNAT 源IP地址轉換
這是一種改變數據包源IP地址等功能技術,經常用來使多臺計算機共享一個internet地址訪問互聯網,如辦室內部機器上網,IDC機房的內部機器上網等
SNAT功能
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 10.10.10.1:80
將源地址是 202.3.2.0的數據包地址改寫爲公網10.10.10.1出網,這是辦公室或機房內部服務器共享上網常用方法
####
MASQUERADE僞裝功能
爲動態源地址轉換,即當外部IP非固定IP時的場合經常使用的選項,例如ADSL拔號上網的情況,當然對固定單個或多個IP地址的情況,也可以使用MASQUERADE來完成共享上網
例如:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
將源地址是192.168.0.0/24的數據包進行地址僞裝,此命令可以實現ADSL線路多臺計算機共享上網
#########
生產實例
sysctl -p
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #把防火牆設爲1,轉發
172.16.1.3(linux內網IP eth1) 10.0.0.3(linux服務器 eth0)
linux服務器能ping通外網,但是172.16.1.0內部網絡不能ping外網,必須經過NAT轉發,172.16.1.0內部網絡IP地址轉發成 10.0.0.3(linux服務器 eth0),即可ping通外網
由於iptables是在內核中運行,我們需要檢查或載入如下基本相關內核模塊
modprobe ip_tables
modprobe iptables_filter
modprobe iptables_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
lsmod|grep ip
查看模塊是否加載成功
iptables -t nat -L -n #查看nat表
1.實現內網172.16.1.0能ping通外網
iptables -t nat -A POSTROUTING -s 172.16.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 10.0.0.3
或以僞裝的方式ping能外網
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
2.實現外部 10.0.0.3 IP地址端口到 172.16.1.17 內部服務器IP和端口映射
iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.1.17:80
提示:以上方法僅公是端口之間的映射
實際上我們也可以實現IP一對一的映射,即DMZ的功能
-A PREROUTING -d 124.43.60.112 -j DNAT --to-destination 10.0.0.8
-A POSTROUTING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.43.60.112
-A POSTROUTING -s 10.0.0.0/255.255.255.0 -d 10.0.0.8 -j SNAT --to-source 10.0.0.254
以上內容需要寫入配置文件/etc/sysctl.conf
3.內網IP映射多個外網IP上網
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 124.42.60.103-124.42.60.108
提示:通過映射多個內部IP到外網IP可以實現在外部看來你的IP變化
################################################################################
filter 防火牆
INPUT 主要用於主機防火牆,設置規則屏蔽處理進入本機的數據包
禁止 192.168.4.15 這個機器訪問我本機的 web 服務
iptables -t filter -A INPUT -s 192.168.4.15 -p tcp --dport 80 -j DROP
除了 192.168.4.12 這個機器 ,其他 192.168.4.0 網段的機器禁止 ping 我
iptables -t filter -A INPUT ! -s 192.168.4.12 -j DROP
FORWARD 主要用於網絡防火牆,設置規則處理穿過本機的數據包
禁止 192.168.4.11 的機器穿過防火牆訪問後端的機器
iptables -t filter -A FORWARD -s 192.168.4.11 -j DROP
nat 防火牆,需要打開內核 ip 轉發 (sysctl -w net.ipv4.ip_forward=1)
POSTROUTING 源地址僞裝
通過僞裝 192.168.4.0 網段的機器上網,首先防火牆本機可以訪問互聯網
iptables -t nat -A POSTROUTING -s 192.168.4.0 -j SNAT --to-source 防火牆外網ip地址
PERROUTING 目的地址轉換
所有訪問防火牆 10022 端口的請求都轉發給後端的 192.168.4.15 的 22 端口
iptables -t nat -A PREROUTING -p tcp --dport 10022 -j DNAT --to-destination 192.168.4.15:22
############################
網絡
RHEL6以ethX爲網卡命名
RHEL7網卡命名方式
(1)如果是以太網寫爲en,如果是無線局域網寫wl,如果是無線廣域網寫爲ww
(2)網卡的第三個字符,如果是主板集成設備,寫爲o,如果eno1;如果是獨立的網卡,寫爲s,如ens1;如果是擴展卡,表示物理位置,寫爲p,enp0s1;如果系統檢測不到網卡類型,可能第三個字符寫爲x,後面跟上該網卡的mac地址
防火牆
1、RHEL6中使用iptables作爲防火牆
2、iptables不是隻有防火牆功能
3、iptables使用四張表來實現四種功能
filter:防火牆
nat:網絡地址轉換
mangle:流量標記
raw:狀態跟蹤、
4、iptables的5條規則鏈
INPUT:數據包的目的地是防火牆
OUTPUT:數據包的源地址是防火牆
FORWARD:數據包穿越防火牆
PREROUTING:路由前
POSTROUTING:路由後
5、啓動防火牆
[root@vh11 ~]# service iptables start
6、查看規則
[root@vh11 ~]# iptables -t filter -L INPUT
[root@vh11 ~]# iptables -L INPUT
[root@vh11 ~]# iptables -L
7、清空默認規則
[root@vh11 ~]# iptables -F
8、如果服務器是單一功能的服務器(如web服務),那麼可以設置除了http協議,其他的任何訪問都拒絕
9、將默認規則設置爲DROP,再設置允許訪問web和ssh服務
[root@vh11 ~]# iptables -P INPUT DROP
[root@vh11 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@vh11 ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
10、拒絕指定的地址訪問本機的http服務
[root@vh11 ~]# iptables -A INPUT -s 192.168.122.0/24 -p tcp --dport 80 -j REJECT
11、查看規則序號
[root@vh11 ~]# iptables -nL INPUT --line-numbers
12、根據序號刪除規則
[root@vh11 ~]# iptables -D INPUT 3
13、向INPUT鏈的頭部插入規則
[root@vh11 ~]# iptables -I INPUT 1 -s 192.168.122.0/24 -p tcp --dport 80 -j REJECT
14、iptables定義的狀態
NEW:新建立連接
ESTABLISHED:已建立連接
RELATED:相關的
INVALID:無效的
UNTRACKED:未跟蹤的
15、如果收到的數據包的狀態是ESTABLISHED或RELATED,則接受
[root@vh11 ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
################################
例:
允許所以有用SSH連接目的主機
先允許22端口能過,不然,把自己退出連接終端
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -P INPUT DROP
允許外面所有端口訪問我的80端口
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT