centos7【防火牆】常用規則-docker服務防火牆規則


1.防火牆常用規則

systemctl start iptables
systemctl stop iptables
systemctl restart iptables
iptables -nvL


1.屏蔽ip地址和解封ip地址

iptables -A INPUT -s 22.22.22.22 -j DROP

iptables -D INPUT -s 22.22.22.22 -j DROP

iptables -I INPUT -s 117.81.61.88 -j ACCEPT
iptables -I INPUT -s 222.93.243.191 -j ACCEPT

2.阻止端口和同意端口

阻止特定的傳出連接:

 iptables -A OUTPUT -p tcp --dport 80 -j DROP

同意特定的傳入連接:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

使用 multiport 我們可以一次性在單條規則中寫入多個端口,例如:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT

iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

IPtables IP 地址范圍是可以直接使用 CIDR 進行表示的,例如:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

3.端口轉發

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 20022 -j DNAT --to-destination 192.168.1.150:22

端口轉出參考:http://www.cnblogs.com/kevingrace/p/5865792.html

4.屏蔽HTTP服務Flood攻擊

命令會將連接限制到每分鍾 100 個,上限設定為 200

 

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

5.禁止ping

iptables -A INPUT -p icmp -i eth0 -j DROP

6.允許訪問回環網卡

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

12、屏蔽指定MAC地址

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

13、限制並發連接數

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

以上規則限制每客戶端不超過 3 個連接

14、清空IPtables規則

iptables -F

要清空特定的表可以使用 -t 參數進行指定,例如:

iptables -t nat –F

15.保存規則

iptables-save > ~/iptables.rules

iptables-restore < ~/iptables.rules

service iptables save

17、允許建立相關連接

隨着網絡流量的進出分離,要允許建立傳入相關連接,可以使用如下規則:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

允許建立傳出相關連接的規則:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

18、丟棄無效數據包

很多網絡攻擊都會嘗試用黑客自定義的非法數據包進行嘗試,我們可以使用如下命令來丟棄無效數據包:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

19、IPtables屏蔽郵件發送規則

如果你的系統不會用於郵件發送,我們可以在規則中屏蔽 SMTP 傳出端口:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

20、阻止連接到某塊網卡

如果你的系統有多塊網卡,我們可以限制 IP 范圍訪問某塊網卡:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

21、設置默認規則 

iptables -P INPUT DROP  # 設置 filter 表 INPUT 鏈的默認規則是 DROP,如果前面沒有添加允許的規則,會把自己的xshell連接DROP掉

 22、按行號刪除防火牆規則

iptables -nL --line-number
iptables -D INPUT 10
iptables -D INPUT 11

iptables-save > ~/iptables.rules

 

 

 

failwall 常用規則

http://bjyun.fujieace.com/help/9.html 

防火牆安裝

先禁用舊防火牆管理模式

systemctl stop firewalld && systemctl disable firewalld

安裝 iptables

yum -y install iptables-services

systemctl start iptables.service && systemctl enable iptables.service

iptables -F

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp -m multiport --dport 80,22,25,10051,10050,3306 -j ACCEPT

iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

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

iptables -t filter -A INPUT -m state --state INVALID -j DROP

iptables -P INPUT DROP

service iptables save

 中新金盾防火牆簡單了解

http://blog.sina.com.cn/s/blog_a90c9f9b0102y815.html

防火牆規則參考鏈接

https://www.cnblogs.com/blogforly/p/5997287.html

 

iptables共享上網限速參考

1

eth0: a.b.c.d(外網的上網地址)
eth1: 172.16.44.1(做為內網的網關)

 


2.
配置iptables nat

#開啟ip_forward
echo "1">/proc/sys/net/ipv4/ip_forward #永久生效需要配置/etc/sysctl文件中修改
#清除原來的防火牆規則
iptables -F
iptables -t nat -F
iptables -t mangle -F
#添加nat轉發
iptables -t nat -A POSTROUTING -s 172.16.44.0/24 -o eth0 -j MASQUERADE

 

 

通過執行上面的代碼后,局域網內的電腦就可以上網了。
3.
由於我的內網還掛了網站,所以要開啟80端口的轉發。

iptables -t nat -I PREROUTING -p tcp -d a.b.c.d --dport 80 -j DNAT --to 172.16.44.210:80
iptables -t nat -I POSTROUTING -p tcp -d 172.16.44.210 --dport 80 -j SNAT --to 172.16.44.1


4.下載限速

#刪除原來的tc規則隊列
tc qdisc del dev eth1 root
#添加tc規則隊列
tc qdisc add dev eth1 root handle 10: htb default 256
#生成根類
tc class add dev eth1 parent 10: classid 10:1 htb rate 100mbit ceil 100mbit
#支類列表用於限制速度
#這里的rate指的是保證帶寬,ceil是最大帶寬。
tc class add dev eth1 parent 10:1 classid 10:10 htb rate 400kbps ceil 400kbps prio 1

#添加支類規則隊列
#采用sfq偽隨機隊列,並且10秒重置一次散列函數。
tc qdisc add dev eth1 parent 10:10 handle 101: sfq perturb 10

#建立網絡包過濾器,設置fw。
tc filter add dev eth1 parent 10: protocol ip prio 10 handle 1 fw classid 10:10
#在iptables里面設定mark值,與上面的handle值對應。
iptables -t mangle -A POSTROUTING -d 172.16.44.130 -j MARK --set-mark 1

通過上面的代碼就可以限制172.16.44.130這台機子的下載速度到400kbps。

Tip
經過實際測試這里的kbps實際上就是KB/S每秒千字節。另一個單位是kbit,這個才是每秒千比特。這里的172.16.44.130也可以寫成一個網段,比如:172.16.44.0/24
5.

上傳限速的原理其實跟下載的差不多,只不過限制的網卡不同,要在eth0上過濾來源地址去限制。

#刪除原來的tc規則隊列
tc qdisc del dev eth0 root

#添加tc規則隊列
tc qdisc add dev eth0 root handle 20: htb default 256

#生成根類
tc class add dev eth0 parent 20: classid 20:1 htb rate 100mbit ceil 100mbit

#支類列表用於限制速度
tc class add dev eth0 parent 20:1 classid 20:10 htb rate 40kbps ceil 40kbps prio 1

#添加支類規則隊列
tc qdisc add dev eth0 parent 20:10 handle 201: sfq perturb 10

#建立網絡包過濾器
tc filter add dev eth0 parent 20: protocol ip prio 100 handle 2 fw classid 20:10
iptables -t mangle -A PREROUTING -s 172.16.44.130 -j MARK --set-mark 2

Tip

跟下載不同的是POSTROUTING要改成PREROUTING,-d改成-s。

觀察連接數
通過iptables的nat連接可以通過下面的代碼查看。至於統計連接數可以寫代碼實現,也可以利用awk,grep等工具。反正里面的內容就是文本,處理起來也比較簡單。

cat /proc/net/ip_conntrack

參考於

http://outofmemory.cn/code-snippet/90/linux-usage-iptables-tc-limited-liuliang

iptables -A OUTPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s xx.163.94.194 -j ACCEPT
iptables -I INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -D INPUT -s xx.163.94.194 -j DROP
注意mac過濾
報文經過路由后,數據包中原有的 mac 信息會被替換,所以在路由后的 iptables 中使用 mac 模塊是沒有意義的

 如果防火牆默認是禁止可以寫計划任務來防止自己被牆

sh iptables.sh

#!/bin/sh
status=$(iptables -nvL | grep 192.168.100.118 | wc -l)
if [ $status -eq 0 ];
then
iptables -I INPUT -s 192.168.100.118 -j ACCEPT
echo "防火牆設置完成"
else
echo "防火牆已經設置過了"
exit 0;
fi

 vi iptables.sh #通過調用函數的方式設置防火牆

#!/bin/sh
function admin() {
status=$(iptables -nvL | grep 192.168.100.118 | wc -l)
if [ $status -eq 0 ];
then
iptables -I INPUT -s 192.168.100.118 -j ACCEPT
echo "防火牆設置完成"
else
echo "防火牆已經設置過了"
exit 0;
fi
}

function admin2() {
status=$(iptables -nvL | grep 192.168.100.119 | wc -l)
if [ $status -eq 0 ];
then
iptables -I INPUT -s 192.168.100.119 -j ACCEPT
echo "防火牆設置完成"
else
echo "防火牆已經設置過了"
exit 0;
fi
}
echo "設置防火牆通過100.119"
admin2
echo "設置防火牆通過100.118"
admin

 

docker服務通過防火牆控制訪問權限

iptables -I DOCKER-USER -s xx.163.94.194 -j DROP
iptables -L DOCKER-USER -n --line-number
iptables -D DOCKER-USER 1
如果不生效可以重啟一下docker服務
systemctl restart docker
iptables -I DOCKER-USER -s xx.163.94.194 -j ACCEPT
iptables -I DOCKER-USER -s 192.168.1.0/24 -j DROP


iptables -A DOCKER-USER -i eth0 -s xx.163.94.194 -p tcp -m conntrack --ctorigdstport 8082 -j ACCEPT
iptables -A DOCKER-USER -i eth0 -s 192.168.1.0/24 -p tcp -m conntrack --ctorigdstport 8082 -j ACCEPT
iptables -A DOCKER-USER -i eth0 -p tcp -m conntrack --ctorigdstport 8082 -j DROP #默認禁用防火牆規則 從上到下生效

199K  257M RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0 #return需要刪除下面的規則才能生效

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -c 0 0 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate INVALID -c 0 0 -j DROP

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM