iptables
iptables [-t table] COMMND chain CRETIRIA -j ACTION
-t 不定表的话,默认filter
COMMADN 怎么对链进行管理 增加 删除 等
chain:指定链操作
CRETIRIA:匹配规则 (源地址是什么,目标地址是什么)
-j ACTION: 说明匹配到的结果处理
iptables -t filter -s 172.16.0.0/16 -p udp --dport 53 -j DROP
到本机内部来的访问53号端口的都不允许
REJETCT比DROP更彻底,直接拒绝
iptables -L -n 显示iptables定义的规则链
iptables -t nat -L -n
iptables -L -n -v 可以查看计数器
COMMAND:命令的类
链管理命令
-P #polocy 表示通策略,设定默认策略(门是是开的还是关的)
iptables -P INPUT (DROP|ACCEPT) #如果本身是开启的,而改为关
闭的,操作要小心(比如你的机房在美国,而你把SSH给拒绝了)
-F #FLUSAH 清空规则链
iptables -t nat -F PREROUTING
清空所有nat的进路由表规则链
-N #new 新建用户自定义链
iptables -n inbound_tcp_web
-X #删除用户定义的空链,如果有规则删除不了,所以删除一个链之前需要把里
面的规则清空了
-E #用于重命名用户自定义的链
iptables -E oldname newname
-Z #清空链,及链中规则的计数器
iptables -L -n -v
pkts bytes #两个计数器 ##看视频
iptables -Z 清空这些计数器
规则管理命令
-A #atend 追加,规则的次序很关键,-A来追加是放在最后
-I #insert 插入,插入到num条不能超过总条数!!
iptables -I num
-R #replace 替换,替换或者修改某条规则
iptables -R -s 172.16.0.0/16 -p udp --dport 53
iptables -R
-D #delete 删除
iptables -D INPUT num
查看命令
-L #list 它有子选项,组合使用,如果不带自选项,很慢,需要解析地址
-n 数字方式
-v verbos 详细信息 -v -vv -vvv
iptables -L -n -vvv
-x exsicly 精确的值,没有经过单位换算的
-line-number 显示行号
iptables -L -n --line-number
####这些都是常用的,必须牢牢记住这些命令
对于TCP协议一共四种状态:
NEW 新发起的连接
ESTABLISHED 已经建立的连接
RELATED 相关联的连接
INVALID 无法识别的连接
--------------------------------------------------------------
匹配标准:
1.通用匹配:大家都可以用
-s #做源地址匹配,可以取反,加上叹号! 也可有--source
IP,NETWOER/NEMASK,0.0.0.0/0.0.0.0(匹配所有)
-d #匹配目标地址 或--destnation
-p #protocal 用于匹配协议
-p [tcp|udp|icmp] 一般只定义这三个协议
-i #inbound 流入接口,后面跟网卡
-i eth0
-o # outbond 流出接口
流入一般用在PRE Input FORW
流出一般同在POST OUTPURT FORW
2.扩展匹配:对于某种功能的扩展
隐含扩展
-p tcp
--dport 目标端口 0-65535
可以使用21:23表示连续,(但是不能使用非连续的端口)
--sport 源端口 0-65525
--tcp-flags SYN,ACK,FIN,PSH,RST,URG
检查的标志位 必须为1标志位 ,syn为1,其他为0
--tcp-flags syn,ack,fin,rst,syn
三次握手的第一次的数据包,这种匹配方式有一个简写--syn
-p udp
--dport #目标端口
--sport
-p icmp
--icmp-types
ping的报文类型
echo-request 8 #匹配PING出去的数据包,类型用8表示请求回显
echo-reply 0 #别人响应数据包,类型用0表示
显式扩展
-P tcp -m mutiport --dports
#-m mutiport启动多端口扩展,这样可以根很多端口 (这样就可以使
用多端口了,用,隔开)
-p tcp -m mutiport --dports 21,23,80
#-m 启动模块
-j # 指定action 匹配后对应的处理动作
DROP 悄悄丢弃数据包,不返回拒绝信息
REJIECT 明确丢弃数据包,返回拒绝信息,在网络上一般使用DROP
ACCEPT 接受
custom_chain 使用自定义的链
DNAT 目标地址转换
SNAT 源地址转换
MASQUERADE 源地址伪装
REDIRECT 重定向,主要实现端口重定向
MARK 在mangel表利用的,打标记
RETUREN 返回,调用用户链后按链处理,处理接受后,返回到下一个内
置链
其实有数十个动作,这里只是常用的
状态检测:
NEW 新发起的连接
ESTABLISHED 已经建立的连接
RELATED 相关联的连接
INVALID 无法识别的连接
----------------------------------------假设一台主机只允许172.16.0.0访问ssh
到本机内部访问的最好定义在INPUT
从本机内部出去的最好定义在OUTPUT
iptables -t filter -A INPUT -s 172.16.0.0/16 172.16.100.1 -p tcp --dport 22 -j ACCEPT
iptables -L -n -v
iptables -t filter -A OUTPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp
在互联网上比较通用的是通策略,默认关闭
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
将来应用时,一定要保证远程链接是开起的
------------------------------------------------------------
模块开启
-m state --state
通过下面几个子命令来实现模块的控制管理:
connlimit
帮你限定某一个特定的客户,可以发起的并发请求
对于服务器而言,比如WEB,有一个下载站,如果一个用户使用P2P或者多线程同时发起数十个连接,势必造成占用过多资源,conlimit可以限定这些链接数
[!] --connlimit-above n
iptables -p tcp -syn -dport 23 -m connlimit --connlimit-above 2 -j REJECT
iprange 对源地址段进行限定
iptables -A FORWARD -m iprange --src-range 172.16.100.1-172.16.100.100 -dst-range 172.16.0.1-172.16.0.2 -p tcp --dport 80
limit 匹配一个限定的速率,令牌通机制,它不是用来限定带宽的,只是做速率匹配的
它可以通过burst 和 rete来限定某些特定应用的速率
#看视频
令牌通机制,收集空闲令牌
--limit rate 3/minutes 没分钟匹配3个数据包
--limit-burst number
tc 一个小工具,使用简单,可以实现流量控制
mac 匹配源mac地址,在互联网上匹配目标mac是没有意义的
--mac-source [!] adress
multiport 开启多端口机制,最多一次指15个
--soure-ports
--destination-ports
--ports
例子:
iptables -A FORWARD -p tcp -m multiport --destination-ports 22,25,80,110 -m iprange --src-range 172.16.0.1-172.14.100.254 -m state --state NEW,ESTABLISHED -j ACCEPT
stirng 根据某个字符串来限定
# string 匹配汉字能力有限,但是匹配英文字母,拼音很好用
--algo bm|kmp 使用哪种算法来匹配,必须选一个
bm由Boyer-Moore开发 kmp由Knuth-Pratt-Morris
例子:只要有qq.com就不能访问
iptables -A FORWARD -m string --string "qq.com" --algo bm -j REJECT
time 指定起始时间和结束时间来限定 例如周一到周五可以上网
--timestart value HH:MM
--timestop value
--days listofdays
--datestart date
--datestop date
-m time --timestart
LOG 使用log可以记录日志,limit主要和log一起用
--log-level level
--log-prefix prefix
给日志加一个前缀,这样可以在messages里更方便的查看特定的日志,例如给22
iptables -A INPUT -d 172.16.100.1 -p tcp --dport 22 -m limit --limit 6/minute -j LOG --log-prefix "Iptables SSHD"
#一般我们使用limit来限定日志速率,这样可以减轻磁盘的压力
REJECT 拒绝理由
--reject-with type
The type given can be
icmp-net-unreachable
icmp-host-unreachable
icmp-port-unreachable
icmp-proto-unreachable
icmp-net-prohibited
icmp-host-prohibited ro
icmp-amin-prohibited (*)