常見於linux系統下的應用層防火牆工具。
系統管理人員:基於iptables的NAT的包轉發,linux主機安全策略
網絡工程人員:局域網網絡控制或對員工上網行為的控制,機房中用來替換昂貴的網絡設備
安全人員:利用iptables內核或策略做安全設置
模擬用iptables控制並發的http訪問
機器分配:
場景描述:
IP1(通過ab命令進行壓力測試)->IP2(http服務)
[root@Jeason232 ~]# ab -n 1000000 -c 40 http://10.10.163.233/test.txt
// 服務器設置iptables後,這裡顯示有拒絕訪問的情況
// 查看服務器是否運行
[root@Jeason233 ~]#/etc/init.d/httpd status
// 查看服務器負載
#w
// 查看服務器並發情況
#netstat -an |grep 80|grep 10.10.163.232|grep EST -c
// 設置iptables
#iptables -I INPUT -p tcp --dport 80 -s 10.10.163.232 -m connlimit --connlimit-above 10 -j REJECT
學習iptables的意義
使用iptables搭建一套符合企業實際使用的防火牆規則 使用iptables進行防攻擊 使用iptables進行數據包轉發 明白iptables的強大及實際使用意義
Netfilter
什麼是Netfilter
NetFilter是Linux操作系統核心層內部的一個數據包處理模塊
什麼是Hook point
數據包在內核Netfilter中的五個掛載點其中包括:PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING。
Netfilter與iptables
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMSBpZD0="iptables規則組成">iptables規則組成
組成部分:四張表+五條鏈(Hook point) + 規則
四張表:filter表、nat表、mangle表、raw表
filter表:訪問控制、規則匹配
nat表:地址轉發
mangle表:修改數據包,改變包頭中內容(TTL、TOS、MARK),需要交換機支持
raw表:數據包狀態跟蹤和分析
五條鏈:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
iptables規則組成
數據包訪問控制:ACCEPT、DROP(無返回信息)、REJECT(有返回信息)
數據包改寫:SNAT、DNAT
信息記錄:LOG
iptables配置
場景一
規則1、對所有的地址開放本機的tcp(80、22、10-21)端口的訪問
規則2、允許對所有的地址開放本機的基於ICMP協議的數據包訪問
規則3、其他未被允許的端口禁止訪問
// 查看iptables版本
#iptables -v
// 查看iptables中已經設置的規則
#iptables -L
// 讓主機名等不顯示出來
#iptables -nL
// 清除iptables之前設置的規則
#iptables -F
// iptables設置規則1
#iptables -I INPUT -p tcp --dport 80 -j ACCEPT
#iptables -I INPUT -p tcp --dport 22 -j ACCEPT
#iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT
// iptables設置規則2
#iptables -I INPUT -p icmp -j ACCEPT
// iptables設置規則3
#iptables -A INPUT -j REJECT
// 刪除訪問80端口的規則,並設置80端口不可訪問
#iptables -D INPUT -p tcp --dport 80 -j ACCEPT
#iptables -I INPUT -p tcp --dport 80 -j REJECT
iptables配置存在的問題
1 本機無法訪問本機
2 本機無妨訪問其他主機
// 修改上面規則設置
#iptables -I INPUT -i lo -j ACCEPT
#ipatables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
在場景一基礎上,只允許10.103.188.233訪問本機的http服務
#iptables -D INPUT -p tcp --dport 80 -j ACCEPT
#iptables -nL
#iptables -I INPUT -p tcp -s 10.10.188.233 --dport 80 -j ACCEPT
場景二
1、ftp主動模式下iptables的規則設置
2、ftp被動模式下iptables的規則設置
ftp主動模式下iptables的規則設置
1、ftp兩節的默認模式為被動模式
2、vsftpd服務支持主動模式需要注意配置選項
port_enable=yes
connect_from_port_20=YES
3、iptables需要開啟21端口的訪問權限
#iptables -F
#iptables -I INPUT -p tcp -dport 21 -j ACCEPT
#iptables -I INPUT -p tcp -dport 22 -j ACCEPT
#iptables -I INPUT -p icmp -j ACCEPT
#iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A INPUT -j REJECT
#iptables -nL
ftp被動模式下iptables的規則設置
方法一:
為vsftpd指定數據端口,並且通過iptables開放相應需要傳輸的端口端
#iptables -I INPUT -p tcp --dport 21 -j ACCEPT
#vim /etc/vsftpd/vsftpd.conf
pasv_min_port=50000
pasv_max_port=60000
#iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT
方法二:
使用連接追蹤模塊
#iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -I INPUT -p tcp --dport 21 -j ACCEPT
// 1 臨時加載 nf_conntrack_ftp模塊
#modprobe nf_conntrack_ftp
// 2 永久加載nf_conntrack_ftp模塊
#vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"
場景三
1、員工在公司內部(10.10.155.0/24,10.10.188.0/24)能訪問服務器上的任何服務
2、當員工出差例如在上海,通過VPN連接到公司
外網(員工)—撥號到—->VPN服務器—–>內容FTP、SAMBA、NFS、SSH
3、公司有一個門戶網站需要允許公網訪問
常見端口梳理:
常見允許外網訪問的服務
服務
協議
端口
網站 www
http
80/tcp
https
443/tcp
郵件mail
smtp
25/tcp
smtps
465/tcp
pop3
110/tcp
pop3s
995/tcp
imap
143/tcp
一些常見不允許外網訪問的服務
服務
協議
端口
文件服務器
NFS
123/udp
SAMBA
137,138,139/tcp 445/tcp
FTP
20/tcp,21/tcp
遠程管理
ssh
22/tcp
數據庫
MYSQL
3306/tcp
ORACLE
1521/tcp
配置規則基本思路
ACCEPT規則:
允許本地訪問 允許已監聽狀態數據包通過 允許規則中允許的數據包通過(注意開放ssh遠程管理端口)
DENY規則:
拒絕未被允許的數據包 iptables規則保存成配置文件,防止宕機或誤刪除。
#iptables -F
#iptables -I INPUT -i lo -j ACCEPT
#iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -L
#iptables -A INPUT -s 10.10.155.0/24 -j ACCEPT
#iptables -A INPUT -s 10.10.188.0/24 -j ACCEPT
#iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#iptables -A INPUT -p tcp --dport 1723 -j ACCEPT // VPN
#iptables -I INPUT -p icmp -j ACCEPT
#iptables -A INPUT -j REJECT
// 保存iptables設置方法一
// 保存設置到配置文件中(一般為/etc/sysconfig/iptables)
#/etc/init.d/iptables save
#cat /etc/sysconfig/iptables
// 設置iptables服務開機啟動
chkconfig iptables on
// 保存iptables設置方法二
// 把iptables執行的命令保存成shell腳本,如:/opt/iptables_set.sh
// 把/bin/sh /opt/iptables_set.sh 保存到/etc/rc.local這個開啟啟動的配置文件
iptables防火牆nat表規則配置
分類
功能
作用鏈
SNAT
源地址轉換
出口 POSTROUTING
DNAT
目標地址轉換
進口 PREROUTING
SNAT場景模擬
// 准備工作
// Server: 10.10.188.173上安裝http服務,並在web目錄上放置hello.txt文件
// NAT Server: 兩個網卡:10.10.188.232和10.10.177.232
// Client: 10.10.177.233
// NAT Server:10.10.177.232
// 設置內核參數允許轉發
#vim /etc/sysctl.conf
net.ipv4.ip_forward=1 // 開啟轉發
// 執行內核參數
#sysctl -p
// 查看轉發設置是否生效
#sysctl -a|grep ip_forward
// 設置SNAT轉發
#iptables -t nat -A POSTROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232
#iptables -t nat -L
// Client: 10.10.177.233
// 確保client的網關為10.10.177.232
// 1 /etc/sysconfig/network中設置GATWAY=10.10.177.232
// 2 route add 0.0.0.0 gw 10.10.177.232
// 進行測試
#curl http://10.10.188.173/hello.txt
DNAT場景模擬
// Nat Server: 10.10.177.232和10.10.188.232
// 確定未開啟80端口
// 清除nat表中轉發規則
#iptables -t nat -A PREROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.233:80
// Server:10.10.177.233
// 確保開啟web服務
// Client:10.10.188.173
#curl http://10.10.188.232/hello.txt
iptables防火牆防CC攻擊
connlimit模塊
作用:用於限制每一個客戶端ip的並發連接數。
參數:-connlimit-above n 限制並發個數
#iptables -I INPUT -p tcp -syn -dport 80 -m connlimit -connlimit-above 100 -j REJECT
Limit模塊
作用:限速,控制流量
// 每小時3個包
#iptables -A INPUT -m limit --limit 3/hour
// --limit-burst 10 超過10個流量按照每分鐘1個
#iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
#iptables -A INPUT -p icmp -j DROP
// 使用其他機器的測試結果:超過10個一分鐘允許1個icmp包訪問
iptables實例腳本
1、系統化的介紹iptables規則配置
2、相應介紹iptables中的其他模塊
3、防攻擊策略的補充
// 實例腳本:example_iptables.sh
/bin/sh
# 加載模塊
modprobe ipt_MASQUERADE
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
# 清除原iptables規則
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
# iptables配置
iptables -P INPUT DROP #如果滿足以下規則放行,不滿足則丟棄
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 110,80,25 -j ACCEPT
iptables -A INPUT -p tcp -s 10.10.0.0/24 --dport 139 -j ACCEPT
iptables -A INPUT -i eth1 -p udp -m multiports --dports 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
iptables -A INPUT -s 192.186.0.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
iptables -A INPUT -p icmp -j DROP
iptables -t nat -A POSTROUTING -o ppp0 -s 10.10.0.0/24 -j MASUERADE
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT
iptables -P FORWARD DROP
iptables -A FORWARD -p tcp -s 10.10.0.0/24 -m multiport --dports 80,110,21,25,1723 -j ACCEPT
iptables -A FORWARD -p udp -s 10.10.0.0/24 --dport 53 -j ACCEPT
iptables -A FORWARD -p gre -s 10.10.0.0/24 -j ACCEPT
iptables -A FORWARD -p icmp -s 10.10.0.0/24 -j ACCEPT
# 上班時間禁止上qq
iptables -A FORWARD -m state --state ESTABLISHED,RELATE -j ACCEPT
iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "qq.com" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "qq.com" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "qq.com" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
# 防止上關於某島國動作電影的網站等
iptables -I FORWARD -s 10.10.0.0/24 -m string --string "ay2000.net" -j DROP
iptables -I FORWARD -s 10.10.0.0/24 -m string --string "eroticism" -j DROP
sysctl -w net.ipv4.ip_forward=1 &>/dev/null
sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null
# 允許本機完全權限
iptables -I INPUT -s 10.10.0.50 -j ACCEPT
iptables -I INPUT -s 10.10.0.50 -j ACCEPT