1.1防火牆簡介安全
在普通l服務器上用iptables提供幾百號人的網關和路由功能上,iptables 絲絕不輸於真實的交換機和路由器。服務器
1.2 iptables 名詞和術語app
1.2.1 什麼是容器?ssh
在iptables中是用來描述包含和屬於的關係。tcp
1.2.2 什麼是netfilter/iptables?學習
netfilter是表(tables)的容器。把小區中的一棟樓比做netfilter,表比做大家家的一套房子,那麼表tables 就屬於netfilter。this
1.2.3什麼是表(tables)?spa
tables是鏈的容器,即 全部的鏈chains都屬於表tables。把鏈chains比做房間,那麼chains就屬於tables。命令行
1.2.4 什麼是鏈chains?3d
鏈chains是規則policys的容器,鏈屬於表。把tables比做一間房,那麼chains就至關因而房子中的桌子或者櫃子等傢俱。
1.2.5 什麼是規則policy?
規則policy 屬於chains, 就是iptables一系列過濾信息規範和具體操做方法。能夠理解爲規定各個傢俱的擺放。
1.3.防火牆的執行規則表:
小結:
1)匹配規則,從上到下,已經匹配,再也不向下。
2)若是最終還沒找到匹配項,則根據防火牆的默認匹配規則來決定是否經過仍是丟棄。
1.4 iptables的表tables和連chains的分類
經常使用表和鏈的對應關係:
1.4.2filter表介紹
1.4.3 NAT表介紹
1.4.4 mangle表
1.5iptables的表和鏈的工做流程
因爲工做中不多用到mangle表,爲了學習須要學習一下工做流程就夠了:
[root@wr ~]# iptables -h
iptables v1.4.7
Usage: iptables -[AD] chain rule-specification [options]
iptables -I chain [rulenum] rule-specification [options]
iptables -R chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LS] [chain [rulenum]] [options]
iptables -[FZ] [chain] [options]
iptables -[NX] chain
iptables -E old-chain-name new-chain-name
iptables -P chain target [options]
iptables -h (print this help information)
Commands:
Either long or short options are allowed.
--append -A chain Append to chain
--delete -D chain Delete matching rule from chain
--delete -D chain rulenum
Delete rule rulenum (1 = first) from chain
--insert -I chain [rulenum]
Insert in chain as rulenum (default 1=first)
--replace -R chain rulenum
Replace rule rulenum (1 = first) in chain
--list -L [chain [rulenum]]
List the rules in a chain or all chains
--list-rules -S [chain [rulenum]]
Print the rules in a chain or all chains
--flush -F [chain] Delete all rules in chain or all chains
--zero -Z [chain [rulenum]]
Zero counters in chain or all chains
--new -N chain Create a new user-defined chain
--delete-chain
-X [chain] Delete a user-defined chain
--policy -P chain target
Change policy on chain to target
--rename-chain
-E old-chain new -chain
Change chain name, (moving any references)
Options:
[!] --proto -p proto protocol: by number or name, eg. `tcp' or 'TCP' or 'ALL'
[!] --source -s address[/mask][...]
source specification
[!] --destination -d address[/mask][...]
destination specification
[!] --in-interface -i input name[+]
network interface name ([+] for wildcard)
--jump -j target
target for rule (may load target extension)
--goto -g chain
jump to chain with no return
--match -m match
extended match (may load extension)
--numeric -n numeric output of addresses and ports
[!] --out-interface -o output name[+]
network interface name ([+] for wildcard)
--table -t table table to manipulate (default: `filter')
--verbose -v verbose mode
--line-numbers print line numbers when listing
--exact -x expand numbers (display exact values)
[!] --fragment -f match second or further fragments only
--modprobe=<command> try to insert modules using this command
--set-counters PKTS BYTES set the counter during insert/append
[!] --version -V print package version.
經常使用命令:(不指定-t, 默認就是fillter表)
1.查看錶規則
# iptables -L -n -t nat //列出相應表中的規則。
2.清楚表規則(命令行的清除,iptabls重啓後不會生效)
# iptables -F //清除全部
# iptables -X //刪除用戶自定義的鏈
# iptables -Z //鏈的計數器清零
# iptables -n nat -F //清空nat的全部表。
3.禁止ssh默認的22端口:
# iptables -A INPUT -p tcp --dport 22 -j DROP
# iptables -D INPUT -p TCP --dport 22 -j DROP
* 其中 INPUT和DROP等關鍵字,必須是大寫。
* 行爲參數:
--jump -j target
提示:target常見處理方法有ACCEPT、DROP(丟棄)、REJECT(拒絕),其中,通常不用REJECT ,存在安全隱患。更多跳轉,如:SNAT(源地址轉換)、DNAT(目的地址轉換)、MASQUERADE(假裝),這幾個長用於處理nat表的規則。
4.經過顯示行號,而後行號刪除
# iptables -L -n --line-numbers
# iptables -D INPUT 1 刪除第二條規則
5.禁止網段連入:
# iptables -t filter -A INPUT -i eth0 -s 10.1.0.0/24 -j DROP
6.除了10.1.0.152發入的請求,其餘都拒絕。
# iptables -t filter -A INPUT -i eth0 -s ! 10.1.0.152 -j DROP
7.企業實戰:封IP(-I, 插入到第一行)
# iptables -I INPUT -s 10.1.0.15 -j DROP 封某個IP地址。
非內部機器禁ping:
# iptables -I INPUT -p icmp -s 10.1.0.0/24 -j DROP
匹配端口範圍:
# iptables -A INPUT -p tcp --dport 22:80 -j DROP //端口範圍
# iptables -A INPUT -p tcp -m multiport --dport 21,23,27 -j DROP //多個端口
電影院模式設置防火牆規則(最小化設置)
1.清空全部
# iptables -F //清除全部鏈的規則,默認是filter
# iptables -X //刪除用戶自定義的鏈,默認是filter
# iptables -Z //鏈的計數器清零,默認是filter
# iptables -n nat -F //清空nat的全部表。
2.配置容許SSH登錄端口進入
# iptables -A INPUT -p tcp --dport 22 -s 10.1.0.0/24 -j ACCEPT
3.配置容許lo接口的進入和流出
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
4.設置默認的禁止和容許規則(改爲了電影院模式)
# 設置默認DROP掉FORWARD ,INPUT,容許output。
# iptables --policy OUTPUT ACCEPT
# iptables -P FORWARD DROP
# iptables -P INPUT DROP
5.開啓信任的IP網段(容許本身人經過)
#容許IDC LAN和辦公網IP的訪問
# iptables -A INPUT -s 211.166.0.0/16 -p all -j ACCEPT
# ptables -A INPUT -s 172.16.1.0/24 -p all -j ACCEPT
# iptables -A INPUT -s 10.1.0.0/24 -p all -j ACCEPT
6.容許http服務經過
#容許外部訪問80端口
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
7.容許icmp類型協議經過
iptables -A INPUT -p icmp -s 10.1.0.0/24 -j ACCEPT //容許指定ping
iptables -A INPUT -p icmp -j ACCEPT //容許全部ping
8.容許關聯的狀態包經過(相似ftp的服務)
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
9. 保存
# service iptables save
10.最小化的一個配置
#之後添加容許規則,直接在配置文件中添加規則就行了。
# Generated by iptables-save v1.4.7 on Thu Feb 23 20:55:43 2017
*nat
:PREROUTING ACCEPT [125:19490]
:POSTROUTING ACCEPT [12:1029]
:OUTPUT ACCEPT [12:1029]
COMMIT
# Completed on Thu Feb 23 20:55:43 2017
# Generated by iptables-save v1.4.7 on Thu Feb 23 20:55:43 2017
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 10.1.0.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 10.1.0.0/24 -j ACCEPT
-A INPUT -s 211.166.0.0/16 -j ACCEPT
-A INPUT -s 172.16.1.0/24 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Feb 23 20:55:43 2017
1.防止ddos攻擊:
iptables -I INPUT -s 202.10.5.9 -j DROP
2.經過腳本去設置iptables
3.直接更改配置文件。