服務器安全之iptables
感謝老男孩老師為我們講解iptables?
優(yōu)化之路
iptables防火墻簡介
Netfilter/Iptables(以下簡稱Iptables)是unix/linux自帶的一款優(yōu)秀且開放源代碼的安全自由的**基于包過濾的防火墻工具**,它的功能十分強大,使用非常靈活,可以對流入和流出服務器的數(shù)據(jù)包進行很精細的控制。特別是它可以在一臺非常低的硬件配置下跑的非常好
Iptables是Linux2.4及2.6內核中集成的服務。其功能與安全性比其**ipfwadm,ipchains**強大的多,iptables主要工作在OSI七層的二、三、四層,如果重新編譯內核,iptables也可以支持**7層控制**(squid代理+iptables)
iptables 名詞和術語
容器:包含和被包含的關系?
iptables是表的容器?
iptables包含表 (4張表)表是鏈的容器,每個表都包含若干個鏈?
鏈是規(guī)則的容器,真正過濾規(guī)則是屬于鏈里面的?
級別介紹
iptables國家?
表省?
鏈 市?
規(guī)則 縣
iptables工作流程
iptables是采用數(shù)據(jù)包過濾機制工作的,所以它會對請求的數(shù)據(jù)包的包頭數(shù)據(jù)進行分析,并根據(jù)我們預先設定的規(guī)則來進行匹配是否可以進入到主機。
iptables工作流程小結
1.防火墻是一層層過濾的。實際是按照配置規(guī)則的順序從上到下,從前到后進行過濾的。?
2.如果匹配上規(guī)則,即明確表是阻止還是通過,此時數(shù)據(jù)包就不在向下匹配新規(guī)則了。?
3.如果所有規(guī)則中沒有明確是阻止還是通過這個數(shù)據(jù)包,也就是么有匹配上新規(guī)則,向下進行匹配,直到匹配默認規(guī)則得到明確的組織還是通過?
4.防火墻的默認規(guī)則是對應鏈的所有規(guī)則執(zhí)行完才會執(zhí)行的。
iptables表(tables)和鏈(chains)
iptables根據(jù)功能和表的定義劃分包含三個表,filter,nat,mangle,其每個表又包含不同的操作鏈(Chains)
Filter表?是真正的防火墻功能?
INPUT?進服務器 OUTPUT出服務器 FORWARD 流經(jīng)服務器?
Nat?表 負責數(shù)據(jù)包改寫 網(wǎng)關共享上網(wǎng)、IP和端口映射?
OUTPUT?
PREROUTING?
POSTROUTING?
Mangle表 路由標記 用的不多?
####所有鏈全有?
RAW 表 用處很少和Mangle一樣?
我們可以通過man iptables 來獲取
表介紹
對于filter表的控制是我們實現(xiàn)本機防火墻的重要手段,特別是對INPUT鏈的控制?
iptables表和鏈工作流程圖
提示:?iptables主要由2個作用,第一是防火墻,第二是路由。?
NAT功能:?
企業(yè)案例:1)局域網(wǎng)上網(wǎng)共享(路由和網(wǎng)關)NAT POSTROUTING?
2)外部IP和端口映射為內部IP和端口(DMZ功能),NAT PREROUTING?
Filter功能,即防火墻FILTER INPUT FORWARD?
企業(yè)案例:主要應用于服務器防火墻
配置iptables
iptables默認已經(jīng)安裝
[root@web02 ~]# iptables -Viptables v1.4.7[root@web02 ~]# rpm -qa iptablesiptables-1.4.7-16.el6.x86_64[root@web02 ~]# /etc/init.d/iptables statusiptables: Firewall is not running.
查看iptables規(guī)則
[root@web02 ~]# iptables -nLChain INPUT (policy ACCEPT)
表示針對input鏈 ACCEPT是默認規(guī)則,默認是運行通過的
target prot opt source destination input鏈下面具體的規(guī)則 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT)target prot opt source destination REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT)target prot opt source destination
如果沒有指定表,默認就是filfer表
iptables默認加載的內核模塊
[root@web02 ~]# lsmod |egrep "nat|filter|ipt"ipt_REJECT 2351 2 iptable_filter 2793 1 ip_tables 17831 1 iptable_filter
加載如下模塊到linux內核
modprobe ip_tablesmodprobe iptable_filtermodprobe iptable_natmodprobe ip_conntrack 連接跟蹤modprobe ip_conntrack_ftp 連接跟蹤modprobe ip_nat_ftpmodprobe ipt_state
再次過濾,查看生效情況
[root@web02 ~]# lsmod |egrep "nat|filter|ipt"nf_nat_ftp 3443 0nf_conntrack_ftp 11953 1 nf_nat_ftpiptable_nat 5923 0nf_nat 22676 2 nf_nat_ftp,iptable_natipt_REJECT 2351 2nf_conntrack_ipv4 9154 5 iptable_nat,nf_natnf_conntrack 79206 6 nf_nat_ftp,nf_conntrack_ftp,iptable_nat,nf_nat,nf_conntrack_ipv4,xt_stateiptable_filter 2793 1ip_tables 17831 2 iptable_nat,iptable_filter
清空所有的規(guī)則,只留下默認規(guī)則
[root@web02 ~]# iptables -F[root@web02 ~]# iptables -X[root@web02 ~]# iptables -Z
iptables -F 清除所有規(guī)則?
iptables -X 刪除用戶自定義規(guī)則?
iptables -Z 鏈的計數(shù)器清零
禁止規(guī)則
查看端口
[root@web02 ~]# netstat -lntup|grep sshtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1329/sshd tcp 0 0 :::22 :::* LISTEN 1329/sshd
命令如下:
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
-A?添加規(guī)則到指定鏈的結尾,最后一條?
-I?添加規(guī)則到指定鏈的開頭,第一條?
-t?指定表,也可以不指定默認是filter?
-p?指定協(xié)議(all.tcp,udp.icmp)默認all?
--dport?指定端口?
-j?處理的行為?
ACCPET接收、DROP丟棄、REJECT拒絕
最好使用ACCPET和DROP,因為拒絕會返回給用戶信息。?
清除規(guī)則可以使用iptables -F?
還可以使用iptables -D INPUT 1?
-D指定刪除的鏈?
--line-number?顯示序列號?
iptables -nl --line-number?
提示:需要寫上鏈和序列號
溫馨提示:恢復剛才斷掉的SSH連接?
1)去機房重啟系統(tǒng)或登錄服務器刪除剛才的禁止規(guī)則?
2)讓機房人員重啟服務器或者讓機房人員拿用戶密碼登錄進去?
3)通過服務器的遠程管理卡管理(推薦)?
4)先寫一個定時任務,每5分鐘就停止防火墻?
5)測試環(huán)境測試好,寫成腳本,批量執(zhí)行
企業(yè)案例
案例1: 加-A和-I的區(qū)別
[root@web02 ~]# iptables -A INPUT -p tcp --dport 80 -j DROP[root@web02 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
按照iptables匹配規(guī)則,首先會先匹配第一行,依次向下。這樣設置拒絕就沒有用?
如果想在中間插入可以指定插入行號
[root@web02 ~]# iptables -nLChain INPUT (policy ACCEPT)target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80Chain FORWARD (policy ACCEPT)target prot opt source destination Chain OUTPUT (policy ACCEPT)target prot opt source destination
還可以通過序列號插入iptables?命令
[root@web02 ~]# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT[root@web02 ~]# iptables -nL --line-numberChain INPUT (policy ACCEPT)num target prot opt source destination 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 3 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80Chain FORWARD (policy ACCEPT)num target prot opt source destination Chain OUTPUT (policy ACCEPT)num target prot opt source destination
小結:總結下刪除規(guī)則的方法?
1. iptables -D INPUT -p tcp –dport 8080 -j DROP?
2. iptables -F 刪所有規(guī)則?
3. /etc/init.d/iptables restart (用iptables命令行配置的命令都是臨時生效)?
4. iptables -D INPUT 規(guī)則序號
案例:禁止10.0.0.0網(wǎng)段接入?
基于客戶端網(wǎng)段控制
[root@web02 ~]# iptables -A INPUT -s 10.0.0.0/24 -j DROP
-s指定源地址?
還可以使用不是這個網(wǎng)段的進行操作
[root@web02 ~]# iptables -A INPUT ! -s 10.0.0.0/24 -j DROP
案例:控制22端口 eth0網(wǎng)卡進來的數(shù)據(jù)
iptables -A INPUT -p tcp --dport 22 -i eth0 ! -s 10.0.0.0/24 -j DROPiptables -A INPUT -p tcp --dport 22 -i eth0 ! -s 192.168.1.1 -j DROP
封掉3306端口
iptables -A INPUT -p tcp --dport 3306 -j DROP
匹配指定的協(xié)議
iptables -A INPUT -p tcpiptables -A INPUT -p udp
匹配指定協(xié)議外的所有協(xié)議
iptables -A INPUT ! -p tcp
“匹配單一端口**
iptables -A INPUT -p tcp --sport 22 源端口iptables -A INPUT -p udp --dport 22 目的端口
匹配端口范圍:
iptables -A INPUT -p tcp --sport 22:80iptables -A INPUT -p tcp --dport 21,22,23 -j DROP---->錯誤語法iptables -I INPUT -p tcp -m multiport --dport 22,23,24,25 -j DROPiptables -I INPUT -p tcp -m multiport ! --dport 22,23,24,25 -j DROPiptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPTiptables -I INPUT -p tcp --dport 18:80 -j DROP <----最佳方法
匹配ICMP類型
iptables -A INPUT -p icmp-type 8
icmp中有很多類型,其中8代表ping?
例:
iptables -A INPUT -p icmp --icmp-type 8 -j DROPiptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
因為icmp類型很多可以使用any,icmp的所有類型全禁
iptables -A INPUT -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
企業(yè)場景禁ping
iptables -A INPUT -p icmp --icmp-type 8 -s 10.0.0.0/24 -j ACCEPT
根據(jù)需求來設定
匹配網(wǎng)絡狀態(tài)
-m state --state NEW:已經(jīng)或啟動新的連接 ESTABLISHED:已建立的連接 RELATED:正在啟動的新連接 INVALID:非法或無法識別的FTP服務是特殊的,需要配狀態(tài)連接
允許關聯(lián)的狀態(tài)包通過(Web服務不要使用FTP服務)?
允許關聯(lián)的狀態(tài)包
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
限制指定時間包的允許通過數(shù)量及并發(fā)數(shù)
-m limit --limit n/{second/minute/hour}
指定時間內的請求速率“n”為速率,后面為時間分別為:秒、分、時
--limit-burst [n]
在同一時間內允許通過的請求“n”為數(shù)字,不指定默認為5
iptables -I INPUT -s 10.0.1.0/24 -p icmp --icmp-type 8 -m limit --limit 5/min --limit-burst 2 -j ACCEPT
手動執(zhí)行iptables命令配置企業(yè)生產(chǎn)環(huán)境防火墻
生產(chǎn)環(huán)境配置主機防火墻的兩種模式?
1. 允許所有程序,對操作傷害的進行拒絕操縱 應用場景:企業(yè)配置上網(wǎng)網(wǎng)關路由?
2. 拒絕所有操作,允許指定的操作 應用場景:服務器主機防火墻
配置企業(yè)主機防火墻
[root@web02 ~]# iptables -F[root@web02 ~]# iptables -X[root@web02 ~]# iptables -Z
1.設置允許SSH登錄端口
[root@web02 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCETP[root@web02 ~]# iptables -A INPUT -p tcp -s 10.0.0.1/24 -j ACCEPT
2.設置允許本機lo通信規(guī)則
[root@web02 ~]# iptables -A INPUT -i lo -j ACCEPT[root@web02 ~]# iptables -A OUTPUT -o lo -j ACCEPT
3.設置默認規(guī)則
[root@web02 ~]# iptables -P INPUT DROP[root@web02 ~]# iptables -P OUTPUT ACCEPT[root@web02 ~]# iptables -P FORWARD DROP
輕松應對IDC機房帶寬突然暴漲問題?
查看規(guī)則(現(xiàn)在的服務器是最安全的)
[root@web02 ~]# iptables -nL --line-numberChain INPUT (policy DROP)num target prot opt source destination 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 2 ACCEPT tcp -- 10.0.0.0/24 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP)num target prot opt source destination Chain OUTPUT (policy ACCEPT)num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4.開啟信任的IP網(wǎng)段?
允許IDC LAN/WAN?和辦公網(wǎng)IP的訪問,及對外合作機構訪問
iptables -A INPUT -s 124.23.62.96/27 -p all -j ACCEPT #辦公室固定IP段iptables -A INPUT -s 192.168.2.0/24 -p all -j ACCEPT #IDC機房的內網(wǎng)網(wǎng)段iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT #其他機房的內網(wǎng)網(wǎng)段iptables -A INPUT -s 203.82.24.0/24 -p all -j ACCEPT #IDC機房的外網(wǎng)網(wǎng)段iptables -A INPUT -s 203.82.23.0/24 -p all -j ACCEPT #其他IDC機房的外網(wǎng)網(wǎng)段
現(xiàn)在還只是我們可以訪問,對外還無法訪問?
5.允許icmp類型協(xié)議通過
iptables -A INPUT -p icmp -m icmp-type any -j ACCEPT
提示:如果不想開,就不執(zhí)行此命令
iptables -A INPUT -p icmp -s 10.0.0.0/24 -m icmp --icmp-type any -j ACCEPT
6.允許關聯(lián)的狀態(tài)包通過(Web服務不要使用FTP服務)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
提示:以上配置就是合格服務器應該配置的
保存
默認使用iptables并沒有永久保存,重啟失效。?
第一種方法:
/etc/init.d/iptables save 保存到/etc/sysconfig/iptables 下面
顯示如下格式
[root@web02 ~]# cat /etc/sysconfig/iptables# Generated by iptables-save v1.4.7 on Mon Aug 15 01:33:44 2016*nat:PREROUTING ACCEPT [1413:153792]:POSTROUTING ACCEPT [132:8834]:OUTPUT ACCEPT [132:8834]COMMIT# Completed on Mon Aug 15 01:33:44 2016# Generated by iptables-save v1.4.7 on Mon Aug 15 01:33:44 2016*filter:INPUT DROP [1798:662465]:FORWARD DROP [0:0]:OUTPUT ACCEPT [288:21100]-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -s 10.0.0.0/24 -p tcp -j ACCEPT -A INPUT -i lo -j ACCEPT -A OUTPUT -o lo -j ACCEPT COMMIT# Completed on Mon Aug 15 01:33:44 2016
第二種方法:
[root@web02 ~]# iptables-save >/etc/sysconfig/iptables
推薦使用第一種方式
測試:我通過其他服務器掃描我們配置的防火墻?
使用nmap工具進行分析,此工具需要安裝
[root@web02 ~]# yum -y install nmap
使用如下:更多可以使用nmap –help
[root@web02 ~]# nmap 10.0.0.8 -p 1-65535Starting Nmap 5.51 ( http://nmap.org ) at 2016-08-15 04:28 CSTNmap scan report for 10.0.0.8Host is up (0.0000070s latency).Not shown: 65532 closed portsPORT STATE SERVICE22/tcp open ssh80/tcp open http3306/tcp open mysqlNmap done: 1 IP address (1 host up) scanned in 14.21 seconds
生產(chǎn)維護
(1)確定的規(guī)則;?
編輯/etc/sysconfig/iptables?
加入想要的規(guī)則:例如
-A INPUT -p tcp -m tcp --dport 873 -j ACCEPT/etc/init.d/iptables reload
或者改配置的同時命令在執(zhí)行,也是永久生效。?
(2)命令試錯,沒問題了,然后放配置文件,這時不需要重啟了
惡意IP封殺
封IP,在第一行封。10.0.0.1 這個機器攻擊我們服務器或者在BBS里發(fā)垃圾帖子?
手工封IP:
iptables -I INPUT -s 10.0.0.1 -j DROP #粗,范圍大,外部攻擊者Iptables -I INPUT -s 10.0.0.1 -j DROPiptables -I INPUT -p tcp -s 10.0.0.1 --dport 80 -j DROP #細,范圍小。內部
自動封IP:分析Web或應用日志或者網(wǎng)絡連接狀態(tài)封掉垃圾IP?
腳本:
#!/bin/bash#this is a server firewall created by oldboy 17:03 2006-7-26# e_mail:31333741@qq.com# qqinfo:49000448# function: a server firewall# version:1.1 ################################################# oldboy trainning info. # QQ 1986787350 70271111# site: http://www.etiantian.org# blog: http://oldboy.blog.51cto.com# oldboy trainning QQ group: 208160987 45039636#################################################define variable PATHIPT=/sbin/iptables#Remove any existing rules$IPT -F$IPT -X$IPT -Z#setting default firewall policy$IPT --policy OUTPUT ACCEPT$IPT --policy FORWARD DROP$IPT -P INPUT DROP#setting for loopback interface$IPT -A INPUT -i lo -j ACCEPT$IPT -A OUTPUT -o lo -j ACCEPT#setting access rules#one,ip access rules,allow all the ips of $IPT -A INPUT -s 10.0.10.0/24 -p all -j ACCEPT$IPT -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT
##下面的是重復的,作為知識點保留,單個服務的配置
#second,port access rules#nagios$IPT -A INPUT -s 10.0.10.0/24 -p tcp --dport 5666 -j ACCEPT$IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 5666 -j ACCEPT#db$IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 3306 -j ACCEPT$IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 3307 -j ACCEPT$IPT -A INPUT -s 10.0.10.0/24 -p tcp --dport 3306 -j ACCEPT$IPT -A INPUT -s 10.0.10.0/24 -p tcp --dport 3307 -j ACCEPT#ssh difference from other servers here.>>$IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 52113 -j ACCEPT$IPT -A INPUT -s 10.0.10.0/24 -p tcp --dport 52113 -j ACCEPT$IPT -A INPUT -p tcp --dport 22 -j ACCEPT#http$IPT -A INPUT -p tcp --dport 80 -j ACCEPT#snmp$IPT -A INPUT -s 10.0.0.0/24 -p UDP --dport 161 -j ACCEPT $IPT -A INPUT -s 10.0.10.0/24 -p UDP --dport 161 -j ACCEPT #rsync$IPT -A INPUT -s 10.0.0.0/24 -p tcp -m tcp --dport 873 -j ACCEPT$IPT -A INPUT -s 10.0.10.0/24 -p tcp -m tcp --dport 873 -j ACCEPT#icmp#$IPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT#others RELATED$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
企業(yè)案例:寫一個腳本解決DOS攻擊生產(chǎn)案例?
提示:根據(jù)web日志或者或者網(wǎng)絡連接數(shù),監(jiān)控當某個IP并發(fā)連接數(shù)或者短時內PV達到100,即調用防火墻命令封掉對應的IP,監(jiān)控頻率每隔3分鐘。防火墻命令為:iptables -I INPUT -s 10.0.1.10 -j DROP
本腳本使用測試文件進行編寫?
相關博文:答案見博客shell板塊
[root@db02 scripts]# cat test_6.sh#!/bin/sh#[ -f /etc/init.d/functions ] && . /etc/init.d/functionsIP_file="/server/scripts/ddos.txt"IP_filter_command="iptables -I INPUT -j DROP -s"IP_recover_command="iptables -D INPUT -j DROP -s"function IP_check(){ grep "EST" ${IP_file}|awk -F "[ |:]+" '{print $6}'|sort |uniq -c|sort -rn -k1 > /server/scripts/ip.txt}function IP_filter(){ exec < /server/scripts/ip.txt while read line do IP_count=`echo $line|awk '{print $1}'` IP=`echo $line|awk '{print $2}'` IP_fil=`iptables -L -n|grep "\b${IP}\b"|wc -l` if [ ${IP_count} -gt 25 -a ${IP_fil} -eq 0 ];then ${IP_filter_command} ${IP} echo "${IP}" >> /server/scripts/ip_filtered.txt action "Filter ${IP}" /bin/true fi done}function IP_recover(){ exec < /server/scripts/ip.txt while read line do IP_count=`echo $line|awk '{print $1}'` IP=`echo $line|awk '{print $2}'` IP_fil=`iptables -L -n|grep "\b${IP}\b"|wc -l` if [ ${IP_count} -le 25 -a ${IP_fil} -eq 1 ];then ${IP_recover_command} ${IP} echo "${IP}" >> /server/scripts/ip_filtered.txt action "Recover ${IP}" /bin/true fi done}function main(){ case "$1" in filter) IP_check echo "$(date +%F-%H:%M:%S) filtered by $(whoami)" >> /server/scripts/ip_filtered.txt IP_filter ;; recover) IP_check echo "$(date +%F-%H:%M:%S) recovered by $(whoami)" >> /server/scripts/ip_filtered.txt IP_recover ;; *) echo "USAGE:$0 {filter|recover}" exit 1 esac}main $*
生產(chǎn)環(huán)境iptables腳本講解
技巧:具備外網(wǎng)IP的服務器不對外的服務最好要做源地址限制。對外提供的服務,不能做源地址限制,例如:80 端口?
問題:企業(yè)硬件防火墻和IPTABLES防火墻是否要同時用。?
解決:可以同時使用企業(yè)硬件防火墻一般放在網(wǎng)關位置,相當于大廈的保安,但是樓里的每個屋子還是需要有人鎖門的iptables
問題: IDC機房部署了硬件防火墻,我們的服務器可以不開防火墻嗎??
解答:絕對不可以,大廈有了保安,你的辦公室門就不鎖了嗎?
NAT表設置
共享上網(wǎng)設置?
linux網(wǎng)關B:?
局域網(wǎng)共享的兩條命令方法:
方法1:適合于有固定外網(wǎng)地址的:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7
(1)-s192.168.1.0/24 辦公室或IDC內網(wǎng)網(wǎng)段。?
(2)-oeth0 為網(wǎng)關的外網(wǎng)卡接口。?
(3)-jSNAT –to-source 10.0.0.7 是網(wǎng)關外網(wǎng)卡IP地址。?
方法2:適合變化外網(wǎng)地址(ADSL):
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE ?偽裝。
配置如下
第一步:外網(wǎng)服務器配置
[root@lb01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.5[root@lb01 ~]# iptables -t nat -L -n
開啟內核轉發(fā)
net.ipv4.ip_forward = 1vim /etc/sysctl.conf
sysctl -p?生效?
需要上網(wǎng)服務器設置?
添加路由
route add default gw 172.16.1.5
#此處寫提供外網(wǎng)的IP地址
vim /etc/resolv.conf
添加?nameserver 223.5.5.5?
route -n?檢查
案例2:實現(xiàn)把訪問10.0.0.5:80的請求轉到172.16.1.8:80
[root@web02 ~]# iptables -t nat -A PREROUTING -d 10.0.0.5 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.8:80[root@web02 ~]# iptables -P FORWARD DROP
iptables常用企業(yè)案例:
1、Linux主機防火墻(表:FILTER?控制鏈:INPUT)?
2、局域網(wǎng)機器共享上網(wǎng)(表:NAT?控制鏈:POSTROUTING)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7
3、外部地址和端口,映射為內部地址和端口(表:NAT?控制的鏈:PREROUTING)
iptables -t nat -A PREROUTING -d 10.0.0.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.8:9000
企業(yè)案例:實現(xiàn)外部IP 124.42.34.112 一對一映射到內部server 10.0.0.8?
網(wǎng)關Ip:eth0:124.42.60.109 eth1:10.0.0.254?
首先在路由網(wǎng)關上綁定VIP?124.42.34.112,可以是別名或輔助IP的方式。
-A POSTROUTING -s 10.0.0.0/255.255.240.0 -d 124.42.34.112 -j SNAT --to-source 10.0.0.254-A PREROUTING -d 124.42.34.112 -j DNAT --to-destination 10.0.0.8-A POSTROUTING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.42.34.112
相關文章?
(1)生產(chǎn)環(huán)境大于254臺機器網(wǎng)段劃分及路由解決方案詳解01?
(2) linux route命令深入淺出與實戰(zhàn)案例精講[1]?
(3) linux route命令深入淺出與實戰(zhàn)案例精講[2]
iptables 生產(chǎn)應用場景
1)局域網(wǎng)共享上網(wǎng)(適合做企業(yè)內部局域網(wǎng)上網(wǎng)網(wǎng)關,以及IDC機房內網(wǎng)的上網(wǎng)網(wǎng)關[nat POSTROUTING])?
2)服務器防火墻功能(適合IDC機房具有外網(wǎng)IP的服務器)(主要是filter INPUT的控制)?
3)把外部IP及端口映射到局域網(wǎng)內部(可以一對一IP映射,也可以針對某一個端口映射)也可能是IDC把網(wǎng)站的外網(wǎng)VIP及網(wǎng)站端口映射到負載均衡器上(硬件防火墻)。(nat PREROUTING)?
4)辦公路由器+網(wǎng)關功能(zebra路由+iptables過濾及NAT+squid正向透明代理)80+ntop/iftop/iptraf流量查看+tc/cbq流量控制限速?
5)郵件的網(wǎng)關
iptables防火墻的應用
1)主機防火墻?
2)網(wǎng)關的應用(IP映射,端口映射)?
3)過濾信息,監(jiān)控限制流量及員工上網(wǎng)行為(squid(正向代理緩存加過濾)+ntop(圖形流量監(jiān)控)+通常(流量限制)+iptraf/iftop(流量查看))?
如果IPTABLES的服務器升級內核可以實現(xiàn)類似squid的過濾功能?
4)網(wǎng)關裝殺毒軟件監(jiān)聽9999端口,(網(wǎng)關殺毒)
iptables -A PREROUTING -i eth0 -d 211.167.253.109 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.10.6:9025
5)結合zebra配置企業(yè)級路由器
映射多個外網(wǎng)IP上網(wǎng)
iptables -t nat -A POSTROUTING -s 10.0.0.1/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16iptables -t nat -A POSTROUTING -s 172.16.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 124.42.60.103-124.42.60.106#iptables -t nat -A postrouting -S 192.168.1.0/22 -o eth0 -j SNAT --to-source 10.0.0.241-10.0.0.249
問題:?
1、2000人被封?
2、可用65535端口資源有限
企業(yè)案例:?ip_conntrack: table full, dropping packet.的錯誤提示?
以下是我的生產(chǎn)環(huán)境的某個服務器的配置:
net.ipv4.tcp_fin_timeout = 2net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_syncookies = 1net.ipv4.tcp_keepalive_time = 600net.ipv4.ip_local_port_range = 4000 65000net.ipv4.tcp_max_syn_backlog = 16384net.ipv4.tcp_max_tw_buckets = 36000net.ipv4.route.gc_timeout = 100net.ipv4.tcp_syn_retries = 1net.ipv4.tcp_synack_retries = 1
#5、dmesg里面顯示ip_conntrack: table full, dropping packet.的錯誤提示.如何解決。?
#以下參數(shù)是對iptables防火墻的優(yōu)化,防火墻不開會提示,可以忽略不理。?
c58:
net.ipv4.ip_conntrack_max = 25000000net.ipv4.netfilter.ip_conntrack_max=25000000net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120
################################################################?
C64:
net.nf_conntrack_max = 25000000net.netfilter.nf_conntrack_max = 25000000net.netfilter.nf_conntrack_tcp_timeout_established = 180net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
調整內核參數(shù)/etc/sysctl.conf后,需執(zhí)行/sbin/sysctl -p使得修改生效。?
強調:如果并發(fā)比較大,或者日PV多的情況下,開啟防火墻要注意,很可能導致網(wǎng)站訪問緩慢?
大并發(fā)(并發(fā)1萬,PV日3000萬)要么購買硬件防火墻,要么不開iptables防火墻
iptables 參數(shù)簡介
-n?數(shù)字?
-L?列表?
-F?清除所有規(guī)則,不會處理默認規(guī)則?
-X?刪除用戶自定義的鏈?
-Z鏈的計數(shù)器清零?
-A?添加規(guī)則到指定鏈的結尾,最后一條?
-I?添加規(guī)則到指定鏈的開頭,第一條?
-t指定表,也可以不指定默認是filter?
-p?指定協(xié)議(all.tcp,udp.icmp)默認all?
-P?設置默認規(guī)則?
-s指定源地址?
-d?目的地址?
--dport?指定端口?
-j處理的行為?ACCPET接收、DROP丟棄、REJECT拒絕?
-iinput 匹配進入的網(wǎng)卡接口?
-ooutput 匹配出去的網(wǎng)卡接口?
-m?state –state 匹配網(wǎng)絡狀態(tài)?
-mlimit –limit?n/{second/minute/hour}限制限定時間包的允許通過數(shù)量及并發(fā)數(shù)
更多命令可以使用man iptables?或iptables -h
總結
以上是生活随笔為你收集整理的服务器安全之iptables iptables的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。