1、什么是iptables
iptables是基于软件的形式实现的一种防火墙的软件工具,主要工作于主机边缘,只能对一台主机起到保护作用。
2、iptables的四表五链
四表:filter、nat、mangle(做防火墙标记)、raw
五链:INPUT、OUTPUT、FORWARD、PREROUTING(路由前)、POSTROUTING(路由后)
filte:INPUT、OUTPUT、FORWARD
nat:PREROUTING、OUTPUT、POSTROUTING
mangle:PREOUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
3、配置原则
- 将控制强的放在前面,应用访问频繁的也要放在前面
- 查询条件
- IP:SIP、DIP
- TCP:SPORT、DPORT、FLags
- UDP:SPORT、DPORT
- ICMP:ICMP-TYPE
- 处理机制
- DROP(丢弃)
- REJECT(拒绝,并返回)
- ACCEPT(允许)
- SNAT
- DNAT
- RETURN(返回)
- REDIRECT(端口转发)
- LOG(只记录日志)
- 规则样式
- -t 表 -L 列出 -n 以数值方式显示
- iptables [-t table ] -N chain 创建一条新的链
- iptables [-t table ] -X chain 创建一条空规则的链
- iptables [-t table ] -E old-chain-name new-chain-name 修改链名
- iptables [-t table] -P chain—name target 为链指定默认策略,修改默认的属性
- iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
- -F 清空规则
- -L list 列出表中的所有规则
- -n 以数字格式显示ip和端口
- -v 显示信息
- pkts:packets,被本规则所有匹配到的报文的个数
- baytes:被本规则所匹配到的所有报文的大小子和,单位是字节,会执行单位换算
- target:目标,即处理机制
- port:协议一般为(TCP|UDP|ICMP)
- opt:可选项
- in:数据包的流入端口
- out:数据包的流出接口
- scource:源地址
- destination:目标地址
- -vv
- -vvv
- -x:exactly:精确值,不执行单位换
- --line-nambers:显示各规则的行号
- -Z:zero 把规则计数器清零
- iptables [-t table] {-A|-D} chain rule-specification
- -A:append,附加一条规则
- rule-specification 匹配条件 -j 处理机制
- 匹配条件:
- -s 匹配原地址,可以IP,也可以网络地址:可以使用!操作符取反,!172.168.0.0/16 相当于 --src,或 --source
- -d 匹配目标地址,可以IP,也可以网络地址:可以使用!操作符取反,!172.168.0.0/16
- -p 匹配协议,通常只能使用{TCP|UDP|ICMP}三者之一
- -i 数据报文流入的接口,通常只用于INPUT,FORWARD和PREROUTING
- -o 数据报文流出的接口,通常只用OUTPUT,FORWARD和POSTROUTING
- service iptables save 规则会被保存至/etc/sysconfig/iptables文件中
- iptables-save > /path/to/some_rulefile 保存iptables至别的位置
- iptables-restore < /path/to/some_rulefile 从自定义的位置读取并使之生效
- 规则命令
- -A:添加
- -D:删除
- 插入规则 iptables [-t table] -I chain [rulenum] rule-specification
- 替换规则(覆盖指定规则) iptables [-t table] -R chain rulenum rule-specification
- 显示指定链上的规则添加命令 iptables [-t table] -S [chain [rulenum]]
- 扩展匹配
- -p tcp
- --dport m[-n],匹配的目标端口,可以是连续的多个端口
- --sport:m[-n],匹配的源端口,可以是连续的多个端口
- --tcp-flags URG PSH PST SYN ACK FIN
- -p udp
- --dport m[-n],匹配的目标端口,可以是连续的多个端口
- --sport:m[-n],匹配的源端口,可以是连续的多个端口
- -p icmp
- icmp-type
- 显式扩展:必须要明确指定的扩展模块
- -m 扩展模块名称 --专用选项1 --专用选项2
- multiport:多端口匹配,一次指定多个离散端口
- state:状态追踪
4、配置filter
1 ###############配置filter表防火墙###############
2
3 #清除预设表filter中的所有规则链的规则
4 iptables -F
5
6 #清除预设表filter中使用者自定链中的规则
7 iptables -X
8
9 #保存iptables配置
10 service iptables save
11
12 #重启iptables服务
13 service iptables restart
14
15 #查看iptables规则
16 iptables -L -n
17
18 #查看iptables规则文件
19 cat /etc/sysconfig/iptables
20
21 #设定预设规则
22 iptables -P INPUT DROP
23 iptables -P OUTPUT ACCEPT
24 iptables -P FORWARD DROP
25
26 #开启22端口
27 iptables -A INPUT -p tcp --dport 22 -j ACCEPT
28 #如果OUTPUT设置成DROP需要添加 iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
29 #关闭22端口 iptables -D INPUT -p tcp --dport 22 -j ACCEPT
30
31 #开启常用端口
32 iptables -A INPUT -p tcp --dport 80 -j ACCEPT
33 iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
34 #iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
35 #iptables -A OUTPUT -p tcp --sport 3306 -j ACCEPT
36 #iptables -A INPUT -p tcp --dport 20 -j ACCEPT
37 #iptables -A INPUT -p tcp --dport 21 -j ACCEPT
38 #iptables -A INPUT -p tcp --dport 10000 -j ACCEPT
39 #iptables -A INPUT -p tcp --dport 25 -j ACCEPT
40 #iptables -A INPUT -p tcp --dport 110 -j ACCEPT
41 #iptables -A INPUT -p udp --dport 53 -j ACCEPT
42
43 #允许ping
44 iptables -A INPUT -p icmp -j ACCEPT
45 #如果OUTPUT设置成DROP需要添加 iptables -A OUTPUT -p icmp -j ACCEPT
46
47 #允许loopback
48 iptables -A INPUT -i lo -p all -j ACCEPT
49 #如果OUTPUT设置成DROP需要添加 iptables -A OUTPUT -o lo -p all -j ACCEPT
50
51 #屏蔽指定ip
52 #iptables -A INPUT -p tcp -s 192.168.10.1 -j DROP
53
54 #减少不安全的端口连接
55 #iptables -A OUTPUT -p tcp --sport 31337 -j DROP
56 #iptables -A OUTPUT -p tcp --dport 31337 -j DROP
57
58 #允许某个IP远程连接
59 #iptables -A INPUT -s 192.168.10.1 -p tcp --dport 22 -j ACCEPT
60 #允许某个网段的IP远程连接
61 iptables -A INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT
62
63 #允许指定网段通过、指定网口通过SSH连接本机
64 #iptables -A INPUT -i eth0 -p tcp -s 192.168.10.0/24 --dport 22 -m state --state NEW,ESTABLESHED -j ACCEPT
65 #iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
66 #iptables -A INPUT -i eth0 -p tcp -s 192.168.10.0/24 --dport 22 -m state --state ESTABLESHED -j ACCEPT
67 #iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
68
69 #开启转发功能
70 #iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
71 #iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
72
73 #丢弃坏的TCP包
74 #iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
75
76 #处理IP碎片数量,防止攻击,允许每秒100个
77 #iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
78
79 #设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包
80 #iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
81
82 #丢弃非法连接
83 iptables -A INPUT -m state --state INVALID -j DROP
84 iptables -A OUTPUT -m state --state INVALID -j DROP
85 iptables -A FORWARD -m state --state INVALID -j DROP
86
87 #允许所有已经建立的和相关的连接
88 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
89 iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
90
91
92
93 ###############配置NAT表防火墙###############
94
95 #查看NAT表规则
96 iptables -t nat -L
97
98 #清除NAT规则
99 iptables -F -t nat
100 iptables -X -t nat
101 iptables -Z -t nat
102
103 #防止外网用内网IP欺骗
104 #iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
105 #iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
106 #iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
107
108 #禁止与某个IP的所有连接
109 #iptables -t nat -A PREROUTING -d 192.168.10.1 -j DROP
110
111 #禁用80端口
112 #iptables -t nat -A PREROUTING -p tcp --dport 80 -j DROP
113
114 #禁用某个IP的80端口
115 #iptables -t nat -A PREROUTING -p tcp --dport 21 -d 192.168.10.1 -j DROP
116
117
118
119 ###############保存iptables文件,重启服务###############
120
121 #保存iptables规则
122 service iptables save
123
124 #重启iptables服务
125 service iptables restart
View Code
源地址转换
iptables -t nat -A POSTROUTING -s 10.60.196.211/32 -j SNAT --to-source 10.60.196.209