赞
踩
入门参考:http://www.zsythink.net/archives/1199/
raw
:PREROUTING, OUTPUTmangle
: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTINGnat
: PREROUTING, OUTPUT, POSTROUTING( centos7中还有|NPUT, centos6中没有filter
: INPUT, FORWARD, OUTPUT (默认表)REROUTING
:raw表, mangle表,nat表,用于目标地址转换(DNAT)进站进行的过滤INPUT
: mangle表, filter表,( centos7中还有nat表, centos6中没有),处理输入数据包,入站数据包处理FORWARD
: mangle表, filter表,处理转发数据包OUTPUT
:raw表 mangle表,nat表, filter表,处理输出数据包,出站数据包处理POSTROUTING
: mangle表,nat表,用于源地址转换(SNAT)出站进行的过滤。modprobe nf_conntrack_ftp ports=21,2125,2135
nf_conntrack_sip
nf_conntrack_tftp
库支持:libiptc
与 libiptext
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
ACCEPPT
:接受数据包。
REJECT
:拒绝
DROP
:直接丢弃数据包。不给任何回应信息,这时候客户端会感觉自己的请求沉入大海,等过了超时时间才会有反应。
REDIRECT
:重定向、映射、透明代理。
SNAT
:源地址转换。
DNAT
:目标地址转换。
MASQUERADE
:IP伪装(NAT),用于ADSL。是SNAT的一种特殊形式,适用于动态的,临时会变的IP上(内网访问外网,如:LAN->WAN,则wan采用动态伪装)
LOG
:日志记录,除了记录对数据包不做任何动作。
NEW
:主机连接目标主机,在目标主机上看到的第一个想要连接的包
ESTABLISHED
:主机已与目标主机进行通信,判断标准只要目标主机回应了第一个包,就进入该状态。
RELATED
:主机已与目标主机进行通信,目标主机发起新的链接方式,例如ftp
INVALID
:无效的封包,例如数据破损的封包状态
https://linux.die.net/man/8/iptables
-N 自定义链 #iptables -t filter -N use_reject #iptables -E use_reject WEB #iptables -X WEB -i 指定进入的网卡(PREROUTING,INPUT,FORWARD) #iptables -t filter -I INPUT -i eth2 -p icmp -j DROP -o 指定出去的网卡(FORWARD,OUTPUT,POSTROUTING) [!] -d 目标地址 #iptables -I INPUT ! -d 192.168.0.230 -p tcp --dport 80 -m connlimit --connlimit-above 2 -j DROP [!] -s 源地址 -p #协议 tcp --dport 目标端口 --sport 源端口 --tcp-flags 匹配报文的tcp头的标志位 {SYN,ACK,FIN,RST,URG,PSH} {..} --syn 匹配tcp新建连接的请求报文,相当于使用"--tcp-flags SYN,RST,ACK,FIN SYN" #iptables -t nat -I PREROUTING -d 192.168.0.172 -p tcp --dport 553 -m comment --comment "!mapping:rtsp" -j DNAT --to-destination 192.168.100.172:554 udp --dpor --sport icmp --icmp-type echo-request 或数字8 echo-reply (响应的数据包)一般用0来表示 其他参考icmp协议 -m #模块 tcp #tcp模块 --source-port [!] port[:port] --destination-port [!] port[:port] --tcp-flags [!] mask comp 第一个参数是我们应该检查的标志,写为逗号分隔列表, 第二个参数是逗号分隔的标志列表,必须设置。 标志是:SYN ACK FIN RST URG PSH ALL NONE。 multiport #指定多端口号 --sport 匹配报文的源端口 --dport 匹配报文的目标端口 --ports 匹配源与目标端口 #iptables -t filter -I -s 192.168.0.12 -p tcp -m multiport --sport 11 -j REJECT iprange 匹配指定范围内的地址 [!] --src-range from[-to]:指明连续的源IP地址范围; [!] --dst-range from[-to]:指明连续的目标IP地址范围; #iptables -I INPUT -d 192.168.184.142 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 192.168.184.1-192.168.184.150 -j ACCEPT state 状态检查 --state {NEW,ESTATBLISHED,INVALID,RELATED} 指定检测那种状态 string 字符串匹配,能够检测报文应用层中的字符串 --algo bm|kmp 指定算法bm或kmp [!] --string pattern 指明字符串是什么 #防止电子邮件欺骗 #iptables -I INPUT -p tcp --dport 25 -m string --string "Subject" --algo bm -j DROP connlimit 连接数限制 --comlimit-above #限定大连接个数 #允许8080端口最大连接数为 30 #iptables -I INPUT -p tcp --dport 8080 -m connlimit --connlimit-above 30 -j REJECT conntrack --ctstate limit 限定匹配数据包的个数 --limit 25/sec --limit-burst 50 #响应请求的速率 # iptables -A INPUT -d 192.168.184.142 -p icmp --icmp-type 0 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT recent 限制一段时间内的连接数 time 时间 --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --timestart hh:mm[:ss] --timestop hh:mm[:ss] [!] --monthdays day[,day...] [!] --weekdays day[,day...] #iptables -I INPUT -d 192.168.184.142 -p tcp --dport 80 -m time --timestart 00:00 --timestop 23:59 -j REJECT comment #注释(最多256个字符) --comment "" #-m comment --comment "allow SSH to this host from anywhere" mac # --mac-source [!] address 匹配的源MAC地址。它的形式必须是XX的:XX:XX:XX:XX:XX。需要注意的是,这恰恰使从以太网设备来并进入PREROUTING,FORWARD和INPUT链的包感。 # iptables -A INPUT -s 192.168.100.172 -m mac --mac-source e0:50:8b:05:b9:6b -j DROP # iptables -A input_rule -s 192.168.100.172 -m mac ! --mac-source e0:50:8b:05:b9:6b -j DROP iprange --src-range #iptables -I INPUT -m iprange --src-range 192.168.1.23-192.168.1.63 -j ACCE -j LOG --log-level 日志级别(0-7 man syslog) --log-prefix "" 日志记录 -n --line-numbers
# 统计输出源端口5902的tcp流量
iptables -A OUTPUT -p tcp --sport 5902
# 统计输出到目标地址192.168.0.55的tcp流量
iptables -A OUTPUT -p tcp -d 192.168.0.55
# 做网关使用将172.16.3.0网段的数据转发到enp1s0源地址修改为192.168.0.251(源地址转换)
iptables -t nat -A POSTROUTING -s 172.16.3.0/24 -o enp1s0 -j SNAT --to-source 192.168.0.251
# centos上的防火墙实现: 转发nat表输出到网卡enp1s0源地址为192.168.3.0网段,进行MASQUERED动态伪装(自动选择IP,可解决IP地址变化问题)
sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE -s 192.168.3.0/24
# 查看当前
iptables -nvL
# 查看表
iptables -t raw -nvL
iptables -t nat -nvL
iptables -t mangle -nvL
iptables -t filter -nvL
# vim /etc/sysctl.conf
#使能IPv4转发
net.ipv4.ip_forward=1 # 1表示开启 0表示关闭
sysctl -w net.ipv4.ip_forward=1
cat /proc/net/ip_tables_names
cat /proc/net/ip6_tables_names
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。