linux 防火墙 iptables

iptables 只是个客户端命令,内部调用的其实是 linux netfilter 子系统,在 centos7 上有个firewalld服务,也是基于此,不过 iptables 用的更舒服。

-t filter/nat/mangle/raw
-A		--append
-D		--delete
-I		--insert
-P		--policy
-N		--new-chain
-X		--delete-chain
-L		--list
-F		--flush
-Z		--zero
-E		--rename-chain
-R		--replace
--line-numbers

-p		--protocol				all,tcp,udp,icmp
-s		--src/--source
-d		--dst/--destination
-i		--in-interface							#进入接口
-o		--out-interface							#出接口
-f		--fragment

#tcp/udp
--sport		--source-port
--dport		--destination-port

--tcp-flags  SYN, !ACK, FIN, RST, URG, PSH, ALL, NONE

-j DNAT			--to/--to-destination
-j SNAT			--to/--to-source

下面是一些例子

#配置默认策略
iptables -P INPUT DROP/ACCEPT

iptables -t nat -F POSTROUTING				#清空nat下的POSTROUTING链下规则
iptables -t nat -F							#清空nat下的所有规则

iptables -t nat -Z							#nat下包数,字节数归零

iptables -t nat -N new-chain					#nat下新增new-chain链
iptables -t nat -X new-chain					#nat下删除new-chain链(new-chain链必须为空)
iptables -t nat -E new-chain new-chain-1	#nat下重命名链

[-j DROP,REJECT,ACCEPT]
iptables -t filter -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
#替换1号规则
iptables -t filter -R INPUT 1 -s 192.168.1.0/24 -p udp --dport 22 -j ACCEPT

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j DROP


#允许自己ping别人,不允许别人ping自己
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT	

#-m state RELATED,ESTABLISHED,INVALID,NEW
iptables -A INPUT -m state --state ESTABLISHED, NEW --dport 22 -j ACCEPT

#本地端口转发
[-j REDIRECT]
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080-8090

#自定义链返回
[-j RETURN]
iptables -t nat -A new-chain -s 192.168.1.0/24 -j RETURN

#路由转发
[-j SNAT]
#出包的时候把发送原地址改成192.168.1.242
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 192.168.1.242
#把tcp包的源地址随机改成194.236.50.155-194.236.50.160一个,端口取1024-32000一个
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000

#用来补充SNAT当服务器地址是动态,它会自动SNAT当前服务器地址,--to-ports指定出包时候开的端口范围(范围一定要够大,要不然会很慢)
[-j MASQUERADE]
iptables -t nat -A POSTROUTING  -s 192.168.1.0/24 -j MASQUERADE --to-ports 1024-31000

[-j DNAT]
#把去向15.45.23.67:80的包改成去向192.168.1.1-192.168.1.10中的随机一个
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10
#例子
iptables -t nat -A PREROUTING -p tcp --dport 80  -j DNAT --to-destination 192.168.1.245
iptables -t nat -A POSTROUTING -d 192.168.1.245 -j SNAT --to 192.168.1.242


[-j LOG]
#日志记录到/var/log/message以--log-prefix开头
#很多tcp连接很慢有可能是dns返回的包被阻止了
iptables -I INPUT -s 192.168.1.0/24 -j LOG --log-prefix "ddddddd-"

#如果本地INPUT默认为DROP一定要加
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

下图为内部路由图



上一篇: linux 网络命令 ss
下一篇: linux 网络网卡记录 ip
作者邮箱: 203328517@qq.com