iptables默认三张表:
•filter:防火墙,包含INPUT、OUTPUT、FORWARD
•nat:网络地转转换,包含PREROUTING、POSTROUTING、OUTPUT
•mangle:流量整形,包含所有的五条链
iptables的五条链 ->写规则的地方
•INPUT:数据包的目地的是LINUX主机本身
•OUTPUT:数据包由LINUX主机本身发送
•FORWARD:数据包从一个接口进入,另一个接口发出(如果做路由转发的话必须开启/etc/sysctl.conf 修改net.ipv4.ip_forward=1)
•PREROUTING:做路由之前
•POSTROUTING:做路由之后
命令
清空防火墙
iptables -F
把INPUT默认规则改成DROP
iptables -P INPUT DROP
添加一条规则允许SSH通过INPUT
一般插入很多人都写iptables -A (是追加规则,添加的规则在最下方,防火墙的规则是谁在最上边谁生效,所以我一般用-I,添加的规则先生效并且I能指定具体位置)
iptables -I INPUT -p tcp -s 192.168.0.0/24 --dport 22 -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT(将这条规则插入到上面第二行)
只允许允许192.168.0.0、24从eth0网卡访问本机的22端口
iptables -I INPUT -i eth0 -p tcp -s 192.168.0.0/24 --dport 22 -j ACCEPT
列出防火墙规则
iptables -L
删除INPUT里面的第二条规则(从最上面开始)
iptables -D INPUT 2
保存防火墙规则(防火墙如果没有保存,重启服务后规则失效)
service iptables save
备份防火墙规则
iptables-resotre < /etc/sysconfig/iptables.20130301
路由
阻止某个IP到达本机
iptables -I FORWARD -s 202.106.0.20 -j DROP
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SANT --to 1.1.1.1
将192.168.0.0网段的地址转换成1.1.1.1去做nat访问
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SANT --to 1.1.1.1-1.1.1.20
将192.168.0.0网段的地址转换成1.1.1.1-20网段的地址去做nat访问
iptables -t nat -I PREROUTING -i eth0 -p tcp 80 -j DNAT --to 192.168.0.1
将通过网卡eth0的访问80端口的数据包目的地址改为192.168.0.1
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
将源地址是192.168.0.0/24网段的数据包地址进行伪装
STATE
-m state --state 状态分为
NEW: 有别于tcp的syn
ESTABLISHED:连接态
RELATED:衍生态,与conntrack(连接跟踪模块)关联(FTP)
INVALID:不能识别的连接或者状态
iptables -I INPUT -m state --state RELATED,ESTABLISHED \ -就ACCEPT
允许连接出去后对方主机回应的数据包
MAC
-m mac --mac-source MAC
iptables -I FORWARD -m mac --mac0source xx:xx:xx:xx:xx:xx \ -j DROP
阻断来自某MAC地址的数据包,经过本机的路由
iptables -P FORWARD DROP
iptables -I FORWARD -s 192.168.0.2 -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
ip与mac地址绑定,只有这个ip能从本机路由
LIMIT限速
-m limit --limit
iptables -I FORWARD -d 192.168.0.2 -m limit --limit 50/s -j ACCEPT
iptables -I FORWARD -d 192.168.0.2 -j DROP
限速50/s要想实现限制上传和下载的速度,得结合TC去分网段
简单web服务器上的防火墙配置
iptables -I INPUT -i eth0(网络端口端口)-j ACCEPT
iptables -I INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
网关
实例:ADSL 拨号上网的拓扑
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -o eth0 \
-j MASQUERADE
对外服务器
服务协议(TCP/UDP)
对外服务端口
内部服务器私网 IP
内部真正服务端口
实例:
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 \
-j DNAT --to 192.168.1.1
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 \
-j DNAT --to 192.168.1.2:80