iptables

iptables常用指令

Comands:
-A --append 附加規(guī)則,將新的規(guī)則附加到鏈的尾部
-D --detelte 從鏈中刪除匹配的規(guī)則
-I --insert 根據(jù)數(shù)字插入鏈中,默認(rèn)1插入第一位
-R --replace 替換鏈中規(guī)則,默認(rèn)1第一個
-L --list List the rules in a chain or all chains
-S --list-rules Print the rules in a chain or all chains
-F --flush 刪除鏈中規(guī)則,或者全部鏈
-Z --zero 鏈或所有鏈計數(shù)器清零
-N --new 新建一條用戶自定義鏈
-X --delete-chain 刪除用戶定義的鏈
-P --policy 設(shè)置默認(rèn)策略
-E --rename-chain 改變鏈名稱

Options:
-d --destination 目的地址或網(wǎng)關(guān)
-s --source 來源地址或網(wǎng)關(guān)
-i --in-interface 輸入網(wǎng)卡設(shè)備
-o --out-interface 輸出網(wǎng)卡設(shè)備
-j --jump 跳轉(zhuǎn)到目標(biāo)規(guī)則:-j ACCEPT
-g --goto 跳轉(zhuǎn)到目標(biāo)鏈,沒有返回
-m --match 匹配、擴(kuò)展
-n --numeric 以數(shù)字輸出地址和端口
-p --protocol 協(xié)議類型:tcp、udp
-t --table table to mainpulate(default:filter)
其它:
--dport 目的端口
--sport 源端口

1:查看當(dāng)前規(guī)則
iptables -L -n 
2:查看當(dāng)前規(guī)則
iptables -t nat -S
iptables -L -t filter
3:設(shè)置默認(rèn)策略
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
4:刪除全部規(guī)則
iptables -F
5:阻止指定IP地址
iptables -A INPUT -s 1.1.1.1 -j DROP
iptables -A INPUT -i eth0 -s 1.1.1.1 -j DROP
iptables -A INPUT -i eth0 -p tcp -s 1.1.1.1 -j DROP
6:允許所有SSH連接請求
iptables -A INPUT -i eth0 -p tcp -s 1.1.1.1/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
7: 允許http和https的連接請求
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
8:使用multiport將多個規(guī)則結(jié)合在一起
允許所有ssh http https的流量訪問
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptable -A OUTPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
9:允許從本地發(fā)起ssh請求
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
// 限定向特定網(wǎng)段發(fā)起ssh請求
iptables -A OUTPUT -o eth0 -p tcp -d 1.1.1.1/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
10. 負(fù)載平衡傳入的網(wǎng)絡(luò)流量
使用iptables nth將https流量負(fù)載平衡到三個不同的IP地址
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443
11. 允許外部主機(jī)ping內(nèi)部主機(jī)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
12. 允許內(nèi)部主機(jī)ping外部主機(jī)
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
13. 允許回環(huán)訪問
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
14. 允許內(nèi)部網(wǎng)絡(luò)與外部網(wǎng)絡(luò)之間通信
iptables -A FORWARD -i eth0 -o eth0 -j ACCEPT
15. 允許出站的DNS連接
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
16. 防止DOS攻擊
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
17. 端口轉(zhuǎn)發(fā) 
首先,允許422的端口訪問
其次,將422端口的流量用DNAT轉(zhuǎn)發(fā)到22端口
iptables -t nat -A PREROUTING -p tcp -d 192.168.1.101 --dport 422 -j DNAT --to 192.168.1.101 --dport 22
18. 記錄丟棄的數(shù)據(jù)表
首先,新建LOGGING的鏈
iptables -N LOGGING
其次,將所有INPUT鏈的請求跳轉(zhuǎn)到LOGGING鏈
iptables -A INPUT -j LOGGING
再次,為這些包自定義前綴,命名為"IPTables Packet Dropped"
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped" --log-level 7
最后,丟棄這些數(shù)據(jù)包
iptables -A LOGGING -j DROP

四表

  1. filter表,負(fù)責(zé)過濾功能,防火墻,內(nèi)核模塊:iptable_filter
  2. nat表,網(wǎng)絡(luò)地址轉(zhuǎn)換功能,內(nèi)核模塊:iptable_nat
  3. mangle表,拆解報文,做出修改,并重新封裝,內(nèi)核模塊:iptable_mangle
  4. raw表,關(guān)閉nat表上啟用的連接追蹤機(jī)制,iptable_raw

五鏈

  1. prerouting 對數(shù)據(jù)包作路由選擇前應(yīng)用此鏈中的規(guī)則
  2. input 進(jìn)來的數(shù)據(jù)包應(yīng)用此規(guī)則鏈中的規(guī)則
  3. forward 轉(zhuǎn)發(fā)數(shù)據(jù)包時應(yīng)用此規(guī)則鏈中的規(guī)則
  4. postrouting 對數(shù)據(jù)包作路由選擇后應(yīng)用此鏈中的規(guī)則
  5. output 外出的數(shù)據(jù)包應(yīng)用此規(guī)則鏈中的規(guī)則

報文流向:

  1. 到本機(jī)某進(jìn)程的報文:prerouting -> input
  2. 由本機(jī)轉(zhuǎn)發(fā)的報文:prerouting -> forward -> postrouting
  3. 本機(jī)某進(jìn)程發(fā)出的報文:output -> postrouting

四表五鏈對應(yīng)關(guān)系:

  1. 規(guī)則和表對應(yīng)關(guān)系
    PREROUTING 的規(guī)則可以存在于:raw表,mangle表,nat表。
    INPUT 的規(guī)則可以存在于:mangle表,filter表,(centos7中還有nat表,centos6中沒有)。
    FORWARD 的規(guī)則可以存在于:mangle表,filter表。
    OUTPUT 的規(guī)則可以存在于:raw表mangle表,nat表,filter表。
    POSTROUTING 的規(guī)則可以存在于:mangle表,nat表。
  2. 表和規(guī)則對應(yīng)關(guān)系
    表(功能)<–> 鏈(鉤子):
    raw 表中的規(guī)則可以被哪些鏈?zhǔn)褂茫篜REROUTING,OUTPUT
    mangle 表中的規(guī)則可以被哪些鏈?zhǔn)褂茫篜REROUTING,INPUT,F(xiàn)ORWARD,OUTPUT,POSTROUTING
    nat 表中的規(guī)則可以被哪些鏈?zhǔn)褂茫篜REROUTING,OUTPUT,POSTROUTING(centos7中還有INPUT,centos6中沒有)
    filter 表中的規(guī)則可以被哪些鏈?zhǔn)褂茫篒NPUT,F(xiàn)ORWARD,OUTPUT

處理動作

  1. ACCEPT 允許數(shù)據(jù)包通過
  2. DROP 直接丟棄數(shù)據(jù)包
  3. REJECT 拒絕數(shù)據(jù)包通過
  4. SNAT 源地址轉(zhuǎn)換
  5. MASQUERADE 是SNAT的一種特俗形式,適用于動態(tài)的,臨時會變的IP上
  6. DNAT 目的地址轉(zhuǎn)換
  7. REDIRECT 在本機(jī)做端口映射
  8. LOG 在/var/log/message文件中記錄日志信息,然后將數(shù)據(jù)包傳給下一條規(guī)則,也就是除了記錄以外,不對數(shù)據(jù)包做任何其它操作,仍然讓下一條規(guī)則去匹配

非常用指令

// 查看
iptables -t 表名 -L 鏈名
iptables -L INPUT (默認(rèn)是-t filter)
iptables -L -t filter INPUT
// -n 已數(shù)字顯示端口和IP -v詳細(xì)的信息
iptables -nvL INPUT

// 自定義鏈表
iptables -t filter -N LXH_IN_WEB
iptables -L LXH_IN_WEB
iptables -A LXH_IN_WEB -s 192.168.1.1 -j ACCEPT
iptables -A LXH_IN_WEB -s 192.168.1.1 -j DROP
iptables -A LXH_IN_WEB -s 192.168.1.3 -p tcp --sport 80 -j ACCEPT
// --line顯示序號
iptables --line -nvL LXH_IN_WEB
// 從LXH_IN_WEB表中刪除序號為3的規(guī)則
iptables -D LXH_IN_WEB 3
// 從LX_IN_WEB表中修改序號為2的規(guī)則
iptables -R LXH_IN_WEB 2 -j ACCEPT
// 表重命名
iptables -E LXH_IN_WEB IN_WEB
// 刪除
iptables -X IN_WEB

規(guī)則匹配

-s 源IP
-p 目的IP
--sport 源端口
--dport 目的端口
-p 協(xié)議,tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
-i 入口網(wǎng)卡
-o 出口網(wǎng)卡
//多個源IP
-s ip1,ip2
// 多端口
-m multiport --sport 21,22,53,80
//取反
! -s ip1,ip2
// 如果不是192.168.1.1的,就接收,是否拒絕,還要看有沒有其他規(guī)則匹配,比如默認(rèn)規(guī)則,如果默認(rèn)規(guī)則是接收,依舊會接收,否則拒絕。
iptables -t filter -A INPUT ! -s 192.168.1.1 -j ACCEPT

常用擴(kuò)展

// tcp擴(kuò)展
-m tcp --sport 22
-m tcp --dport 22
// multiport擴(kuò)展
-m multiport --sport 21,22
-m multiport --dport 21,22
// iprange擴(kuò)展
-m iprange --src-range 192.168.1.127-192.168.1.146 
-m iprange --dst-range 192.168.1.127-192.168.1.146
// string擴(kuò)展 可以指定要匹配的字符串
//–algo bm表示使用bm算法去匹配指定的字符串
 -m string --algo bm --string "Hello World" 
// time擴(kuò)展 根據(jù)時間段區(qū)匹配報文
-m time --timestart 09:00:00 --timestop 18:00:00 
-m time --weekdays 6,7 // 周六、周日
-m time --monthdays 22,23 //每月22,23號
–monthdays與–weekdays可以使用”!”取反,其他選項不能取反
// connlimit擴(kuò)展 限制每個IP地址同時鏈接到server端的鏈接數(shù)量
-m connlimit --connlimit-above 2 -j REJECT //每個IP的鏈接數(shù)量上限為2,超過就要拒絕
-m connlimit ! --connlimit-above 2 -j ACCEPT //每個IP的鏈接數(shù)量不超過2個,接受,超過不代表拒絕,要匹配其它規(guī)則
-m connlimit --connlimit-above 2 --connlimit-mask 24 //限制某類網(wǎng)段 24網(wǎng)段255個IP,27網(wǎng)段30個IP
// limit擴(kuò)展 對”報文到達(dá)速率”進(jìn)行限制的
-p icmp -m limit --limit 10/minute //每分鐘10個包 ,還有second,hour,day
–limit-burst // 空閑時可放行的包的數(shù)量
// --tcp-flags 指的就是tcp頭中的標(biāo)志位
-m tcp --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN
// 匹配第一次握手
--tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN
--tcp-flags ALL SYN 同上
--syn 等價于 同上
// 匹配第二次握手
--tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK
--tcp-flags ALL SYN,ACK 同上
// udp擴(kuò)展
-p udp --sport 21,22 // 21,22
-p udp --dport 21:25  // 21 - 25
// icmp擴(kuò)展 ping命令使用icmp協(xié)議,類型為8
-p icmp -m icmp --icmp-type 8/0 -j REJECT//禁止別人ping本機(jī), 8/0格式為:type/code,表示類型為8,code為0的報文
-p icmp -m icmp -icmp-type 'echo-request' // 使用類型描述名稱匹配
// state擴(kuò)展 可以讓iptables實現(xiàn)”連接追蹤”機(jī)制,五種狀態(tài):
NEW 第一個包
ESTABLISHED 連接已建立
RELATED 關(guān)系,ftp協(xié)議有命令連接和數(shù)據(jù)連接,數(shù)據(jù)連接可以是RELATED狀態(tài),表示有關(guān)系 
INVALID 一個包沒有辦法被識別
UNTRACKED 表示報文未被追蹤

黑白名單

  1. 當(dāng)默認(rèn)策略是ACCEPT是,鏈中的規(guī)則對應(yīng)DROP和REJECT,表示只有符合規(guī)則的才會被丟棄、拒絕,沒有匹配的規(guī)則默認(rèn)接受,這就是黑名單
  2. 當(dāng)默認(rèn)策略是DROP、REJECT,鏈中的規(guī)則對應(yīng)為ACCEPT,表示只有符合規(guī)則的才會接受,沒有匹配的規(guī)則默認(rèn)拒絕,這就是白名單

iptables動作

  1. 基礎(chǔ)動作 ACCEPT、DROP
  2. 擴(kuò)展動作 REJECT
  3. LOG動作
// 將22端口的tcp報文信息記錄到日志,日志存儲位置/var/log/messages
iptables -I INPUT -p tcp --dport 22 -j LOG

//vim /etc/rsyslog.conf
kern.warning /var/log/iptables.log
//加入上述配置后,報文的相關(guān)信息將會被記錄到/var/log/iptables.log文件中。
//完成上述配置后,重啟rsyslog服務(wù)(或者syslogd)
service rsyslog restart
//服務(wù)重啟后,配置即可生效,匹配到的報文的相關(guān)信息將被記錄到指定的文件中。
LOG選項:
 –log-level選項可以指定記錄日志的日志級別,可用級別有emerg,alert,crit,error,warning,notice,info,debug。
 –log-prefix選項可以給記錄到的相關(guān)信息添加”標(biāo)簽”之類的信息,以便區(qū)分各種記錄到的報文信息,方便在分析時進(jìn)行過濾。
  1. SNAT 內(nèi)部網(wǎng)絡(luò)的報文發(fā)送出去時,報文的源IP會被修改
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 公網(wǎng)IP
  1. DNAT 外部網(wǎng)絡(luò)的報文響應(yīng)時,響應(yīng)報文的目標(biāo)IP會再次被修改
iptables -t nat -I PREROUTING -d 公網(wǎng)IP -p tcp --dport 公網(wǎng)端口 -j DNAT --to-destination 私網(wǎng)IP:端口號
iptables -t nat -I PREROUTING -d 公網(wǎng)IP -p tcp --dport 8080 -j DNAT --to-destination 10.1.0.1:80
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 公網(wǎng)IP
  1. MASQUERADE 動態(tài)的將源地址轉(zhuǎn)換為可用的IP地址,其實與SNAT實現(xiàn)的功能完全一致,都是修改源地址,只不過SNAT需要指明將報文的源地址改為哪個IP,而MASQUERADE則不用指定明確的IP
iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE
  1. REDIRECT 在本機(jī)上進(jìn)行端口映射
//將本機(jī)80端口映射到本機(jī)8080端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

centos7中配置iptables-service

#配置好yum源以后安裝iptables-service
yum install -y iptables-services
#停止firewalld
systemctl stop firewalld
#禁止firewalld自動啟動
systemctl disable firewalld
#啟動iptables
systemctl start iptables
#將iptables設(shè)置為開機(jī)自動啟動,以后即可通過iptables-service控制iptables服務(wù)
systemctl enable iptables

ICMP報文type和code對照表

ICMP報文

ICMP報文
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內(nèi)容