iptables命令选项
-A,--append 在所选择的链的最后添加一条规则
-D,--delete 从所选链中删除规则
-R,--replace 替换规则
-I,--insert 向所选链中插入新规则
-L,--list 显示所选链的所有规则,如果没有指定链,则显示表中的所有链
-F,--flush 清空所选的链,如果没有指定链,则清空指定表中的所有链
-Z,--zero 把指定链的所有计数器归零
-N,--new-chain 建立自定义的链
-X,--delete-chain 删除指定的用户自定义链,这个链必须没有被引用,如果被引用,在删除之前必须删除或者替换与之有关的规则
-P,policy 为链设置默认策略
-E,--rename-chain 对自定义的链进行重命名
-v,--verbose 显示详细信息
-x,--exact 使--list输出中的计数器显示准确的数值,而不用K、M、G等估值
-n,--numeric 使输出中的IP地址和端口以数值的形式显示
--line-numbers 显示出每条规则在相应链中的序号
-c,--set-counters 在创建或更改规则时设置计数器
--modprobe 让iptables推测并装载要使用的模块
iptables条件匹配
-p,--protocol 匹配指定的协议
-s,--src,--source 匹配数据包中的源IP地址
-d,--dst,--dstination 匹配数据包中的目的IP地址
-i,--in-interface 以数据包进入本地所使用的网络接口进行匹配
-o,--out-interface 以数据包离开本地所使用的网络接口进行匹配
-f,--fragment 匹配一个被分片的包的第二片或及以后的部分
--sport,--source-port 匹配基于TCP协议数据包的源端口
--dport,--destination-port 匹配基于TCP协议数据包的目的端口
--tcp-flags 匹配指定的TCP标记
--syn 匹配那些SYN标记被设置而ACK和RST标记没有设置的数据包
--tcp-option 匹配TCP协议数据包的头部信息
--icmp-type 根据ICMP类型匹配数据包
--linit 为linit match设置最大平均匹配速率,也就是单位时间内linit match可以匹配几个包,这个匹配操作必须由-m limit明确指定才能使用
--mac-source 基于数据包的MAC源地址进行匹配。这个匹配操作必须由-m mac明确指定才能使用
--mark 以数据包被设置的mark值来匹配。这个匹配操作必须由-m mark明确指定才能使用
--uid-owner 按生成数据包的用户的ID(UID)来匹配外出的包。这个匹配操作必须由-m owner明确指定才能使用
--gid-owner 按生成数据包的用户所在组的ID(GID)来匹配外出的包。这个匹配操作必须由-m owner明确指定才能使用
--pid-owner 按生成数据包的进程的ID(UID)来匹配外出的包。这个匹配操作必须由-m owner明确指定才能使用
--sid-owner 按生成数据包的会话的ID(SID)来匹配外出的包。这个匹配操作必须由-m owner明确指定才能使用
--state 指定要匹配数据包的状态,一共有4种状态可以使用:INVALID、ESTABLISHED、NEW和RELATED。这个匹配操作必须由-m state明确指定才能使用
--tos 根据TOS字段匹配数据包,这个匹配操作必须由-m tos明确指定才能使用
--ttl 根据TTL的值来匹配数据包,这个匹配操作必须由-m ttl明确指定才能使用
iptables动作/目标
ACCEPT 允许符合条件的数据包通过
DROP 拒绝符合条件的数据包通过
LOG 用来记录与数据包相关的信息
MARK 设置mark值,这个值是一个无符号的整数
MASQUERADE 和SNAT的作用相同,区别在于它不需要指定--to-source
SNAT 源网络地址转换
DNAT 目的网络地址转换
REDIRECT 转发数据包一另一个端口
REJECT REJECT和DROP都会将数据包丢弃,区别在于REJECT除了丢弃数据包外,还向发送者返回错误信息
RETURN 使数据包返回上一层
TOS 用来设置IP头部中的Type Of Service字段
TTL 用于修改IP头部中Time To Live字段的值
ULOG ULOG可以在用户空间记录被匹配的包的信息,这些信息和整个包都会通过netlink socket被多播
QUEUE 为用户空间的程序或应用软件管理包队列
MIRROR 颠倒IP头部中的源目地址,然后再转发包
iptables -A 添加记录
#iptables -A INPUT -p icmp -j DROP 添加一条输入的ICMP的拒绝记录
iptables -D 删除记录
#iptables -D OUTPUT -p icmp -j DROP 删除一条输出的ICMP的拒绝记录
iptables -F 清除记录
#iptables -F 清除所有记录
iptables -L 列出记录
#iptables -L 列出所有记录
iptables -I 插入记录
#iptables -I INPUT 3 --dport 80 -j DROP 在位置3的后面插入一条输入的80端口的拒绝记录
#iptables -P INPUT -j DROP 将列表中所有INPUT的链默认策略定义为拒绝
#iptables -t net -P OUTPUT -j ACCEPT 将net表中所有OUTPUT的链默认策略定义为拒绝
#iptables -L FORWARD 查看表中FORWARD链的规则记录
#iptables -A INPUT -p tcp --dport 80 -j ACCEPT 向列表中添加一条允许访问TCP协议的80端口记录
#iptables -I INPUT -s 192.168.1.0/24 -j DROP 向列表中插入一条拒绝源IP为192.168.1.0网段的数据包通过
#iptables -D INPUT 2 删除列表中输入的第二条记录
#iptables -F OUTPUT 清除列表中所有OUTPUT记录
#iptables -A FORWARD -d hi.baidu.com./ylinuxs -j DROP 禁止客户端访问域名hi.baidu.com./ylinuxs的网站
#iptables -A FORWARD -d 202.16.28.6 -j DROP 禁止客户端访问IP地址为202.16.28.6的网站
#iptables -I FORWARD -p tcp --dport 8000 -j DROP
#iptables -I FORWARD -p udp --dport 8000 -j DROP
#iptables -I FORWARD -d tcpconn.tencent.com -j DROP 上面三行的意思为禁止用户访问qq(有可能不太全,可以在qq安装目录下有qq号码的目录下找到config.db文件,打开里面有全部的qq服务器地址)
#iptables -A INPUT -p tcp --dport 80 -j LOG \ --log-level notice 指定记录日志,并指定等级为notice
#iptables -A INPUT -p tcp --dport 80 -j LOG \ --log-level notice --log-prefix "iptables:" 在已经记录日志信息之前加上指定的前缀
#iptables -A INPUT -p tcp -j LOG --log-tcp-sequence 把数据包的TCP序列号和其它日志信息一起记录下来
#iptables -A FORWARD -p tcp -j LOG --log-tcp-options 记录TCP包头中的字段大小不变的选项
#iptables -A FORWARD -p tcp -j LOG --log-ip-options 记录IP包头中的字段大小不变的选项
#iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.1 将数据包的源地址改为公网地址
DNAT(网络地址转达换):
#iptables -t nat -A PREROUTING -i 网络接品 -p 协议 --dport 端口 -j SNAT --to-destination IP地址
如:
#iptables -t nat -A PREROUTING -d 202.19.26.63 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1 使用DNAT将发送到202.19.26.63,并且端口为80的数据包转发至192.168.1.1
#iptables -t nat -A PREROUTING -d 202.19.26.63 -p tcp --dport 80 -j DNAT --to 192.168.1.1-192.168.1.2 将公司内部的2台服务器,全部响应为外部地址202.19.26.63
#iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp –dport 80 -j DNAT–to-destination 192.168.2.1:8080 将本地80端口的请求转发到8080端口,当前主机IP为192.168.2.1
iptables可以使用扩展模块来进行数据包的匹配,语法就是 -m module_name, 所以-m tcp 的意思是使用 tcp 扩展模块的功能 (tcp扩展模块提供了 --dport, --tcp-flags, --sync等功能)其实只用 -p tcp 了话, iptables也会默认的使用 -m tcp 来调用 tcp模块提供的功能。但是 -p tcp 和 -m tcp是两个不同层面的东西,一个是说当前规则作用于 tcp 协议包,而后一是说明要使用iptables的tcp模块的功能 (--dport 等)
MASQUERADE(伪装接口之间的数据):
#iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE 将192.168.1.0/24的内部地址,转换为ppp0的公网地址,并把数据伪装
#iptables -A INPUT -i lo -j ACCEPT 添加一条允许使用回环地址的记录
#iptables -A FORWARD -p tcp --dport 80 -j ACCEPT 添加一条记录是允许80端口转发
#iptables -A FORWARD -p udp --dport 53 -j ACCEPT
#iptables -A FORWARD -p tcp --dport 53 -j ACCEPT 上面两条是添加记录是允许53端口转发
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT 允许客户端访问服务器的ssh
执行iptables -X 出现如下问题:
iptables: Too many links
解决办法:
iptables -Z
iptables -X
转载于:https://blog.51cto.com/19001989/696540