Iptables上机配置

1)查看当前配置

# iptables–L

-v:显示详细信息,包括每条规则的匹配包数量和匹配字节数会显示链中规则的包和流量计数
-x:在 v 的基础上,禁止自动单位换算(K、M)
-n:只显示 IP 地址和端口号码,不显示域名和服务名称

-t表名:查看相应表的规则


2)清除原有规则

#iptables –F 清除预设表filter中的所有规则链的规则

#iptables –X 清除预设表filter中使用者自定链中的规则

#iptables –Z 将计数器归零


3)设定预设规则

# iptables -p INPUT DROP 默认除表里有规则外,数据包进全部丢弃

# iptables -p OUTPUT ACCEPT 默认数据包出全允许

# iptables -p FORWARD DROP 默认转发全丢弃

# iptables –t nat –PPREROUTING ACCEPT

# iptables –t nat –P POSTROUTING ACCEPT

# iptables –t nat –P OUTPUT ACCEPT

即只允许出去,不允许进来,也不能允许转发


4)添加规则


INPUT链配置(即进入)


启用WEB服务器,开启80端口.

#iptables –A INPUT –p tcp --dport 80 –j ACCEPT


启用邮件服务器,开启25,110端口

#iptables –A INPUT –p tcp --dport 25 –j ACCEPT

#iptables –A INPUT –p tcp --dport 110 –j ACCEPT


启用FTP服务器,开启21端口

#iptables –A INPUT –p tcp --dport 21 –j ACCEPT

#iptables –A INPUT –p tcp --dport 20 –j ACCEPT


启用DNS服务器,开启53端口

#iptables –A INPUT –p tcp --dport 53 –j ACCEPT


启用SSH远程登陆,开启22端口

#iptables –A INPUT –p tcp --dport 22 –j ACCEPT


只允许192.168.1.100的机器进行SSH连接

# iptables -D INPUT -p tcp --dport 22 -j ACCEPT 先删除允许所有22号端口规则

#iptables –A INPUT -s 192.168.1.100 –p tcp --dport22 –j ACCEPT


打开“回环”,以免不必要的麻烦

# iptables –A INPUT -i lo -j ACCEPT

# iptables –A INPUT -i lo -j ACCEPT



OUTPUT配置(即出去)


禁止某些端口出去

#iptables –A OUTPUT –p tcp --sport 1234 –j DROP



FORWARD配置(即转发)


上面FORWARD链的默认已设规则为DROP,

开启转发功能(在做NAT时,必须做)

# iptables -A FORWARD -i eth0 -o eth1 -m state --stateRELATED,ESTABLISHED -j ACCEPT

# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT


丢弃坏的TCP包

#iptables -A FORWARD -p TCP !--syn -m state --state NEW -j DROP


禁止访问某个网站或某些IP(例www.baidu.com、192.168.1.0/24)

#iptables –AFORWARD –d www.baidu.com –j DROP

#iptables –AFORWARD –d 192.168.1.0/24 –j DROP


禁止某源ip或某类ip数据包通过(例192.168.1.100,192.168.2.0/24)

#iptables –AFORWARD –s 192.168.1.100 –j DROP

#iptables –AFORWARD -s 192.168.1.2.0/24 –j DROP


禁止192.168.1.0/24的客户机用FTP下载

#iptables –AFORWARD -s 192.168.1.0/24 –p tcp –dport 21 –j DROP


堵:

#iptables –A FORWARD –p tcp –dport xxx –j DROP

#iptables -A FORWARD -p tcp --dport yyy:zzz -j DROP


通:

#iptables -A FORWARD -p tcp --dport xxx -j ACCEPT

#iptables -A FORWARD -p tcp --dport yyy:zzz -j ACCEPT

#iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -P FORWARD DROP


Nat表配置


强制所有客户机访问某个网站(www.baidu.com)

#iptables –t nat –A FORWARD –i eth0 –ptcp –dport 80 –j DNAT –to 192.168.1.*


禁止与192.168.1.10的所有连接

# iptables -t nat -A PREROUTING -d 192.168.1.1 -jDROP


禁用FTP(21)端口

# iptables -t nat -A PREROUTING -ptcp --dport 21 -j DROP


发布内网192.168.1.100主机的Web服务,Internet用户通过访问eth1的IP地址即可访问该主机的Web服务

#iptables –t nat –A FORWARD –i eth0 –ptcp –dport 80 –j DNAT –to-destination 192.168.1.100:80


防止外网用内网IP欺骗(禁止私用ip连接)

# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP

# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP

# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP


将内网192.168.0.0/24 的原地址修改为 1.1.1.1用于 NAT

#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to1.1.1.1

#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to1.1.1.1-1.1.1.10

同上,只不过修改成一个地址池里的 IP


把从 eth0 进来的要访问端口80 的数据包目的地址改为192.168.0.1

#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -jDNAT --to 192.168.0.1

#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 81 -j DNAT --to 192.168.0.2:80

#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.1-192.168.0.10


将源地址是 192.168.0.0/24 的数据包进行地址(伪装动态源地址转换)

#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE


ADSL 拨号上网

#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE


按包状态匹配(state)-m state --state 状态

状态:NEW、RELATED、ESTABLISHED、INVALID

NEW: 发出连接请求时,数据包状态为NEW

ESTABLISHED: 连接态,连接建立后

RELATED: 衍生态,与 conntrack 关联(如FTP,21号端口建立连接后用20号或其他端口传送数据,20号端口上传送的数据状态为RELATED)

INVALID: 不能被识别属于哪个连接或没有任何状态,无效数据包


允许所有已经建立连接或与之相关的数据通过

#iptables -AINPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#iptables -A OUTPUT-m state --state RELATED,ESTABLISHED -jACCEPT


丢弃非法连接
# iptables -A INPUT -mstate --state INVALID -j DROP
# iptables -A OUTPUT -m state --state INVALID -j DROP
# iptables-A FORWARD -m state --state INVALID -j DROP


按来源 MAC 匹配(mac)-m mac --mac-source MAC

阻断来自某 MAC 地址的数据包,通过本机

#iptables -A FORWARD -m --mac-sourcexx:xx:xx:xx:xx:xx -j DROP

按包速率匹配(limit)-m limit --limit 匹配速率 [--burst 缓冲数量]

l用一定速率去匹配数据包
# iptables -A FORWARD -d 192.168.0.1 -m limit--limit 50/s -j ACCEPT


处理IP碎片数量,防止***,允许每秒100个

#iptables -A FORWARD -f -m limit --limit 100/s--limit-burst 100 -j ACCEPT

l设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.

#iptables -A FORWARD -p icmp -m limit --limit 1/s--limit-burst 10 -j ACCEPT

limit 仅仅是用一定的速率去匹配数据包,并非 “限制”


多端口匹配(multiport)

-m multiport <--sports|--dports|--ports> 端口1[,端口2,..,端口n]
一次性匹配多个端口,可以区分源端口,目的端口或不指定端口
# iptables -A INPUT -p tcp -m multiports--ports 21,22,25,80,110 -j ACCEPT

注意:必须与 -p 参数一起使用


将$IP1 通过$IP2:80 访问 $IP3:80

修改目的地址和源地址

1)修改目的地址

#iptables -tnat -A PREROUTING -d $IP2 -p tcp --dport 80 -j DNAT --to-destination $IP3

2)修改源地址

#iptables -tnat -A POSTROUTING -d $IP3 -p tcp --dport 80 -j SNAT --to-source $IP2

3)修改目的地址

#iptables -tnat -A PREROUTING -s $IP3 -p tcp --sport 80 -j DNAT --to-destination $IP1

4)修改源地址

#iptables -tnat -A POSTROUTING -s $IP3 -p tcp --sport 80 -j SNAT --to-source $IP2


保存规则

#iptables save

一些命令

查看链路查看目前的conntrack

#cat/proc/net/ip_conntrack


重启iptables服务

#service iptables restart


启用SYN缓冲

#echo “1” > /proc/sys/net/ipv4/tcp_syncookies


开启ip转发功能(iptable作nat路由器时必须开启)

#echo “1”> /proc/sys/net/ipv4/ip_forward