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.直接更改配置文件。