iptables的實戰整理


一、iptables使用場景:
            內網情況下使用;在大並發的情況下不要開iptables否則影響性能
二、iptables出現下面的問題:
            在yewufangwenbijiaoman/var/log/message中出現 ip(nf)_conntrack: table full 使得企業訪問較慢的解決方法:          
vim /etc/sysctl.conf
#加大 ip_conntrack_max 值
net.ipv4.ip_conntrack_max =393216
net.ipv4.netfilter.ip_conntrack_max =393216#降低 ip_conntrack timeout時間
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established =300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait =120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait =60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait =120
 
        
三、安全優化
 盡可能不給服務器分配外網IP,可以通過代理轉發;並發布不是特別大的外網ip環境,盡量開啟防火牆
四、iptables簡介
 基於數據包過濾的防火牆工具,主要工作在osi模型的二三四層(經過內核編譯可以實現七層控制)
五、基本名詞介紹
 四表:filter(INPUT,FORWARD,OUTPUT),NAT(OUTPUT,PREROUTING,POSTROUTING),         MANGLE(五鏈),RAW
 五鏈(要大寫):INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING
 鏈(chain)是規則(policy)的容器
 六、詳細介紹
  filter表:主要和主機自身相關,真正負責防火牆功能的(過濾流入流出主機的數據包)。
         INPUT:負責過濾所有進入主機的數據包(最主要)
         FORWARD:負責流經主機的數據包
         OUTPUT:處理所有源地址都是本機地址的數據包(也就是主機發出去的數據包)
  nat表:主要負責網絡地址之間的轉換,包括來源和目的端口以及ip(PREROUTING),可以共享上網(POSTROUTING),端口轉換,企業路由和網關
          OUTPUT:和從主機發出去的數據包有關,改變數據包的目的地址
          PREROUTING:在數據包到達防火牆時進行路由判斷之前的的規則,作用是改變數據包的目的地址,目的端口等
          POSTROUTING:離開防火牆時進行路由判斷之后執行的規則,作用是改變數據包的源地址和源端口
   mangle:路由標記(TTL,TOS,mark)。。。。
七、iptables的工作流程
       采用的是數據包過濾的機制,會對請求的數據包的包頭數據進行分析,按照規則從上到下匹配

小結:防火牆是層層過濾的,通過匹配上規則來允許或者組織數據包的走向,默認規則是最后處理的。
八、iptables 表和鏈的工作流程圖

總結:在使用nat表的時候要注意和nat的PREROUTING,filter的FORWARD和nat的POSTROUTING一起使用
     在使用filter的時候只是在INPUT鏈加以控制即可
九、實戰演練
(0)、查看防火牆:
iptables -L -n (-v -x)
iptables -L -n --line-numbers  帶序號顯示配合刪除
無法啟動iptables的解決(setup)
lsmod | egrep "nat | filter"    查看加載的內核文件
modprobe +內核加載文件          可以添加內核加載文件
(1)、清理參數
iptables -F :清除所有的防火牆規則
iptables -X [chain] :刪除自定義的鏈       iptables -N chain    新建自定義的鏈
iptables -Z: 對鏈計數器的清零
(2)、禁止規則
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP 禁止ssh遠程登錄
-t 指定表 -A 追加 -p 指定協議 --dport 指定目的端口 -j 采取的方式
掉ssh的處理方法:下機房,管理卡,計划任務關防火牆,
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP 會造成找不到網頁不會造成404
(3)、添加規則
封IP實戰演練:
首先要分析日志中的ip連接數:
awk '{print $1}' /opt/nginx/access.log | sort |uniq -c | sort -rn -k1
然后再封ip
iptables -I INPUT -p tcp -s IP --dport 80 -j DROP 將此規則置頂
iptables -I INPUT 2 -p tcp -s IP --dport 8080 -j DROP 將此規則放到第二位
iptables -t filter -A INPUT -i eth0 -s 172.1.1.2 -j DROP 封ip
禁止某個網段連入:不管什么服務都連不進來
iptables -A INPUT -i eth0 -s 172.1.1.0/24 -j DROP
取消該網段連入
iptables -A INPUT -i eth0 !-s 172.1.1.0/24 -j DROP
封一下ICMP協議(不讓ping),其他服務可以使用:
iptables -A INPUT -p icmp-type 8(any) -i eth0 !-s 172.1.1.2 -j DROP
更改ssh和rootuankouzhihoude防火牆操作
iptables -A INPUT -p tcp --dport 65535 ! -s 172.1.1.0/24 -j DROP
封掉3306端口
iptables -A INPUT -p tcp --dport 3306 -j DROP
匹配DNS端口:tcp&udp
iptables -A INPUT -p tcp --sport 53
iptables -A INPUT -p udp --sport 53
匹配指定端口以外的端口:
iptables -A INPUT -p tcp --dport ! 22
iptables -A INPUT -p tcp ! --doprt 22 -s 172.1.1.0/24 -j DROP
端口匹配范圍:
iptables -A INPUT -p tcp --sport 22:80
iptables -A INPUT -p tcp -m mulport --dport 21,25,24,80 -j ACCEPT
匹配網絡狀態
-m state --state
       NEW:建立的或者將啟動新的連接
       ESTABLISHED:已經建立的連接
       RELATED:正在啟動新連接
       INVALID:非法連接
       FTP
允許關聯的狀態包:
iptables -A INPUT -m state --state ESTABLISHE,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHE,RELATED -j ACCEPT
-m limit 
  --limit n/{second/minute/hour}:指定時間內的請求速度“n”為速率,后面的時間分別是秒分時
  --limit-burst [n]:在同一時間允許通過的請求“n”位數字,不能指定為默認的5
 限制每分鍾請求和並發不超過6個
 iptables -A INPUT -s 172.1.1.0/24 -d 172.1.1.2 -p icmp --icmp-type 8 -m limit --limit 20/min --limit-burst 6 -j ACCEPT
 
 iptables -A OUTPUT -s 172.1.1.2 -d 172.1.1.0/24 -p icmp --icmp-type 0 -j ACCEPT
 
 
 企業實戰
 企業及防火前實戰模式:逛公園模式和看電影模式
 看電影模式:
 (1)清理所有的防火牆規則
 iptables -F
 iptables -X
 iptables -Z
(2)設置ssh登錄
iptables -A INPUT -p tcp --dport 65535 -s 172.1.1.0/24 -j ACCEPT
(3)允許本機lo通信機制
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
(4)設置默認的防火牆允許和禁止規則
iptables -P OUTPUT ACCEPT
iptables --policy FORWARD DROP
iptables --policy INPUT DROP
(5)開啟信任的網段
iptables -A INPUT -s 172.1.1.1/24 -p all -j ACCEPT     
iptables -A INPUT -s 172.168.1.2/24 -p all -j ACCEPT
這邊開啟的信任包括:辦公室指定ip,idc內網ip,其他機房的ip
(6)允許業務訪問的端口開啟
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type any -j ACCEPT(可以聚聚ping的)
(7)允許關聯的狀態包通過(web服務不要使用FTP服務)
iptables -A INPUT -m state --state ESTABLISHED,RELEATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
使用nmap測試開啟的端口
nmap IP -p 1-65535
(8)永久保存配置
/etc/init.d/iptables save
(9)企業面試規則
自定義鏈,處理syn攻擊
iptables -N syn-flood
iptables -A INPUT -i eth0 -syn -j syn-flood
iptabls -A syn-flood -m limit --limit 5000/s --limit-burst 200 -j RETURN
iptables -A syn-flood DROP
 
 
自動封IP腳本(計划任務結合執行)
#!/bin/sh
/bin/netstat -na | grep ESTABLISHED | awk {print $5} |awk -F: '{print $1}' |sort |uniq -c |sort -rn | head -10| grep -v -E '192.168|127.0' |awk '{if ($2!=null && $1>4) {print $2}}' > /home/shell/dropip
for i in $(cat /home/shell/dropip)
do
    /sbin/iptables -I INPUT -s $i -j DROP
    echo "$i kill at `date`" >> /var/log/ddos.txt
done
 
常用服務的iptables設置
##nagios監控
iptables -A INPUT -s 172.1.1.0/24 -p tcp --dport 5666 -j ACCEPT
##mysql
iptables -A INPUT -s 172.1.1.0/24 -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -s 172.1.1.0/24 -p tcp --dport 3307 -j ACCEPT
###snmp
iptables -A INPUT -s 172.1.1.0/24 -p UDP --dport 161 -j ACCEPT
##rsync
iptables -A INPUT -s 171.0.0.1/24 -p tcp -m tcp --dport 873 -j ACCEPT
##nfs2049,portmap 111
iptables -A INPUT -s 172.1.1.0/24 -p udp -m multiport --dport 111,892,2049 -j ACCEPT
iptables -A INPUT -s 172.1.1.0/24 -p tcp -m multiport --dport 111,892,2049 -j ACCEPT
##icmp
iptables -A INPUT -s 172.1.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
 
 
網關服務器配置:
    需要具備的條件
        (1)、物理條件是具備雙網卡(eth0和外網的網關要有,eth1是內網且不具備網關)
        (2)、網關服務器要能上網
        (3)、開啟轉發功能。修改/etc/sysctl.conf下的net.ipv4.ip_forward = 1,之后再sysctrl -p使得配置生效
        (4)、iptables的forward鏈允許轉發[iptables -P INPUT ACCEPT]
        (5)、清空防火牆規則iptables -F;iptables -P FORWARD ACCEPT
        (6)、載入模塊
        先查看lsmod |egrep ^ip
        在導入
        modprobe ip_contrack
        modprobe ip_nat_ftp
        modprobe ipt_state
        modprobe ip_contrack_ftp
        modprobe iptable_filter
        (7)、然后再網關服務器上執行
        iptables -t nat -A POSTROUTING -s 172.1.1.0/24 -o eth0 -j SNAT --to-source 外網IP(路由器內網ip)
 
        iptables -t nat -A POSTROUTING -s 172.1.1.0/24 -j MASQUERADE
 
 
        (8)、訪問外網映射到內網的服務器上
        iptables -t nat -A PREROUTING -d 服務器內網IP -p tcp --dport 80 -j DNAT --to-destination 內網IP:端口
 
iptables的企業案例:
    (1)、linux主機防火牆(filter)
    (2)、共享上網(nat postrouting)
    (3)、web地址和端口映射
    (4)、ip的一對一映射
    企業應用:實現外網ip(124.42.34.112)一對一映射到內網的server(10.0.0.8)上
    網關ipeth0:124.42.60.109 eth1:10.0.0.254
首先在路由網關上綁定124.42.34.112,可以用別名的方式:
iptables -t nat -A PREROUTING -d 124.42.34.112 -j DNAT --to-destination 10.0.0.8
iptables -t nat -A POSTROUTING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.42.34.112
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -d 124.24.34.112 -j SNAT --to-source 10.0.0.254
 
 
映射多個外網ip上網:
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth0 -j SNAT 124.42.60.11 -124.42.60.16
iptables -t NAT -A POSTROUTING -s 172.0.0.0/255.255.255.0 -o eth0 -j SNAT 124.42.60.103-124.42.60.106
 
 
 
大於254台機器的網段划分,route命令講解
oldboy.blog.51cto.com下搜索route
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM