iptables常用选项及应用实例操作

iptables表与链的关系

1、filter 包过滤
INPUT
FORWARD
OUTPUT
2、NAT  地址转发
OUTPUT
PREROUTING
POSTROUTING
3、Mangle  修改TTL值等
INPUT
FORWARD
OUTPUT
PREROUTING
PSOTROUTING
介绍一下链的含义:
PREROUTING 数据包进入本地,进入路由表之前
INPUT 通过路由表后,目的地为本机 
OUTPUT 由本机产生,向外转发
FORWARD 通过路由表后,目的地不为本机
POSTROUTING 通过路由表后,发送至网卡接口之前

优生级:raw>mangle>nat>filter

SNAT源地址转换 POSTROUTING
DNAT目标地址转换PREROUTING

iptables识别数据包四种状态:
NEW:当与任何主机通信时发出的第一个数据包的状态即NEW,一般为发起连接方发送的第一个标志为SYN=1的数据包  注意:NEW是TCP三次握手中的第一次SYN必须等于1
ESTABLISHED:假设与主机通信时发出的第一个数据包能够通过防火墙,那么后续的你与该主机之间发送和接收到所有数据包状态均为ESTABLISHED (SYN不等于1,ACK=1,FIN不等于1)
RELATED:由一个已经建立的连接所生成的新的连接的状态即为RELATED,例如FTP服务,访问FTP服务器时建立的连接是21端口的发送命令的连接,如果要传输数据则需要按工作模式不同打开其他端口的连接,那么这个连接就是RELATED状态 
INVALID:非法状态的数据包,也就是不属于以上三种状态的数据包,无法实别的状态比如:SYN=1 FIN=1  又请求又发送结束,根本没有这种状态的包
 
 
iptables基本语法
 
   
   
   
   
  1. iptables [-t TABLE] COMMAND CHAIN [createriaj] -j ACTION 
  2.  
  3. -t {raw|mangle|nat|filter},默认filter 
  4.  
  5. COMMAND: 
  6. 规则管理类: 
  7.     -A   增加 
  8.     -I # 插入 
  9.     -D # 删除 
  10.     -R # 替换   
  11. 链接管理类: 
  12.     -F 清空链 
  13.     -N new,新建链   
  14.     -X  删除自定义空链 
  15.     -E rename重命名 
  16. 默认策略: 
  17.     —P policy 
  18. 清空计算器 
  19.     -Z zero 
  20.     每条规则(包括默认策略)都有两个计数器 
  21.         被此规则匹配到的所有数据包的个数 
  22.         被此规则匹配到的所有数据包的大小之和 
  23. 查看类: 
  24.     —L, list 
  25.         -n,numeric 
  26.         -v,verbose 
  27.             -vv 
  28.             -vvv 
  29.     -x exactly 显示精确值,不需要做换算 
  30.     --line-numbers 
  31.      
  32. 匹配条件: 
  33. 基本匹配: 
  34. -s source:ip ,NETWORK 
  35. -d destnations 
  36. -p {tcp|udp|icmp} 
  37. -i inetface 流入 
  38. -o inetface 流出 
  39.  
  40. 扩展匹配:(调用iptables模块,以便扩展iptables匹配功能-m明确指定模块) 
  41.     隐含扩展 
  42.     -p tcp 可以省略-m -tcp 
  43.         --sport PORT 
  44.         --dport PORT 
  45.         --tcp-flags  
  46.             --tcp-flags ACK,SYN,RST,FIN SYN,ACK 这时SYN=1,ACK=1,其他为0 
  47.             要带两个参数要检查的标志位,没有出现的标志位必须为0,出现的为1 
  48.             --tcp-flags ACK,SYN,RST,FIN SYN 可以简单写成--syn 
  49.     -p udp 
  50.         --sport PORT 
  51.         --dport PORT 
  52.     -p icmp 
  53.         --icmp-type 
  54.             8:echo-request ping回显请求 
  55.             0:echo-reply 响应 
  56.             3:ping不通的 
  57.                 还有很多子类 
  58.                 0,1等等 
  59.                  
  60.          
  61.          
  62.     显式扩展 
  63.         -m state --state NEW 
  64.         -m multiport 
  65.             --source-port 22,53,80 
  66.             --destination-ports 
  67.             --ports 
  68.         -m iprange 
  69.            -src -range 192.168.0.2-192.168.22 
  70.            -dst -range 
  71.         -m limit 
  72.             --limit 
  73.             --limit burst 
  74.         -m string 
  75.             --algo bm|kmp 
  76.             --string "STRING" 
  77.         -m time 
  78.             --timestart 8:00 -timestop 18:00 -j DROP 
  79.             --days 
  80.             --datestart --datestop 
  81.     ACTION 
  82.     -j 
  83.     ACCEPT  
  84.     DROP  
  85.     REJECT 
iptables实例操作:
   
   
   
   
  1. 开放ssh的22端口: 
  2. iptables -A INPUT -s 0.0.0.0/0.0.0.0 -d 172.16.100.1/32  -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 
  3. 注意:如果你写成172.16.100.1/16就表示这个网段了,不表示这个特定的ip地址了 
  4.  
  5. iptables -A OUTPUT -s 172.16.100.1 -d 0.0.0.0/0.0.0.0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 
  6. 注意:这个表示别人连进来了,我们要把数据包响应给别人要开OUTPUT链,这时上面已经建立了NEW,所以这次的通信过程是已经建立连接状态,表示为ESTABLISHED 
  7.  
  8. 总结:1、特定的地址掩码是32 
  9.       2、一般进来允许NEW,ESTABLISHED 出去只允许ESTABLISHED 
  10.  
  11. 开放web服务器80端口 
  12. iptables -A  INPUT  -d 192.168.184.136 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT 
  13. iptables -A  OUTPUT  -s 192.168.184.136 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT 
  14.  
  15. 开放DNS的53端口,一种是基于tcp的,一种是基于udp的 
  16. iptables -A INPUT -d 192.168.184.136 -p udp  --dport 53  -m state --state NEW,ESTABLISHED -j ACCEPT 
  17. iptables -A INPUT -d 192.168.184.136 -p tcp  --dport 53  -m state --state NEW,ESTABLISHED -j ACCEPT 
  18. iptables -A OUTPUT -s 192.168.184.136 -p udp --sport 53  -m state --state ESTABLISHED -j ACCEPT 
  19. iptables -A OUTPUT -s 192.168.184.136 -p tcp  --sport 53  -m state --state ESTABLISHED -j ACCEPT 
  20.  
  21. 对上面的规则进行优化: 
  22. INPUT链: 
  23. 优化一 
  24. iptables -A INPUT -d  192.168.184.136 -p tcp -m state --state NEW,ESTABLISHED -m multiport --destination-ports 22,53,80 -j ACCEPT 
  25. iptables -A INPUT -d 192.168.184.136 -p udp  --dport 53  -m state --state NEW,ESTABLISHED -j ACCEPT 
  26.  
  27. 优化二(最好的) 
  28. iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT 
  29. iptables -A INPUT -d  192.168.184.136 -p tcp -m state --state NEW -m multiport --destination-ports 22,53,80 -j ACCEPT 
  30. iptables -A INPUT -d 192.168.184.136 -p udp  --dport 53  -m state --state NEW -j ACCEPT 
  31.  
  32. OUTPUT链 
  33. 优化一 
  34. iptables -A OUTPUT -s 192.168.184.136 -p tcp -m state --state ESTABLISHED -m multiport --source-ports 22,53,80 -j ACCEPT 
  35. iptables -A OUTPUT -s 192.168.184.136 -p tcp  --sport 53  -m state --state ESTABLISHED -j ACCEPT 
  36.  
  37. 优化二(最好的) 
  38. iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT 
  39. 注意:仔细观察一下这个规则这个状态全部是ESTABLISHED,所以可以再次优化的 
  40.  
  41. 开放TCP的23号端口,只允许192.168.184.1-192.168.184.200内的主机访问 
  42. iptables -A INPUT -d 192.168.184.136 -m iprange  --src-range 192.168.184.1-192.168.184.200 -p tcp --dport 23 -m state --state NEW -j ACCEPT  
  43.  
  44. 对ssh进行限制,同一ip只允许发送两个请求 
  45. iptables -A INPUT -d 192.168.184.136 -p tcp --dport 22 -m state --state NEW -m connlimit ! --connlimit-above 2 -j ACCEPT 
  46.  
  47. 对网页内容字符串进行屏蔽,比如屏蔽包含test字样 
  48. iptables -I OUTPUT 1 -m string --algo kmp --string "test" -j REJECT 
  49.  
  50. 开放ftp服务 
  51. lsmod |grep ftp 查看内核的ftp模块 
  52. modprobe ip_nat_ftp 装载内核的ftp模块 
  53. 开放命令连接21号端口: 
  54. iptables -A INPUT  -d 192.168.184.136 -p tcp --dport 21 -m state --state NEW -j ACCEPT 
  55. 开放数据端口: 
  56. iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
  57. iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
  58.  
  59. 禁ping 
  60. iptables -A FORWARD -p icmp --icmp-type 8 -j REJECT 
  61.  
  62. SNAT源地址转换 
  63. iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT --to-source 192.168.100.2  
  64.  
  65. DNAT目标地址转换 
  66. iptables -t nat -A PREROUTING -d 172.16.100.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.2 
  67.  
  68. 日志记录功能 
  69. iptables -t nat PREROUTING -d 172.16.100.1 -p tcp --dport 80 -j LOG --log-prefix "DNAT LOG" 
  70. 注意:日志是记录在messages 
  71.  
  72. 利用iptables的recent模块来抵御DOS攻击:
  73. ssh: 远程连接 
  74. iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP 
  75. iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH 
  76. iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP 
  77.  
  78. 1.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值; 
  79. 2.利用recent和state模块限制单IP在300s内只能与本机建立3个新连接。被限制一分钟后即可恢复访问。 
  80. 下面对最后两句做一个说明: 
  81. 1.第一句是记录访问tcp 22端口的新连接,记录名称为SSH 
  82. --set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目 
  83. 2.第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。 
  84. --update 是指每次建立连接都更新列表; 
  85. --seconds必须与--rcheck或者--update同时使用 
  86. --hitcount必须与--rcheck或者--update同时使用 


 

你可能感兴趣的:(filter,iptables)