标签:iptables
实例:
#iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -j DROP 源地址为172.16.0.0网段的,访问172.16.100,7的数据包都丢弃。
#iptables -L -n 查看filter表的规则
#iptables -t nat -L -n 查看nat表中的规则
#iptables -A INPUT -m state --state NEW,ESTABLISHED-j ACCEPT 显示扩展,允许连接状态为NEW和ESTABLISHED的数据包进入本机
1.本机ip为172.16.100.7,有sshd服务,监听在tcp22端口,放行172.16.0.0对本机sshd服务的访问
#iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT
#iptables -t filter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT
2.修改规则默认策略为DROP,只开放web服务:
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
#iptables -I INPUT -d 172.16.100.7 -tcp -dport 80 -j ACCEPT
#iptables -I OUTPUT -s 172.16.100.7 -tcp -sport 80 -j ACCEPT
3.允许本地io接口的ping
#iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i io -j ACCEPT
#iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o io -j ACCEPT
4.允许本机对外ping
#iptables -A OUTPUT -s 192.168.100.7 -p icmp -icmp-type 8 -j ACCEPT
#iptables -A INPUT -d 192.168.100.7 -p icmp -icmp-type 0 -j ACCEPT
5.允许外部ping本机
#iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -J ACCEPT
#iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 0 -J ACCEPT
6.假设在172.16.1007上搭建了DNS服务,开放对应端口提供服务
为客户端提供DNS解析:
#iptables -A INPUT -d 172.16.100.7 -p udp -dport 53 -j ACCEPT
#iptables -A OUTPUT -s 172.16.100.7 -p udp -sport 53 -J ACCEPT
向其他DNS服务器查询:
#ptables -A INPUT -d 172.16.100.1 -p udp -sport 53 -j ACCEPT 接受其他DNS的响应,数据包源端口为53
#ptables -A OUTPUT -s 172.16.100.7 -p udp -dport 53 -j ACCEPT 向其他DNS发送请求,数据包目标端口为53
#iptables -A INPUT -d 172.16.100.7 -p tcp -dport 53 -j ACCEPT
#iptables -A OUTPUT -s 172.16.100.7 -p tcp -sport 53 -J ACCEPT
#ptables -A INPUT -d 172.16.100.7 -p tcp -sport 53 -J ACCEPT
#ptables -A OUTPUT -s 172.16.100.7 -p tcp -dport 53 -J ACCEPT
7.保存规则到默认配置文件:
#service iptables save
8.自定义保存配置文件并装载:
#iptables-save > /etc/sysconfig/iptables.test
#iptables-restore < /etc/sysconfig/iptables.test
9.清空所有规则:
#iptables -F
10.使用连接状态检测方式改写sshd和httpd规则
只有状态为NEW和ESTABLISED的数据包可以进入本机,只有状态为ESTABLISHED的数据包可以从本机出去。其余数据包均丢弃。
此规则使服务器只能响应客户端请求,不主动发出请求。保证了服务器是被动连接。提高了安全性。
#iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 连接状态为NEW和
ESTABLISHED的数据包允许进入本机
#iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 连接状态为ESTABLISHED的数据包允许从本机出去,其他状态则不允许。
#iptables -A INPUT -d 172.16.100.7 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
#iptables -P INPUT DROP 修改默认规则
#iptables -P OUTPUT DROP
11.临时修改修改ip_conntrack的max值和缓存时间,否则连接数过大则超过max的连接则会被拒绝。
#sysctl -w net.ipv4.ip_conntrack_max=65536 默认为32768
#sysctl -w net.ipv4.ip_conntrack_tpc_timeout_established=86400
12.永久修改ip_conntrack的相关值
#vim /etc/sysctl.conf
net.ipv4.ip_conntrack_max=65536
net.ipv4.ip_conntrack_tpc_timeout_established=86400
13.允许外部ping本机:
#iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
14.合并OUTPUT追踪规则:
#iptable -I OUTPUT -s 172.16.100.7 -m state --state ESTABLELISHED -j ACCEPT 只要符合源地址为172.16.100.7并且连接状态为ESTABLISHED的数据包均放行。
#iptable -D OUTPUT 2 删除其他规则
#iptable -D OUTPUT 2
#iptable -D OUTPUT 2
#iptables -L -n --line-nubmers
15.假设172.16.100.7上有假设ftp服务器,允许提供ftp服务:
这里ftp一般设置成主动模式,即开放20,21端口。被动模式开放端口太多,规则不好定义。
先加载ip_conntrack_ftp 和ip_nat_ftp模块到内核中
#vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
#iptables -A INPUT -d 172.16.100.7 -p tcp -dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 允许状态为NEW和ESTABLISHED的,目标地址为172.16.100.7,端口为22的ftp协议数据包进入本机。
#iptables -I OUTPUT -s 172.16.100.7 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT 允许状态为ESTABLISHED和RELATED的数据包从本机出去,包括协议和数据。
#iptables -I INPUT -d 172.16.100.7 -p -tcp -m state --state ESTABLISHED,RELATED -j ACCEPT 允许状态为ESTABLISHED和RELATED的ftp数据包进入本机本机。
若ftp的账号储存在mysql上,则需要允许io回环,否则无法连接mysql进行账号验证。
#iptables -A INPUT -i io -j ACCEPT
#iptables -A OUTPUT -o io -j ACCEPT
16.多端口匹配
使用多端口匹配可以将多个条目合并,可以提高匹配效率。
将sshd、vsftpd、httpd进行多端口合并。
#iptables -F
#iptables -I INPUT -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,REALTED -j ACCEPT
#iptables -I INPUT 2 -d 172.16.100.7 -p tcp -m multiport --destination 21,22,80 -m state --state NEW -j ACCEPT
#iptables -I OUTPUT -s 172.16.100.7 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A INPUT -i io -j ACCEPT
#iptables -A OUTPUT -o io -j ACCEPT
17.匹配条件取反
#iptables -A INPUT -d ! 172.16.100,7 -j ACCEPT 表示除目标地址为172.16.100.7的数据包允许进入本机
18.指定ip组;
#iptables -A INPUT -p tcp -m iprange 172.16.100.3-172.16.100.10 -j ACCEPT
19.限定连接服务器的tcp连接数为5个:
#iptables -A INPUT -p tcp -d 172.16.100.7 --dport 80 -m connlimit ! --connlimit-above 5 -j ACCEPT
或
#iptables -A INPUT -p tcp -d 172.16.100.7 --dport 80 -m connlimit --connlimit-above 5 -j REJECT
20.限定ping请求的速率:
#iptables -A OUTPUT -s 127.16.100.7 -m state --state RELATED,ESTABLISHED -J ACCEPT
#iptables -I INPUT -p icmp --icmp-type 8 -d 172.16.100.7 -m limit --limit 5/minute [--limit-burst 5] -j ACCEPT 指定进入本机的ping请求为每分钟5个 ,每分钟内最高可以同时请求5个。--limit-burst可以不指定,默认为5。
21.指定字符串限定用户访问
#iptables -I OUTPUT -s 172.16.100.7 -m string --algo kmp --string “test” -j REJECT 响应数据包中包含test字符的都拒绝
22.自定义日志记录功能
日志的条目一定要在对应条目的上方才能被正确匹配到。
以自定义外部主机允许ping为例
#iptables -I INPUT 3 -d 172.16.100.7 -p icmp -j LOG --log-prefix "ping log"
#iptables -I INPUT 4 -d 172.16.100.7 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
#cat /var/log/messages |grep "ping log"
23.使用自定义链
自定义链名为test。自定义链要放在列表的最前,调用完毕后返回列表继续匹配。
#iptables -N test 创建自定义链test
#iptables -A test -d 255.255.255.255 -p icpm -j DROP 添加规则
#iptables -A test -d 172.16.100.7 -j RETURN 放在最后,跳转回主链
#iptables -I INPUT 1 -j test 调用test链
24.防止DOS攻击。
是使用recent扩展来控制连接数。以sshd服务为例
#iptables -I INPUT 2 -d 172.116.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP 将目标地址是172.16.100.7,端口为tcp协议的22号,tcp连接个数大于3的tcp连接都丢弃。
#iptables -I INPUT 3 -d 172.116.100.7 -p tcp --dport 22 -m recent --set --name sshconn -m state --state NEW 将目标地址是172,16,100.7,端口为tcp协议的22号,建立名为sshconn的清单,将状态是NEW对应的ip地址记录在sshconn中。
#iptables -I INPUT 4 -d 172.116.100.7 -p tcp --dport 22 -m recent --update --second 300 --hitconut 3 --name sshconn -j DROP 将目标地址是172,16,100.7,端口为tcp协议的22号,sshconn清单中符合300秒内新建连接数于或等于3的数据包丢弃。即只允许每个ip地址对sshd服务建立2个连接。第3个连接请求将被拒绝。
25.启用网卡转发
#vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#sysctl -p
26.源地址转换。
假设该网关内有2张网卡,enoin0的IP为192.168.10.1,enoout0的IP为 123.123.0.1,内网为192.168.10.0/24。外网服务器ip为123.123.0.5,内网主机ip为192.168.10.2。
现允许192.168.10.2访问123.123.0.5。
#iptables -t nat -A POSTROUTING -o enoout -s 192.168.10.0/24 -j SNAT --to-source 123.123.0.1
假设网关上有enoout0-enoout3多块网卡,ip地址位123.123.0.1-123.123.0.4。多源地址转换需要配合负载均衡等设备配合才能正常使用,因为数据包出去的端口和回来的端口不一定相同。
#iptables -t nat -A POSTROUTING -o enoout -s 192.168.10.0/24 -j SNAT --to-source 123.123.0.1-123.123.0.4
27.禁止内网主机ping网关,同时开放httpd服务。
对于网关来说,对icmp报文提供转发,不涉及其他表。
#iptables -A FORWARD -s 192.168.10.0/24 -p icmp -j REJECT
#iptables -A FORWARD -m state --state ESTABLISHED -j ACCETP
#iptables -A FORWARD -m state --state NEW -s 192.168.10.0/24 --dport 80 -J ACCEPT
28.允许内网ping网关。
#iptables -A FORWARD -s 192.168.10.0/24 -p icmp --icmp-type 8 --m state --state NEW -J ACCEPT
29.允许访问ftp,提前加载对应内核模块(ip_nat_ftp)
#iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 21 --m state --state NEW -J ACCEPT
#iptables -R FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
30.目标地址转换。
网关内有2张网卡,enoin0的IP为192.168.10.1,enoout0的IP为 123.123.0.1,内网为192.168.10.0/24。外网客户端ip为123.123.0.5,内网服务器ip为192.168.10.2,端口为80。
现允许外网客户端访问内网服务器。
#iptables -t nat -A PREROUTING -d 123.123.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.2
31.端口转换。
接上题,192.16.10.1的httpd端口为8080。
#iptables -t nat -R PREROUTING 1 -d 123.123.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.2:8080
32.接上题,在网关上使用字符串匹配,丢弃包含test字符串的数据包。
#iptables -A FORWARD -m string --algo kmp --string “test” -j DROP
33.假设192.168.10.2为内网主机,123.123.0.1为外网网关 。
使用l7扩展在8点到12点禁用qq
#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT -to-source 123.123.0.1
#iptables -A FORWARD -s 192.168.10.0/24 -m layer7 --l7proto qq -m time --timestart 08:00 --timestop 12:00 -j REJECT
本文出自 “小私的blog” 博客,请务必保留此出处http://ggvylf.blog.51cto.com/784661/1663826
标签:iptables
原文地址:http://ggvylf.blog.51cto.com/784661/1663826