iptables 语法格式:
表及链的操作选项:
-N :新增链
-I : 插入规则
-A :添加规则
-D :删除规则
-R :修改某条规则
-X :删除自定义的链(前提为该链被引用次数为0及规则为空)
-F :清除所有规则
-Z:清零 (清除所有链的计数值)
-P :定义默认规则(ACCEPT,DROP,REJECT..)
-L :列出所有规则
-v:列出详细信息
-n:以数字方式显示信息
常用:iptables -vnL
-E:改变链名称
规则匹配相关选项:
-s :源地址(例:192.168.2.0/16)
-d :目标地址
--dport :目标端口(例:137:140为137~140所有端口,可单独指定某个端口)
--sport :源端口
-p :指定protocol (例 tcp,udp ,..)
-i :入方向网卡接口
-o :出方向网卡接口
实战:
1.使用iptables放行icmp协议,允许自己ping对端,及允许对端ping 自己
1 iptables -I OUTPUT -s 192.168.2.243 -d 192.168.2.244 -p icmp --icmp-type 8/0 -j ACCEPT (实现自己访问对端)
2 iptables -I INPUT -s 192.168.2.244 -d 192.168.2.243 -p icmp --icmp-type 0/0 -j ACCEPT
3
4
5 iptables -I INPUT -s 192.168.2.244 -d 192.168.2.243 -p icmp --icmp-type 8/0 -j ACCEPT (实现对端访问本机)
6 iptables -I OUTPUT -s 192.168.2.243 -d 192.168.2.244 -p icmp --icmp-type 0/0 -j ACCEPT
2.使用iptables放行DNS流量
1 1.实现允许本机(DNS服务器)访问外部根DNS服务器作递归查询
2 iptables -I OUTPUT -s 192.168.2.244 -p tcp --dport 53 -j ACCEPT
3 iptables -I OUTPUT -s 192.168.2.244 -p udp --dport 53 -j ACCEPT
4
5 iptables -I INPUT -d 192.168.2.244 -p tcp --sport 53 -j ACCEPT
6 iptables -I INPUT -d 192.168.2.244 -p udp --sport 53 -j ACCEPT
7
8
9
10
11 2.实现客户机访问本机作域名解析
12 iptables -I INPUT -s 192.168.15.86 -d 192.168.2.244 -p tcp --dport 53 -j ACCEPT
13 iptables -I INPUT -s 192.168.15.86 -d 192.168.2.244 -p udp --dport 53 -j ACCEPT
14
15 iptables -I OUTPUT -s 192.168.2.244 -d 192.168.15.86 -p tcp --sport 53 -j ACCEPT
16 iptables -I OUTPUT -s 192.168.2.244 -d 192.168.15.86 -p udp --sport 53 -j ACCEPT
3. 放行samba 流量
1 iptables -I INPUT -s 192.168.2.244 -d 192.168.2.243 -p tcp -m multiport --dport 139,445 -j ACCEPT
2 iptables -I INPUT -s 192.168.2.244 -d 192.168.2.243 -p udp -m multiport --dport 137,138 -j ACCEPT
3 4
5 iptables -I OUTPUT -s 192.168.2.243 -d 192.168.2.244 -p tcp -m multiport --sport 139,445 -j ACCEPT
6 iptables -I OUTPUT -s 192.168.2.243 -d 192.168.2.244 -p udp -m multiport --sport 137,138 -j ACCEPT
扩展匹配 选项:
-m
multiport (匹配多个离散端口)
--dports 22,23,139,445 ...
--sports ...
示例: 同时开放多个端口
1 iptables -I INPUT -s 192.168.2.2 -d 192.168.2.3 -p tcp -m multiport --dport 22,23,80,445 -j ACCEPT
2 iptables -I OUTPUT -s 192.168.2.3 -d 192.168.2.2 -p tcp -m multiport --sport 22,23,80,445 -j ACCEPT
iprange (匹配地址范围)
--src-range
--dst-range
示例:icmp同时放行多个客户机访问
1 iptables -I INPUT -d 192.168.20.243 -p icmp --icmp-type 8/0 -m iprange --src-range 192.168.20.240-192.168.20.245 -j ACCEPT
2 iptables -I OUTPUT -s 192.168.20.243 -p icmp --icmp-type 0/0 -m iprange --dst-range 192.168.20.240-192.168.20.245 -j ACCEPT
time (匹配放行时间)
--timestart
--timestop
[!] --weekdays day,[day,...]
[!] --monthdays day,[day,...]
示例:匹配指定时间段内访问telnet-server
1 iptables -R INPUT 1 -s 192.168.20.244 -d 192.168.20.243 -p tcp --dport 23 -m time --timestart 10:00 --timestop 14:00 --kerneltz -j ACCEPT
2 iptables -R OUTPUT 1 -s 192.168.20.243 -d 192.168.20.244 -p tcp --sport 23 -m time --timestart 10:10 --timestop 14:00 --kerneltz -j ACCEPT
3
4 注:--kerneltz 为使用内核时区 (时区错误会导致指定时间内无法连接)
5 timedatectl set-timezone Asia/Shanghai (修改指定时区为Shanghai
1 iptables -R OUTPUT 1 -s 192.168.20.243 -d 192.168.20.244 -p tcp --sport 23 -m time --timestart 10:10 --timestop 14:00 --kerneltz --weekdays 1,2,3,4,5 -j ACCEPT
2 iptables -R INPUT 1 -s 192.168.20.244 -d 192.168.20.243 -p tcp --dport 23 -m time --timestart 10:00 --timestop 14:00 --kerneltz --weekdays 1,2,3,4,5 -j ACCEPT
3
4 --weekdays 可指定工作日连接,1为周一
string (过滤字符串)
--algo bm (指定http加密方式一般为bm)
--string pattern
1 iptables -I OUTPUT -s 192.168.20.243 -p tcp --sport 80 -m string --algo bm --string "iptables" -j REJECT
2 http page 中出现 iptables 字样时 REJECT
connlimit (限制连接次数)
--connlimit-upto (小于多少次允许,根据防火墙默认策略制定)
--connlimit-above (在几次之上就拒绝)
1 iptables -I INPUT -s 192.168.15.86 -p tcp --syn -m connlimit --connlimit-above 5 -j REJECT
2 syn=1出现5次以上拒绝该地址连接(syn=1为TCP第一次握手状态)
limit (限制传输速率)
--limit rate[/second /minute /hour /day ] (速率/时间)
--limit-burst number (令牌桶大小)
1 iptables -R INPUT 1 -d 192.168.20.243 -p icmp --icmp-type 8/0 -m limit --limit-burst=5 --limit=10/minute -j ACCEPT
2 指定icmp协议允许每分钟10次请求,每分钟最多同时连续5次
state (追踪报文状态,根据状态定制策略)
需提前装载模块:
nf_conntrack
nf_conntrack_ipv4
nf_conntrack_ftp (用于追踪FTP协议数据,装载后可使用 RELATED 状态)
--state (NEW,ESTABLISHED,RELATED,INVALID,UNTRACKED)
示例:
1 iptables -I OUTPUT -s 192.168.20.243 -m state --state ESTABLISHED -j ACCEPT
2 出站报文状态为ESTABLISHED状态时放行,一般客户端初次请求报文状态为NEW,服务端回应时报文状态为ESTABLISHED
-j target (匹配条件后执行动作)
ACCEPT (允许)
DROP (丢弃)
REJECT (拒绝)
LOG (记录日志)
--log-level (指定日志等级)
--log-prefix (添加日志信息前缀)
默认日志文件为: /var/log/message
1 iptables -A INPUT -d 192.168.20.243 -p tcp --dport 22 -j LOG --log-prefix access-ssh
NAT
当主机作为对外防火墙提供服务时,可用NAT对原,目的地址作转换;(类似与路由器NAT功能)
示例:
1 iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.30.254 (转换源地址为 172.16.30.254
2
3 iptables -t nat -A PREROUTING -d 192.168.20.243 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.2:8080
4 (端口非必须指定,默认为目标端口