iptables防火墙示意图
1、防火墙的分类:
硬件,购买设备
软件,安装软件
2、iptables的功能:
强制访问指定站点
发布内网服务器nat/snat/dnat
智能型DNS
3、iptables的格式:
iptables |
-t filter |
-A INPUT |
-p tcp--dport 23 |
-j REJECT |
命令 |
4表 |
5链 |
数据描述 |
处理方式 |
4表:
filter |
过滤(数据过滤,默认) |
INPUT/OUTPUT/FORWARD |
nat |
转换(地址转换) |
PREROUTING/POSTROUTING/OUTPUT |
mangle |
校正(数据包打标记) |
INPUT/OUTPUT/FORWARD/PREROUTING/POST ROUTING |
raw |
|
|
5链:
INPUT:接收,发送方不一定是你,但接收方一定是你
OUTPUT:发送,接收方不一定是你,但发送方一定是你
FORWARD:转发,接收方和发送方全都不是你
PREROUTING:路由前时,指代在决定去向前处理
POSTROUTING:路由后时,指代在决定去向后处理
4、外出的包:
1、本地程序
2、路由判断(决定包使用源地址,外出接口)
3、mangle表OUTPUT链(标记、生存时间、服务类型)
4、nat表OUTPUT链(对防火墙自己发出的包做DNAT)
5、Filter表OUTPUT链(过滤)
6、mangle表POSTROUTING链(标记、生存时间、服务类型)
7、nat表POSTROUTING链(对数据包做SNAT)
8、离开接口
9、网络传输
5、进入的包:
1、网络传输
2、进入接口
3、mangle表PREROUTING链(标记、生存时间、服务类型)
4、nat表PREROUTING链(对数据包做DNAT)
5、路由判断(决定包的去向,给自己的)
6、mangle表INPUT链(标记、生存时间、服务类型)
7、filter表INPUT链(过滤)
8、交给本地程序处理
6、转发的包:
1、网络传输
2、进入接口
3、mangle表PREROUTING链(标记、生存时间、服务类型)
4、nat表PREROUTING链(对数据包做DNAT)
5、路由判断(决定包的去向,发给别人)
6、mangle表FORWARD链(标记、生存时间、服务类型)
7、filter表FORWARD链(过滤)
8、mangle表POSTROUTING链(标记、生存时间、服务类型)
9、nat表POSTROUTING链(对数据包做SNAT)
10、离开接口
11、网络传输
走向:
不考虑链 |
mangle>nat>filter |
不考虑表 |
PREROUTING>INPUT>(FORWARD)>OUTPUT>POSTROUTING |
绿色代表注释
7、参数
A |
在所选择的链末尾添加规则 iptables -A INPUT -s 192.168.1.123 -p tcp --dport 22 -j ACCEPT |
t |
指定表(可省略) Iptables -t filter -L INPUT |
R |
替换规则 iptables -R INPUT 1 -s 192.168.0.123 -j DROP |
D |
删除规则 iptables -D INPUT -p tcp --dport 80 -j DROP iptables -D INPUT 3 |
I |
插入规则 iptables -I INPUT 3 -s 192.168.1.222 -j DROP |
L |
查看规则 iptables -t filter -L INPUT |
X |
删除非内建链(连接数非“0“不可删) iptables -X birdteam |
F |
清空规则 iptables -t nat -F OUTPUT |
Z |
将计数器清空(包计数器、字节计数) iptables -Z |
N |
新创建链 iptables -N birdteam |
P |
修改默认规则 iptables -P INPUT DROP |
E |
自定义链改名 iptables -E birdteam vfast |
# Iptables -L INPUT 与 iptables -L INPUT -x
选项:
v |
详细信息 |
x(与“v“一起使用) |
精确 |
n |
显示端口 |
--line-numbers(缩写--lin) |
显示规则序号 |
通用匹配:
p |
匹配协议 有三种( icmp udp tcp)或all |
s |
匹配来源地址 iptables -A INPUT ! -s 192.168.1.123 -j ACCEPT (“!“取反,”p“也可以用) |
d |
匹配目的地址(一般是服务器本身)
|
i |
匹配包进入的接口 |
o |
匹配包送出的接口 OUTPUT/FORWARD/POSTROUTING(另外两个链不可使用) |
TCP的端口:
sport |
匹配来源端口 |
dport |
匹配目的端口(同上,匹配前要加上协议) |
tcp-flags |
匹配TCP的封包标记 SYN/ACK/FIN/RST/URG/PSH
|
syn |
(代表连接请求) --syn |
tcp-option |
检查TCP的包头信息 8位选项类型、长度、内容 |
UDP的端口:
sport |
匹配来源端口 |
dport |
匹配目的端口 |
ICMP的端口:
icmp-type |
匹配ICMP的类型(代表:ping) |
INPUT链:
-s --sport |
对方的端口和地址 |
-d --dport |
自己的端口和地址 iptables -A INPUT -p tcp --dport 23 -j DROP |
OUTPUT链:
-s --sport |
自己的端口和地址 iptables -A OUTPUT -p tcp --sport 23 -j DROP |
-d --dport |
对方的端口和地址 |
显示匹配(无用匹配)
limit |
匹配平均速率
|
--limit --limit-burst |
mac |
匹配源MAC地址 |
--mac-source |
multiport |
不连续多端口匹配
(扩)添加连续的端口
|
来源--source-port 目的--destination-port 所有--port |
mark |
标记
|
--mark |
owner |
匹配所有
(限制uid=1001的用户发出数据) |
--uid-owner --gid-owner --pid-owner --sid-owner |
state |
匹配包的状态
|
--state NEW ESTABLISHED RELATED INVALID |
tos |
匹配服务类型 |
--tos |
ttl |
匹配生存时间 |
--ttl |
处理:
ACCEPT |
允许 |
|
REJECT |
拒绝并且返回错误信息 |
|
DROP |
丢弃并不返回错误信息 |
|
LOG |
记录到/var/log/messages
(做个cjk标记)
|
--log-prefix --log-level --log-tcp-sequence --log-tcp-options --log-ip-options |
DNAT |
目标地址转换 例:iptables -t nat -A POSTROUTING -d 192.168.7.251 -j DNAT --to-destination 192.168.7.254 |
--to-destination |
MARK |
标记 例:iptables -t mangle -A INPUT -p tcp -j MARK --set-mark 1 |
--set-mark |
MASQUERADE |
伪装 例:iptables -t nat -A PREROUTING -s 192.168.7.250 -j MASQUERADE --to-ports 80 |
--to-ports |
SNAT |
来源地址转换 例:iptables -t nat -A PREROUTING -s 192.168.7.250 -j SNAT --to-source 192.168.7.251 |
--to-source |
MIRROR |
镜像 例:iptables -t nat -A PREROUTING -s 192.168.7.250 -j MIRROR |
换掉源和目标 |
QUEUE |
队列 |
需要配合设备使用 |
REDIRECT |
重新定向 例:iptables -t nat -A POSTROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 |
--to-ports |
RETURN |
返回 |
返回上级 |
TOS |
服务类型 例:iptables -t mangle -A INPUT -p tcp -j TOS --set-tos 0x00 |
--set-tos |
TTL |
生存时间 例:iptables -t mangle -A INPUT -p tcp -j TTL --ttl-set 123 |
--ttl-set 设置 --ttl-dec 减少 --ttl-inc 增加 |
ULOG |
记录用户被匹配的包的信息 例:iptables -A OUTPUT -p tcp -j ULOG |
8、服务端口对应列表
# vim /etc/services
9、应用实例:
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --syn -m state --state NEW --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --syn -m state --state NEW --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --syn -m state --state NEW --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --syn -m state --state NEW --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --syn -m state --state NEW --dport 23 -j ACCEPT
firewalld切换到iptables防火墙
1、关闭firewall防火墙
# systemctl stop firewalld.service
2. 禁止firewall防火墙开机启动
# systemctl disable firewalld.service
3. 安装iptables防火墙相关组件
# yum -y install iptables*
4. 开启iptables防火墙
# systemctl start iptables.service
5. 设置iptables防火墙开机启动
# systemctl enable iptables.service