iptables [-t 表] -命令 匹配 操作
说明
(1) -t 表
表选项用于指定命令应用于哪个iptables内置表。
(2)命令
命令选项用于指定iptables的执行方式,包括插入规则,删除规则和添加规则,如下表所示
命令 说明
-P | --policy 链名> | 定义默认策略 |
-L | --list 链名> | 查看iptables规则列表 |
-A | --append 链名> | 在规则列表的最后增加1条规则 |
-I | --insert 链名> | 在指定的位置插入1条规则 |
-D | --delete 链名> | 从规则列表中删除1条规则 |
-R | --replace 链名> | 替换规则列表中的某条规则 |
-F | --flush 链名> | 删除表中所有规则 |
-Z | --zero 链名> | 将表中数据包计数器和流量计数器归零 |
-X | --delete-chain 链名> | 删除自定义链 |
-v | --verbose 链名> | 与-L它命令一起使用显示更多更详细的信息 |
(3) 匹配规则
匹配选项指定数据包与规则匹配所具有的特征,包括源地址,目的地址,传输协议和端口号,如下表所示
匹配 说明
-i --in-interface 网络接口名> 指定数据包从哪个网络接口进入,
-o --out-interface 网络接口名> 指定数据包从哪个网络接口输出
-p ---proto协议类型 指定数据包匹配的协议,如TCP、UDP和ICMP等
-s --source 源地址或子网> 指定数据包匹配的源地址
--sport 源端口号> 指定数据包匹配的源端口号
--dport 目的端口号> 指定数据包匹配的目的端口号
-m --match 匹配的模块 指定数据包
规则所使用的过滤模块
linux netfilter/Iptables包过滤防火墙
带状态检查的包过滤防火墙:状态:new,established,invalid,related
new:syn=1 新发起的请求
established : syn<>1 ack=1 fyn<>1 已建立的连接
output:一般都是ESTABLISHED
related:关联到的状态. ftp 的连接
默认规则:
*filter # 使用 iptables -P INTPUT|OUTPUT|FORWARD DROP :INPUT DROP [41:5302] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.7/32 -p tcp -m tcp --dport 22 -j ACCEPT # 在input链上 -s指定源地址:172.16.0.0/16 -d 指定目标地址 172.16.100.7 (本机) -p 指定协议(tcp) -m 扩展选项(tcp) 允许172.16.0.0/16这个网段用户能够访问本地的sshd服务进行访问 iptables -A INPUT -d 172.16.100.7/32 -p tcp -m tcp --dport 80 -j ACCEPT # 在input链上 -d 指定目标地址 172.16.100.7 -s 忽略表示所有的,允许所有用户对本地的web服务进行访问 iptables -A INPUT -i lo -j ACCEPT # 允许本机对自己本地回环地址进行访问 iptables -A OUTPUT -s 172.16.100.7/32 -d 172.16.0.0/16 -p tcp -m tcp --sport 22 -j ACCEPT # 在output链上 -s指定源地址:172.16.100.7(本机) -d 制动目标地址 172.16.0.0/16 -p 指定协议(tcp) -m 扩展选项(tcp) 允许172.16.0.0/16这个网段用户能够访问本地的sshd服务进行访问 iptables -A OUTPUT -s 172.16.100.7/32 -p tcp -m tcp --sport 80 -j ACCEPT # 在output链上 -s指定:172.16.100.7(本机) -p 指定协议(tcp) -m 扩展选项 允许所有用户对本地的web服务进行访问 -j :指定允许 或拒绝(ACCEPT DROP) -A OUTPUT -o lo -j ACCEPT # 允许本机对自己本地回环地址进行访问
# iptables -P INPUT DROP # 将默认INPUT链策略改为拒绝,起初是ACCEPT # iptables -P OUTPUT DROP # 将默认OUTPUT链策略改为拒绝,起初是ACCEPT # iptables -L -v -n Chain INPUT (policy DROP 5 packets, 843 bytes) pkts bytes target prot opt in out source destination 247 17320 ACCEPT tcp -- * * 0.0.0.0/0 172.16.251.132 tcp dpt:22 state NEW,ESTABLISHED Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 146 14752 ACCEPT tcp -- * * 172.16.251.132 0.0.0.0/0 tcp spt:22 state ESTABLISHED # iptables -A INPUT -d 172.16.251.132 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -s 172.16.251.132 -p udp --dport 53 -m state --state ESTABLISHED -j ACCEPT # 开放所有用户对本机DNS服务器的请求 # iptables -A INPUT -d 172.16.251.132 -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -s 172.16.251.132 -p tcp --dport 53 -m state --state ESTABLISHED -j ACCEPT # 因为DNS主从复制的时候使用的就是TCP的53号端口,所以也要开放
规则优化:
# iptables -A INPUT -d 172.16.100.7/32 -m state --state ESTABLISHED -j ACCEPT # 所有用户所有的数据包只要是,只要是已连接的请求统统ACCEPT统统放行 # iptables -A INPUT 2 -d 172.16.251.132 -p tcp -m state --state NEW,ESTABLISHED -m multiport --destination-ports 22,53,80 -j ACCEPT # 使用-m multiport --destination-ports 22,53,80 指定多个目标端口 # iptables -A OUTPUT -s 172.16.100.7/32 -m state --state ESTABLISHED -j ACCEPT # 所有只要使用本机流出的数据包并且状态为established 统统放行
转载于:https://blog.51cto.com/chrome/1389277