【1】簡單實例
【1.1】查看修改目前防火牆狀態
service iptables status
修改防火牆規則
下面的配置是讓端口為80 和8080 的設備放行,不用過防火牆
輸入 vim /etc/sysconfig/iptables
【2】實例分析
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
【2.1】基本釋義
參數 | 釋義 |
-A | 追加,在當前鏈的最后新增一個規則 |
input | input =>filter #目的ip是本機的數據包 |
-p | 使用某種協議,比如:-p icmp --icmp-type #協議類型 |
--dport | 指定目標端口,不能指定多個非連續端口,只能指定單個端口,比如: --dport 21 或者 --dport 21-23 (此時表示21,22,23) |
--sport | 指定源端口,同上 |
--tcp-fiags | TCP的標志位(SYN,ACK,FIN,PSH,RST,URG),一般跟2個參數(1.檢查的標志位 2.必須為1的標志位) 比如:--tcpflags syn,ack,fin,rst syn = --syn 表示檢查這4個位,這4個位中syn必須為1,其他的必須為0。 所以這個意思就是用於檢測三次握手的第一次包的。對於這種專門匹配第一包的SYN為1的包,還有一種簡寫方式,叫做--syn |
-m | 表示啟用多端口擴展,之后我們就可以啟用比如 --dports 21,23,80 |
--state | 指定要匹配數據包的狀態,一共有4種狀態可以使用:INVALID、ESTABLISHED、NEW和RELATED。這個匹配操作必須由-m state明確指定才能使用 |
ACCEPT | REJECT | 允許符合條件的數據包通過 | 拒絕復合條件的數據包通過 |
-s | 來源地址,比如:-s 192.168.1.0/24 |
-d | 目標地址,比如:-d 127.0.0.1/24 |
-j | 選項指定規則的目標, 目標可以是用戶自定義鏈;內建目標;或擴展 |
【2.2】最佳實踐案例
功能實現 | 代碼 |
# 允許包從22端口進入 | iptables -A INPUT -p tcp --dport 22 -j ACCEPT |
# 允許從22端口進入的包返回 | iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT |
# 允許包用udp協議從53端口返回 | iptables -A OUTPUT -p udp --dport 53 -j ACCEPT |
# 允許包用udp協議從源53端口進入 | iptables -A INPUT -p udp --sport 53 -j ACCEPT |
# 允許本機訪問本機 | iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT |
#允許所有IP訪問80端口 | iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT |
#允許某個ip訪問 3306 端口 | iptables -A INPUT -s 192.168.0.5 -p tcp --dport 3306 -j ACCEPT |
描述類:
#所有防火牆規則都放到一個shell腳本里,調整后就執行一遍 #所有規則都針對INPUT策略 #不設置出口限制,像ntp就是去出口訪問ntpserver #!/bin/sh #首先先清空所有規則 /sbin/iptables -F #for zabbix #接受xx.xx.xx.xx:10050(zabbix-server)對本地的所有訪問 /sbin/iptables -A INPUT -s xx.xx.xx.xx -p tcp --dport 10050 -j ACCEPT /sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #for office: #接受來自幾個辦公地點公網IP的所有訪問 /sbin/iptables -A INPUT -s xx.xx.xx.xx -j ACCEPT /sbin/iptables -A INPUT -s xx.xx.xx.xx -j ACCEPT #for local /sbin/iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #for DNS: /sbin/iptables -A INPUT -p tcp --source-port 53 -j ACCEPT /sbin/iptables -A INPUT -p udp --source-port 53 -j ACCEPT #for ping: #接受所有ping的請求和回復 /sbin/iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT /sbin/iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT #default: #除了以上規則,所有輸入和轉發都丟棄 /sbin/iptables -A INPUT -j DROP /sbin/iptables -A FORWARD -j DROP
實際:
#for DNS: /sbin/iptables -A INPUT -p tcp --source-port 53 -j ACCEPT /sbin/iptables -A INPUT -p udp --source-port 53 -j ACCEPT #for mysql:/sbin/iptables -A INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT /sbin/iptables -A INPUT -s 192.168.103.103 -p tcp --dport 3306 -j ACCEPT /sbin/iptables -A INPUT -s 192.168.103.109 -p tcp --dport 3306 -j ACCEPT /sbin/iptables -A INPUT -s 192.168.103.151 -p tcp --dport 3306 -j ACCEPT /sbin/iptables -A INPUT -s 192.168.103.158 -p tcp --dport 3306 -j ACCEPT /sbin/iptables -A INPUT -s 192.168.103.172 -p tcp --dport 3306 -j ACCEPT /sbin/iptables -A INPUT -s 192.168.103.214 -p tcp --dport 3306 -j ACCEPT /sbin/iptables -A INPUT -s 192.168.103.252 -p tcp --dport 3306 -j ACCEPT /sbin/iptables -A INPUT -s 192.168.103.6 -p tcp --dport 3306 -j ACCEPT /sbin/iptables -A INPUT -s 192.168.103.72 -p tcp --dport 3306 -j ACCEPT /sbin/iptables -A INPUT -s 192.168.103.82 -p tcp --dport 3306 -j ACCEPT #for ping: /sbin/iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT /sbin/iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT #for centreon /sbin/iptables -A INPUT -s 192.168.1.1 -p tcp --dport 3307 -j ACCEPT #default: /sbin/iptables -A INPUT -j DROP /sbin/iptables -A FORWARD -j DROP
【2.3】防火牆常用命令
Centos6 使用的是iptables ,Centos7 使用的是filewalld
命令 | 釋義 |
/etc/sysconfig/iptables | /etc/firewalld/ | 防火牆的配置文件位置 |
service iptables status | systemctl status firewalld | 查看防火牆服務進程狀態 |
【3】Centos7常用操作
centos7系統使用firewalld服務替代了iptables服務,但是依然可以使用iptables來管理內核的netfilter. 事實上firewall rules 防火牆的規則 其實就是保存在 /etc/sysconfig/iptables。
查看防火牆狀態
# firewall-cmd --state
running
默認情況下,firewalld 處於運行狀態,並拒絕所有傳入流量,但有幾個例外,如 SSH。
在centos 7下啟用iptables systemctl stop firewalld.service systemctl disable firewalld.service yum install iptables-services -y systemctl enable iptables systemctl start iptables 編輯ipatbles的規則 vim /etc/sysconfig/iptables 重啟iptables服務 service iptables restart
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
備注:持久化修改規則可以直接改iptables文件也可以使用iptables命令添加然后使用service iptables save命令保存。由於iptables規則是自上而下匹配,所以添加的所有的規則都必須在以下兩個默認規則之前,理想方法是修改/etc/sysconfig/iptables文件,直接添加規則 。
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
查看狀態: /etc/init.d/iptables status
關閉: /etc/rc.d/init.d/iptables stop
啟動: /etc/rc.d/init.d/iptables start
重啟: /etc/rc.d/init.d/iptables restart
iptables -I 和 iptables -A 區別:防火牆由上往下匹配,-A 會將后執行的策略添加到已有策略后,而-I 則會插入到已有策略的前(既成為第一條策略)。
屏蔽接入請求流量 //test OK
ptables -I INPUT -s 124.115.0.199 -j DROP 是屏蔽124.115.0.199這個IP iptables -I INPUT -s 124.115.0.0/16 -j DROP 是屏蔽124.115.*.*這段IP 就是124.115開頭的IP iptables -I INPUT -s 61.37.80.0/24 -j DROP 是屏蔽61.37.80.*這段IP 意思就是61.37.80開頭的IP iptables -I INPUT -s 124.0.0.0/8 -j DROP 是屏蔽124.*.*.*這段IP 意思就是124開頭的IP 取消屏蔽
iptables -D INPUT -s 124.0.0.0/8 -j DROP //test OK
只要把I 改為 D就好了,然后后面可以寫IP或者IP段
希望這個linux屏蔽IP的命令教程可以幫助到大家
1、安裝iptables防火牆
CentOS執行:yum install iptables Debian/Ubuntu執行:apt-get install iptables
2、清除已有iptables規則 //test OK
iptables -F 清除預設表filter中的所有規則鏈的規則 iptables -X 清除預設表filter中使用者自定鏈中的規則 iptables -Z
3、開放指定的端口
#開放一個IP的特定端口 iptables -A INPUT -s 192.168.0.5 -p tcp --dport 1024:65535 -j ACCEPT
#允許本地回環接口(即運行本機訪問本機) iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 允許已建立的或相關連的通行 iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
#允許所有本機向外的訪問 iptables -A OUTPUT -j ACCEPT
# 允許訪問22端口 iptables -A INPUT -p tcp –dport 22 -j ACCEPT
#允許訪問80端口 iptables -A INPUT -p tcp –dport 80 -j ACCEPT
#允許FTP服務的21和20端口 iptables -A INPUT -p tcp –dport 21 -j ACCEPT iptables -A INPUT -p tcp –dport 20 -j ACCEPT
#如果有其他端口的話,規則也類似,稍微修改上述語句就行
#禁止其他未允許的規則訪問 iptables -A INPUT -j REJECT iptables -A FORWARD -j REJECT
4、屏蔽IP
#如果只是想屏蔽IP的話3、“開放指定的端口”可以直接跳過。 #屏蔽單個IP的命令是 iptables -I INPUT -s 123.45.6.7 -j DROP #封整個段即從123.0.0.1到123.255.255.254的命令 iptables -I INPUT -s 123.0.0.0/8 -j DROP #封IP段即從123.45.0.1到123.45.255.254的命令 iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即從123.45.6.1到123.45.6.254的命令是 iptables -I INPUT -s 123.45.6.0/24 -j DROP
4、查看已添加的iptables規則
iptables -L -n
v:顯示詳細信息,包括每條規則的匹配包數量和匹配字節數
x:在 v 的基礎上,禁止自動單位換算(K、M)
n:只顯示IP地址和端口號,不將ip解析為域名
5、刪除已添加的iptables規則
將所有iptables以序號標記顯示,執行: iptables -L INPUT --line-number 比如要刪除INPUT里序號為1的規則,執行: iptables -D INPUT 1
6、iptables的開機啟動及規則保存
chkconfig –level 345 iptables on CentOS上可以執行:service iptables save保存規則 1、永久生效 開啟:chkconfig iptables on 關閉:chkconfig iptables off 2、即時生效,重啟后失效 開啟:service iptables start 關閉:service iptables stop
---------------------
作者:Lion Li
來源:CSDN
原文:https://blog.csdn.net/weixin_40461281/article/details/83008976
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
————————————————
版權聲明:本文為CSDN博主「roshy」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/roshy/article/details/88972148
【4】其他參考 iptables
打開終端
cd /java/tomcat
#執行
bin/startup.sh #啟動tomcat
bin/shutdown.sh #停止tomcat
tail -f logs/catalina.out #看tomcat的控制台輸出;
#看是否已經有tomcat在運行了
ps -ef |grep tomcat
#如果有,用kill;
kill -9 pid #pid 為相應的進程號
例如 ps -ef |grep tomcat 輸出如下
forward =>filter #穿過本機的數據包
prerouting =>nat #修改目的地址(DNAT)
postrouting =>nat #修改源地址(SNAT)
iptables -t 要操作的表 操作命令 要操作的鏈 規則號碼 匹配條件 -j 匹配到以后的命令
iptables -I INPUT -j DROP #-t 默認為filter
iptables -I INPUT 3 -j DROP #鏈接里插入一條規則(插入第三條)
iptables -D INPUT 3 #按號碼匹配刪除
iptables -D INPUT -s 192.168.0.1 -j DROP #按內容匹配刪除
iptables -R INPUT 3 -j ACCEPT #將原來3的規則改為-j ACCEPT
iptables -P INPUT DROP #設置默認規則
iptables -F INPUT #清空filter表INPUT鏈中的所有規則
iptables -t nat -F PREROUTING
iptables -t nat vxnL PREROUTING
--# v: 顯示詳細信息
--# x: 在v的基礎上,禁止自動單位換算
--# n: 只顯示IP地址和端口號碼,不顯示域名和服務名稱
========匹配條件
-i -i eth0 #流入接口(是否從網口eth0進來)
-o #流出接口
-s -s 192.168.1.0/24 #來源地址
-d #目的地址
-p -p icmp --icmp-type #協議類型
--sport --sport 1000:3000 #來源的端口
--dport --dport 1000: :3000 #目的的端口1000:(1000端口以上) :3000(3000端口以下)
-s 192.168.0.1 -dwww.sina.com-p tcp -dport 80
================================
iptables -A INPUT -j ACCEPT #允許所有訪問本機IP的數據包通過
iptables -A FORWARD -s 192.168.0.1 -j DROP #阻止來源地址為192.168.80.39的數據包通過本機
-j DNAT #目的地址轉換,DNAT支持轉換為單IP,也支持轉換到IP址
池
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.3:80
#把從ppp0進來的要訪問tcp/80的數據包的地址改為192.168.0.3
-j SNAT #源地址轉換
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
#將內網192.168.0.0/24的源地址改為1.1.1.1,用於nat表
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10
#修改成為一個地址池
-j MASQUERADE #動態源地址轉換
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
#將源地址為192.168.0.0/24的數據包進行地址偽裝
===================附加模塊
state #按包狀態匹配
mac #按來源mac匹配
limit #按包速率匹配
multiport #多端口匹配
--state
-m state #new,related,established,invalid
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#包狀態 RELATED(衍生態),ESTABLISHED(連接態),NEW(有別於tcp的syn),INVALID(不被識別的)
iptables -A FORWARD -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP
#阻斷來自某MAC地址的數據包通過本機
iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
#用一定速率去匹配數據包
iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT
#一次匹配多個端口
=======================================實例分析===================================
單服務器的防護:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
制作網關:
echo "1" > /proc/sys/net/ipv4/ip_forward #啟用路由轉發
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
限制內網用戶:filter->forward
iptables -A FORWARD -s 192.168.0.3 -j DROP
iptables -A FORWARD -m mac --mac-source 11:22:33:44:55:66 -j DROP
iptables -A FORWARD -dwww.163.com-j DROP
內網做對外服務器:
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.1.1
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.1.2:80
========================================連接追蹤模塊=================================
主動模式(ACTIVE)
使用連接追蹤模塊(打開tcp/20,防火牆打開高范圍端口,配置ftp,減小被動模式端口范圍)
modprobe ip_nat_ftp
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
被動模式(PASSIVE)
=============================網關策略=================================
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
modprobe ip_nat_ftp
堵:
iptables -A FORWARD -p tcp --dport 80 -j DROP
iptables -A FORWARD -p tcp --dport yyy:zzz -j DROP
通:
iptables -A FORWARD -p tcp --dport xxx -j ACCEPT
iptables -A FORWARD -p tcp --dport yyy:zzz -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P FORWARD DROP
==========================三大紀律五項注意=============================
3: filter nat mangle
5: prerouting,input,forward,output,postrouting
==========================注意事項==============================
#養車好的習慣
iptables -vnL
iptables -t nat -vnL
iptables-save
#注意邏輯順序
iptables -A INPUT -p tcp --dport xxx -j ACCEPT
iptables -I INPUT -p tcp --dport yyy -j ACCEPT
==========================FAQ======================================
iptables -m 模塊名 -h
/lib/modules/`uname -r`/kernel/net/ipv4/netfilter #模塊存放的路徑
modprobe ip_nat_ftp #加載模塊
=========================實戰======================================
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 j SNAT --to 202.106.0.254
iptables -t nat -A POSTROUTING -d 202.106.0.254 -p tcp --dport 80 -j DNAT --to 172.17.0.1
iptables -A FORWARD -i eth2 -p eth1 -m state --state NEW -j DROP
【參考文檔】
https://www.cnblogs.com/qiumingcheng/p/13618186.html
iptables -A INPUT -s 192.168.0.5 -p tcp --dport 1024:65535 -j ACCEPT