语法实例练习
Iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙、NAT。咋一看iptables的配置很复杂,掌握规律后,其实用iptables完成指定任务并不难,下面我们通过具体实例配合前面学的iptables语法来学习iptables的详细用法。
查看规则
1 2 3 4 5 6 7 8 9 10 11 |
# 查看filter表的所有链规则; $ iptables -Ln # 查看filter表的所有链规则,并且显示计数器和规则序列号; $ iptables -Ln -x --line-numbers # 查看filter表中INPUT链上的规则,并且显示规则序列号; $ iptables -Ln -x INPUT --line-numbers # 查看nat表中的所有链规则,并且显示序列号; $ iptables -t nat -Ln --line-numbers |
删除规则
1 2 3 4 5 6 7 8 9 10 11 |
# 删除filter表INPUT链山的第一条规则; $ iptables -D INPUT 1 # 清空filter表所有链规则,但默认规则不会改变; $ iptables -F # 清空filter表OUTPUT链上的所有规则; $ iptables -F OUTPUT # 清空nat表所有链规则; $ iptables -t nat -F |
允许本地循环(设置filter表的INPUT链默认规则为DROP,然后实现允许本地循环,这是双向规则)
1 2 3 4 |
$ iptables -P INPUT DROP $ iptables -P OUTPUT DROP $ iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT $ iptables -A OUTPUT-s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT |
PING设置(拒绝外部主机PING本地主机,但允许本地主机PING外部主机,0是echo reply)
1 2 |
$ iptables -P INPUT DROP $ iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT |
本地仅允许22端口连接(只允许172.16.16.1连接本机22端口,这是个双向规则)
1 2 3 4 |
iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -A INPUT -s 172.16.16.1 -d 192.168.10.1 -p tcp --dport 22 -j ACCPET iptables -A OUTPUT -d 172.16.16.1 -p tcp --sport 22 -j ACCPET |
自定义链(自定义一个链,最后一条是被主链INPUT引用)
1 2 3 4 |
iptables -N CHAIN_NAME iptables -A CHAIN_NAME -s 127.0.0.1 -d 127.0.0.1 -i lo -j DROP iptabels -A CAAIN_NAME -j RETURN iptables -I INPUT -j CHAIN_NAME |
SNAT(源地址转发)
1.开启iptables路由转发功能
1 2 3 4 5 6 7 8 |
$ vim /etc/sysctl.conf Net.ipv4.ip_forward = 1 $ sysctl -p 或 $ echo 1 > /proc/sys/net/ipv4/ip_forward 或 $ sysctl -w net.ipv4.ip_forward=1 |
2.设置SNAT(固定公网IP)
1 |
$ iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 202.106.0.20 |
3.设置SNAT(动态公网IP)
1 |
$ iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o PPP0 -j MASQUERADE |
DNAT(目标地址转发)
1.开启iptables路由转发功能
1 2 3 4 5 6 7 8 |
$ vim /etc/sysctl.conf net.ipv4.ip_forward = 1 $ sysctl -p 或 $ echo 1 > /proc/sys/net/ipv4/ip_forward 或 $ sysctl -w net.ipv4.ip_forward=1 |
2.设置DNAT
1 |
$ iptables -t nat -A PREROUTING -i eth0 -d 202.102.10.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.1 |
针对FORWARD链定义规则
1 2 3 4 5 6 7 8 9 10 |
# 内网主机发起的新请求或已建立连接的数据包都允许到外网的web服务器; $ iptables -P FORWARD DROP $ iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 80 -m state --state NEW, ESTABLISHED -j ACCEPT # 内网主机发起的请求到外网的PING放行,上面已经放行ESTABLISHED这里就不需要在放行回复报文0; $ iptables -A FORWARD -s 192.168.10.0/24 -p icmp --icmp-type 8 -j ACCEPT # 允许内网访问FTP复杂协议; $ iptables -A FORWARD -m state --state RELATE,ESTABLISHED -j ACCEPT $ iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 21 -j ACCEPT |