Iptables基础整理

Iptables基础框架

Iptables基于内核netfilter安全框架运行,主要有过滤数据包和NAT地址转换功能。

Iptables基本表链结构

filter
INPUT
FORWARD
OUTPUT
 
 
nat
 
 
OUTPUT
PREROUTING
POSTROUTING
mangle
INPUT
FORWARD
OUTPUT
PREROUTING
POSTROUTING
raw
 
 
OUTPUT
PREROUTING
 

Iptables主要通过规则链的方式进行数据包的过滤和转发以及NAT功能,表是具有相同功能的规则链的集合,方便我们进行管理。

Iptables常用条件类型

条件
参数
范例
源IP地址
-s
-s 172.16.1.1,172.16.1.2    -s 172.16.1.0/24   ! -s 172.16.1.0/24
目的IP地址
-d   
-d 172.16.1.1,172.16.1.2    -d 172.16.1.0/24   ! -d 172.16.1.0/24
源端口
-p tcp -m tcp --sport
-p tcp -m multiport --sports
-p tcp -m tcp --sport 22     -p tcp -m tcp --sport 22:25
-p tcp -m tcp --sport :22    -p tcp -m tcp --sport 80:
-p tcp -m tcp ! --sport 22   -p tcp -m multiport --sports 22,25
目的端口
-p tcp -m tcp --dport
-p tcp -m multiport --dports
-p tcp -m tcp --dport 22     -p tcp -m tcp --dport 22:25
-p tcp -m tcp --dport :22    -p tcp -m tcp --dport 80:
-p tcp -m tcp ! --dport 22   -p tcp -m multiport --dports 22,25
协议
-p
-p tcp   ! -p tcp   (tcp udp icmp)
网卡
-i 流入网卡  / -o流出网卡
-i eth0  ! -i eth0       /    -o eth0   ! -o eth0

Iptables常用扩展模块

扩展模块
参数
范例
tcp
-p tcp -m tcp --dport
-p tcp -m tcp --sport
-p tcp -m tcp --dport --tcp-flags 
-p tcp -m tcp --dport --syn
-p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
-p tcp -m tcp --dport 22 --syn -j REJECT
udp
-p udp -m udp --dport
-p udp -m udp --sport
multiport
-p tcp -m multiport --dports
-p tcp -m multiport --sports
icmp
-p icmp -m icmp --icmp-type 8/0
-p icmp -m icmp --icmp-type 8
-p icmp -m icmp --icmp-type "echo-request"
-p icmp -m icmp --icmp-type 8/0 -j REJECT 禁止别人ping自己
-p icmp -m icmp --icmp-type 8 -j REJECT
-p icmp -m icmp --icmp-type "echo-request" -j REJECT
state
-m state --state 
-m state --state RELATED,ESTABLISHED -j ACCEPT

Iptables常用动作

动作
参数
范例
ACCEPT
-j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
DROP 
-j DROP
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP
REJECT
-j REJECT <--reject-with>
iptables -t filter -I INPUT -p tcp --dport 22 -j REJECT --reject-with icmp-host-unreachable (提示为什么被拒绝)
LOG
-j LOG <--log-level> <--log-prefix>
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG --log-prefix "want-in-from-port-22"
SNAT
-j SNAT --to-source 
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 192.168.1.146
DNAT
-j DNAT --to-destination
iptables -t nat -I PREROUTING -d 192.168.1.146 -p tcp --dport 3389 -j DNAT --to-destination 10.0.0.6:3389
MASQUERADE
-o eth0 -j MASQUERADE
iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE (动态SNAT)
REDIRECT
-j REDIRECT --to-ports 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

开启内核转发功能

在配置NAT网关、路由器或网络防火墙的时候,需要开启内核转发功能。

#使用如下两种方法均可临时开启核心转发,立即生效,但是重启网络配置后会失效。
方法一:echo 1 > /proc/sys/net/ipv4/ip_forward
方法二:sysctl -w net.ipv4.ip_forward=1
#使用如下方法开启核心转发功能,重启网络服务后永久生效。
配置/etc/sysctl.conf文件(centos7中配置/usr/lib/sysctl.d/00-system.conf文件),在配置文件中将 net.ipv4.ip_forward设置为1

 Iptables常用操作

查看规则
iptables -nvL
iptables -t filter -nvL
iptables -t filter -nvL INPUT
iptables --line-number -nvL INPUT
清空规则
iptables -F      清空filter表的规则
iptables -F INPUT
增加规则
iptables -t filter -I INPUT -s 192.168.1.1 -j DROP   // DROP表丢弃不响应   REJECT表拒绝并响应
iptables -t filter -I INPUT 2 -s 192.168.1.1 -j DROP
iptables -t filter -A INPUT -s 192.168.1.1 -j DROP
删除规则
iptables -t filter -D INPUT 3   删除INPUT链中第3条规则
iptables -t filter -D INPUT -s 192.168.1.1 -j ACCEPT
 
修改规则
iptables -t filter -R INPUT 1 -s 192.168.1.1 -j REJECT 
只能改动作,参数条件一个不能少,推荐先删除后添加的方式
修改默认规则
iptables -t filter -P FORWARD DROP
保存规则
service iptables save 
/etc/init.d/iptables save
cat /etc/sysconfig/iptables
白名单机制
iptables -P INPUT ACCEPT   默认设为ACCEPT防止清空后管理员无法登录
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j REJECT   在规则链最后加上拒绝,实现白名单机制
创建自定义链
iptables -t filter -N IN_WEB
引用自定义链
iptables -t filter -I INPUT -p tcp --dport 80 -j IN_WEB
重命名自定义链
iptables -E IN_WEB WEB
删除自定义链
iptables -X WEB   满足两个条件:自定义链没有被引用  自定义链中没有任何规则
计数器清零
iptables -Z 

网络防火墙配置

网络防火墙=网关+Iptables过滤

#1.开启防火墙转发功能,实现网关
[root@B ~]# vim /etc/sysctl.conf

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

[root@B ~]# sysctl -p   // 应用参数

#2.分别添加路由记录,设置网关
[root@A ~]# route add -net 172.16.1.0/24 gw 10.0.0.88

[root@C ~]# route add -net 10.0.0.0/24 gw 172.16.1.88

#3.配置防火墙Iptables过滤规则
[root@B ~]# iptables -nvL FORWARD
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination     

[root@B ~]# iptables -A FORWARD -d 172.16.1.13 -j ACCEPT
[root@B ~]# iptables -A FORWARD -s 172.16.1.13 -j ACCEPT

#4.进行测试
[root@A ~]# ping 172.16.1.13
PING 172.16.1.13 (172.16.1.13) 56(84) bytes of data.
64 bytes from 172.16.1.13: icmp_seq=1 ttl=63 time=12.5 ms
64 bytes from 172.16.1.13: icmp_seq=2 ttl=63 time=1.03 ms

[root@C ~]# ping 10.0.0.100
PING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
64 bytes from 10.0.0.100: icmp_seq=1 ttl=63 time=0.391 ms
64 bytes from 10.0.0.100: icmp_seq=2 ttl=63 time=1.03 ms

 SNAT网关配置

#严格上,配置网关=开启内核转发功能,配置方法同上
#添加SNAT功能
[root@B ~]# iptables -t nat -I POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 172.16.1.88
#测试
[root@A ~]# ping 172.16.1.13
PING 172.16.1.13 (172.16.1.13) 56(84) bytes of data.
64 bytes from 172.16.1.13: icmp_seq=1 ttl=63 time=0.796 ms
64 bytes from 172.16.1.13: icmp_seq=2 ttl=63 time=3.38 ms
64 bytes from 172.16.1.13: icmp_seq=3 ttl=63 time=1.34 ms

[root@C ~]# tcpdump -i eth1 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
23:12:29.983216 IP 172.16.1.88 > 172.16.1.13: ICMP echo request, id 14715, seq 1, length 64
23:12:29.983239 IP 172.16.1.13 > 172.16.1.88: ICMP echo reply, id 14715, seq 1, length 64
23:12:30.998859 IP 172.16.1.88 > 172.16.1.13: ICMP echo request, id 14715, seq 2, length 64

 DNAT网关配置

#网关配置同网络防火墙
#开启DNAT功能
[root@B ~]# iptables -t nat -I PREROUTING -d 10.0.0.88 -j DNAT --to-destination 172.16.1.13
#测试
[root@A ~]# ping 10.0.0.88
PING 10.0.0.88 (10.0.0.88) 56(84) bytes of data.
64 bytes from 10.0.0.88: icmp_seq=1 ttl=63 time=21.8 ms
64 bytes from 10.0.0.88: icmp_seq=2 ttl=63 time=2.03 ms
64 bytes from 10.0.0.88: icmp_seq=3 ttl=63 time=1.53 ms

[root@C ~]# tcpdump -i eth1 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
23:31:30.079065 IP 10.0.0.100 > 172.16.1.13: ICMP echo request, id 20091, seq 1, length 64
23:31:30.079104 IP 172.16.1.13 > 10.0.0.100: ICMP echo reply, id 20091, seq 1, length 64
23:31:31.083794 IP 10.0.0.100 > 172.16.1.13: ICMP echo request, id 20091, seq 2, length 64
23:31:31.083853 IP 172.16.1.13 > 10.0.0.100: ICMP echo reply, id 20091, seq 2, lengt

 

posted @ 2017-09-23 23:43  Peterer~王勇  阅读(268)  评论(0编辑  收藏  举报