iptables防火墙
raw | mangle | filter | nat |
---|---|---|---|
PREROUTING | OUTPUT | INPUT | POSTROUTING |
OUTPUT | INPUT | OUTPUT | PREROUTING |
FORWARD | FORWARD | OUTPUT | |
POSTROUTING | |||
PREROUTING |
iptables命令
-
-t <表名>,不加该参数默认filter表
-
-A <链名>,向该链中追加
-I <链名>,向该链中某一位置插入规则,不加数字默认插入成第一条
-P <链名>,设置某个链的默认规则 (如:iptables -t filter -P INPUT DROP filter
表中INPUT链默认规则为拒绝)
-R <链名>,替换一条规则
-D <链名>,删除某一条规则(1.按号码:iptables -t filter -D INPUT 3
删除第三条 ;2.按规则:iptables -t filter -D INPUT -s 192.168.1.0/24 -j DROP
删除这条规则)
-F <链名>,清空某一链的规则
-L <链名>,列出某一链的规则(v:显示详细信息,包括每条规则的匹配包数量和匹配字节数;x:在 v 的基础上,禁止自动单位换算(K、M);n:只显示 IP 地址和端口号码,不显示域名和服务名称) -
-i 流量进入网口名称
-o 流量出去网口名称 -
-s 源地址 (主机:-s 192.168.10.10 或者 网段 :-s 192.168.10.0/24 )
-d 目的地址 (主机:-s 192.168.16.10;网段:-s192.168.16.0/24;域名:www.baidu.com) -
-p 协议类型
- tcp
- udp
- icmp
–icmp-type 0 或 8 (0:代表回来的icmp;8:代表出去的icmp)(用来设置自己ping通别人,别人ping不通自己)
-
–sport 源端口
- –sport 3000 匹配3000端口
- –sport 3000:4000 匹配3000-4000端口(包含3000和4000)
- –sport 3000: 匹配大于3000的端口(包含3000)
- –sport :3000 匹配小于3000的端口(包含3000)
–dport 目的端口(同上)
–sport、–dport 必须联合 -p 使用,必须指明协议类型是什么
-
-j
- ACCEPT 允许通过
- DROP 拒绝通过
- SNAT 源地址转换;nat表中POSTROUTING链;后面加–to 主机或地址池(–to 1.1.1.1 或 --to 1.1.1.1-1.1.1.6)
- DNAT 目的地址转换;nat 表的 PREROUTING 链;–to 主机/地址池/某一端口(–to 1.1.1.1 或 --to 1.1.1.1-1.1.1.6 或–to 1.1.1.1:80)
- MASQUERADE 地址伪装;一般出口网卡的ip是动态获取的,无法静态获取,所以用动态获取;(
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
)
iptables模块
-
按包状态匹配(stat)
- NEW 表示新连接状态的第一个包(如上图)
- ESTABLISHED 状态已经连接(ack=1如上图)
- RELATED (ftp服务器)
ftp正常使用防火墙设置:
iptables -t filter -I FORWARD -s 192.168.2.0/24 -p tcp --dport 21 -o ens33 -j ACCEPT iptables -t filter -A FORWARD -m --state ESTABLISHED,RELATED -j ACCEPT modprobe ip_nat_ftp #ftp的内核模块
- INVALID 如果一个包没有办法被识别 这个包没有任何状态这个包就是INVALID
- UNTRACKED 报文状态未untracked时,表示报文未被追踪,当报文的状态为Untracked时通常无法找到相关连接证明当前报文是否是回应之前发出的报文----只要报文是RELATED 和 ESTABLISHED 都算当前的
-
按来源MAC匹配(Mac):报文经过路由后,数据包中原有的 mac 信息会被替换,所以在路由后的 iptables 中使用 mac 模块是没有意义的
iptables -A FORWARD -m --mac-source xx:xx:xx:xx:xx:xx -j DROP
-
按包速率匹配(limit):limit 英语上看是限制的意思,但实际上只是按一定速率去匹配而已,要想限制的话后面要再跟一条DROP
iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT iptables -A FORWARD -d 192.168.0.1 -j DROP
-
多端口匹配(multiport):一次性匹配多个端口,可以区分源端口,目的端口或不指定端口
iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT //必须与 -p 参数一起使用
iptables保存和开启
Debian/Ubuntu: iptables-save > /etc/iptables/rules.v4
iptables保存和开启
Debian/Ubuntu: iptables-save > /etc/iptables/rules.v4
RHEL/CentOS: iptables-save > /etc/sysconfig/iptables