os之iptables

 

 

修改默认策略为堵,堵之前先放行ssh,一进一出,避免将自己挡在门外,无法操作

iptables -t filter -A INPUT -s 192.168.43.0/24 -d 192.168.43.56 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 192.168.43.56 -d 192.168.43.0/24 -p tcp --sport 22 -j ACCEPT

iptables -t filter -A INPUT -s 172.20.0.0/16 -d 172.20.10.8 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.20.10.8 -d 172.20.0.0/16 -p tcp --sport 22 -j ACCEPT

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

  

放行80

iptables -t filter -I INPUT -d 192.168.43.56 -p tcp --dport 80 -j ACCEPT
iptables -t filter -I OUTPUT -s 192.168.43.56 -p tcp --sport 80 -j ACCEPT

  

ping 127.0.0.1
解决ping: sendmsg: Operation not permitted,

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 192.168.43.192

iptables -A OUTPUT -s 192.168.43.56 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 192.168.43.56 -p icmp --icmp-type 0 -j ACCEPT

  

#####ip_conntrack

放行yum

iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT

iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT

# iptables -A INPUT -i lo -j ACCEPT

# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# iptables -A OUTPUT -p tcp -m tcp -m state --state NEW --dport 80 -j ACCEPT

# iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT

# iptables -A OUTPUT -o lo -j ACCEPT

# iptables -A OUTPUT -p tcp --sport 10000:65535 -j ACCEPT

# service iptables save

# iptables-save > /PATH/TO/SOMEFILE

ip addr flush dev ens33

  

#####关于nf_conntrack追踪功能

当前连接,centos7已经为nf_conntrack
cat /proc/net/nf_conntrack


cat /proc/sys/net/netfilter/nf_conntrack_max
65536
cat /proc/sys/net/nf_conntrack_max
65536

iptables -t nat -L	#会自动激活nf_conntrack

  

iptstate

显式扩展: 使用额外的匹配机制
	-m EXTESTION --spe-opt

	state: 状态扩展
		结合ip_conntrack追踪会话的状态
			NEW: 新连接请求
			ESTABLISHED:已建立的连接
			INVALID:非法连接
			RELATED:相关联的
		-m state --state NEW,ESTABLISHED -j ACCEPT

		首先要装载ip_conntrack_ftp和ip_nat_ftp模块

		iptables -A INPUT -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

	multiport: 离散的多端口匹配扩展
		--source-ports
		--destination-ports
		--ports

	-m multiport --destination-ports 21,22,80 -j ACCEPT

  

条件取反:!,-s ! 172.16.100.6

保存规则:

iptables-save >/etc/sysconfig/iptables
iptables-restore </etc/sysconfig/iptables

  

严密放行ssh,http

iptables -A INPUT -d 192.168.43.56 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -s 192.168.43.56 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -d 192.168.43.56 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -s 192.168.43.56 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

iptables -P INPUT DROP

iptables -P OUTPUT DROP

  

sysctl -w net.nf_conntrack_max=65536


cat /proc/sys/net/nf_conntrack_max
65536

#调整tcp的established的timeout
ls /proc/sys/net/ipv4/netfileter/

  

#放行被ping

iptables -A INPUT -d 192.168.43.56 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -s 192.168.43.56 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT

#整合下规则,只要是本机出去的都放行,放到第一条,-I插入

iptables -I OUTPUT -s 192.168.43.56 -m state --state ESTABLISHED -j ACCEPT

iptables -L -n --line-numbers

#放行ftp
iptables -A INPUT -d 192.168.43.56 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

#放行本地到本地
iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT


#放行ftp相关的数据端口,使用related

iptables -A INPUT -d 192.168.43.56 -p tcp -m state --state RELATED -j ACCEPT

iptables -R OUTPUT 1 -s 192.168.43.56 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -R INPUT 6 -d 192.168.43.56 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

#然而在ftp中使用数据链路还是不可以,需要装载模块ip_conntrack_ftp和ip_nat_ftp

#可以在iptables配置文件/etc/sysconfig/iptables-config中写入,IPTABLES_MODULES='ip_conntrack_ftp ip_nat_ftp'

  

#####multiport:离散的多端口匹配扩展

	--source-ports
	--destination-ports
	--ports
example:

iptables -I INPUT 2 -d 192.168.43.56 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT

  

-m iprange
	--src-range
	--dst-range

	-s, -d
	-s IP, NET
		172.16.0.0/16, 172.16.100.3-172.16.100.100

	iptables -A INPUT -p tcp -m iprange --src-range 172.16.100.3-172.16.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

-m connlimit: 连接数限制
	! --connlimit-above n

		iptables -A INPUT -d 172.16.100.7 -p tcp --dport 80 -m connlimit --connlimit-above 2 -j ACCEPT

-m limit
	--limit RATE	#速率
	--limit-burst 	#爆发

iptables -I INPUT -d 192.168.43.56 -p icmp --icmp-type 8 -m limit --limit 5/minute --limit-burst 6  -j ACCEPT


-m string
	--algo {bm|kmp}
	--string "STRING"


iptables -N clean_in

iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP

iptables -A clean_in -d 192.168.43.255 -p icmp -j DROP

iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP

iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP

iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP

iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP


#clean_in链的最后一条要返回主链
iptables -A clean_in -d 192.168.43.56 -j RETURN	

#进入input链的先转到clean_in链
iptables -I INPUT -j clean_in

iptables -L -n -v

看到Chain clean_in (1 references),证明有一个引用,input chain那有相关target来引用

  

利用iptables的recent模块来抵御DOS攻击


ssh: 远程连接,

iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP


1.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值;

2.利用recent和state模块限制单IP在300s内只能与本机建立3个新连接。被限制五分钟后即可恢复访问。

下面对最后两句做一个说明:

1.第二句是记录访问tcp 22端口的新连接,记录名称为SSH
--set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目

2.第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。
--update 是指每次建立连接都更新列表;
--seconds必须与--rcheck或者--update同时使用
--hitcount必须与--rcheck或者--update同时使用

3.iptables的记录:/proc/net/ipt_recent/SSH


也可以使用下面的这句记录日志:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"

  

#####NAT

待续。。。

 

posted @ 2019-05-27 17:02  larlly  阅读(11)  评论(0编辑  收藏  举报