iptables学习
防火墙分类:
工作方式:
包过滤防火墙(四层):port、IP、MAC、icmp type、status(连接状态)。
应用层防火墙(七层):hostname、FQDN
工作层级:
用户态:iptables、firewalld
内核态:netfilter、netfilter
四表:
raw:链路优化
mangle:信息修改
nat:地址转换
filter:数据包过滤
五链:
INPUT入栈、OUTPUT出栈、FORWORD转发、PREROUTING路由器前、POSTROUTING路由后
表顺序:raw > mangle > nat > filter
链顺序
入栈:PREROUTING、INPUT
出栈:OUTPUT、POSTROUTING
转发:PREROUTING、FORWORD、POSTROUTING
语法:
iptables [-t 表名] 选项 [链名] [条件] [-j 动作]
例:iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
选项类型:
-A:在链的末尾追加一条规则
-I:在链的开头或指定序号(在链后跟序号如INPUT 3)插入一条规则
-L:查看规则。
加-n会把服务名改为端口号。服务名根据/etc/services转换。
加-v更加详细,会列出匹配的数据包、字节数以及源目IP。
--line-numbers:查看规则时,显示规则的序号。
-D:删除链内指定序号(或内容)的一条规则。
-F:清空所有的规则
-P:为指定的链设置默认规则。(只能指定DROP和ACCEPT)
匹配条件:
通用匹配
可以直接使用,不依赖于其他条件或扩展。包括网络协议、IP地址、网络接口等条件。
协议 -p [协议名]
地址 -s [源地址]、-d [目的地址]
接口 -i [入栈网卡]、-o [出栈网卡]
隐含匹配
要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。
端口匹配 --sport源端口、--dport目的端口。
ICMP类型匹配 –icmp-type ICMP类型。
显示匹配
要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件
多端口匹配 -m multiport --sport [源端口列表]
-m multiport --dport [目的端口列表]
IP范围匹配 -m iprange --src-range [IP范围]
MAC地址范围 -m mac -macl-source [MAC地址]
状态匹配 -m state --state [连接状态]
动作类型:
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配
SNAT:修改数据包源地址
SNAT:修改数据包目的地址
REDIRECT:重定向
NAT地址转换
SNAT:更改源地址。在nat表,路由后POSTROUTING链添加。用于内网主机访问外网使用。
iptables -t nat -A POSTROUTING -s 10.246.16.0/24 -o eth0 -j SNAT --to-source 218.29.30.31
地址伪装MASQUERADE,适用于外网口IP地址非固定。若不加[-s ip范围]表示全部转换。
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
DNAT:更改目的地址。在nat表,路由前PREROUTING链添加。用于端口映射或内部主机需要被外网访问
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 10.246.16.1
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination 10.246.16.1直接映射IP地址。
PS:不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均小写。
iptables保存和还原
service iptables save
默认保存文件:/etc/sysconfig/iptables
导出到文件:iptables-save > 1.txt
导入防火墙规则:iptables-restore < 1.txt (有的版本导入后不直接生效,需要重启服务)。
配置示例:
只允许10.246.16.64访问本机的80端口
iptables -A INPUT -s 10.246.16.64 -p tcp --dport 80 -j ACCEPT
只允许10.224.33.141远程管理本机
iptables -A INPUT -s 10.224.33.141 -p tcp --dport 22 -j ACCEPT
除了icmp协议以外,其他的都允许通过
iptables -A FORWARD ! -p icmp -j ACCEPT
拒绝整个网段访问本机
iptables -I INPUT -s 10.246.16.0/24 -j DROP
开放FTP服务端口
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT