iptables應用

1、iptables使用場景:
            內網狀況下使用;在大併發的狀況下不要開iptables不然影響性能
2、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
 
3、安全優化
 儘量不給服務器分配外網IP,能夠經過代理轉發;併發布不是特別大的外網ip環境,儘可能開啓防火牆
4、iptables簡介
 基於數據包過濾的防火牆工具,主要工做在osi模型的二三四層(通過內核編譯能夠實現七層控制)
5、基本名詞介紹
 四表:filter(INPUT,FORWARD,OUTPUT),NAT(OUTPUT,PREROUTING,POSTROUTING),         MANGLE(五鏈),RAW
 五鏈(要大寫):INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING
 鏈(chain)是規則(policy)的容器
 6、詳細介紹
  filter表:主要和主機自身相關,真正負責防火牆功能的(過濾流入流出主機的數據包)。
         INPUT:負責過濾全部進入主機的數據包(最主要)
         FORWARD:負責流經主機的數據包
         OUTPUT:處理全部源地址都是本機地址的數據包(也就是主機發出去的數據包)
  nat表:主要負責網絡地址之間的轉換,包括來源和目的端口以及ip(PREROUTING),能夠共享上網(POSTROUTING),端口轉換,企業路由和網關
          OUTPUT:和從主機發出去的數據包有關,改變數據包的目的地址
          PREROUTING:在數據包到達防火牆時進行路由判斷以前的的規則,做用是改變數據包的目的地址,目的端口等
          POSTROUTING:離開防火牆時進行路由判斷以後執行的規則,做用是改變數據包的源地址和源端口
   mangle:路由標記(TTL,TOS,mark)。。。。
7、iptables的工做流程
       採用的是數據包過濾的機制,會對請求的數據包的包頭數據進行分析,按照規則從上到下匹配

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

總結:在使用nat表的時候要注意和nat的PREROUTING,filter的FORWARD和nat的POSTROUTING一塊兒使用
     在使用filter的時候只是在INPUT鏈加以控制便可
9、實戰演練
(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
相關文章
相關標籤/搜索